emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] master 2e8c52b 40/60: Make sure parsec-not-followed-by consumes n


From: Junpeng Qiu
Subject: [elpa] master 2e8c52b 40/60: Make sure parsec-not-followed-by consumes no input
Date: Tue, 25 Oct 2016 17:45:15 +0000 (UTC)

branch: master
commit 2e8c52b1360f0cf05dc6adf4da9ab0874b66a3e6
Author: Junpeng Qiu <address@hidden>
Commit: Junpeng Qiu <address@hidden>

    Make sure parsec-not-followed-by consumes no input
---
 parsec-tests.el |    9 +++++++++
 parsec.el       |   13 +++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/parsec-tests.el b/parsec-tests.el
index 661411f..fdf2055 100644
--- a/parsec-tests.el
+++ b/parsec-tests.el
@@ -342,6 +342,15 @@
        (parsec-str "ab")
        (parsec-not-followed-by (parsec-ch ?c))
        (parsec-ch ?d)))
+    '("ab" "d")))
+  (should
+   (equal
+    (parsec-with-input "abd"
+      (parsec-collect*
+       (parsec-str "ab")
+       (parsec-or (parsec-not-followed-by (parsec-ch ?d))
+                  (parsec-not-followed-by (parsec-ch ?c)))
+       (parsec-ch ?d)))
     '("ab" "d"))))
 
 (ert-deftest test-parsec-endby ()
diff --git a/parsec.el b/parsec.el
index 295aea8..1e27d5e 100644
--- a/parsec.el
+++ b/parsec.el
@@ -394,12 +394,13 @@ meaning as `parsec-many-till'."
   "Succeed only when PARSER fails.  Consume no input."
   (let ((res-sym (make-symbol "results")))
     `(catch 'parsec-not-followed-by
-       (let ((,res-sym
-              (catch 'parsec-immediate-stop
-                (throw 'parsec-not-followed-by
-                       (parsec-or (throw 'parsec-immediate-stop (parsec-try 
,parser))
-                                  nil)))))
-         (parsec-stop :message (format "Unexpected followed by: %s" 
,res-sym))))))
+       (parsec-try
+        (let ((,res-sym
+               (catch 'parsec-immediate-stop
+                 (throw 'parsec-not-followed-by
+                        (parsec-or (throw 'parsec-immediate-stop (parsec-try 
,parser))
+                                   nil)))))
+          (parsec-stop :message (format "Unexpected followed by: %s" 
,res-sym)))))))
 
 (defmacro parsec-endby (parser end)
   "Parse zero or more occurrences of PARSER, separated and ended by END.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]