[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 12d2ad6 24/60: Bug fixes
From: |
Junpeng Qiu |
Subject: |
[elpa] master 12d2ad6 24/60: Bug fixes |
Date: |
Tue, 25 Oct 2016 17:45:14 +0000 (UTC) |
branch: master
commit 12d2ad6e6adbb130a742a0c0c558a8861f0bc7e9
Author: Junpeng Qiu <address@hidden>
Commit: Junpeng Qiu <address@hidden>
Bug fixes
---
parsec.el | 54 +++++++++++++++++++++++++++++-------------------------
1 file changed, 29 insertions(+), 25 deletions(-)
diff --git a/parsec.el b/parsec.el
index 8d998a3..faf2614 100644
--- a/parsec.el
+++ b/parsec.el
@@ -85,7 +85,7 @@
(if (and (not (eobp))
(funcall pred next-char))
(progn (forward-char 1)
- (char-to-string ch))
+ (char-to-string next-char))
(parsec-stop :expected (format "%s" pred)
:found (parsec-eof-or-char-as-string)))))
@@ -129,21 +129,23 @@
(parser-sym (make-symbol "parser"))
(error-sym (make-symbol "err"))
(error-str-list-sym (make-symbol "err-list")))
- `(let (,error-str-list-sym)
- (cl-loop named ,outer-sym for ,parser-sym in ',parsers
- finally (parsec-stop
- :message
- (replace-regexp-in-string
- "\n" "\n\t"
- (concat "None of the parsers succeeds:\n"
- (mapconcat #'identity ,error-str-list-sym
"\n"))))
- do
- (parsec-protect-atom parsec-or
- (parsec-start
- (cl-return-from ,outer-sym
- (parsec-eavesdrop-error ,error-sym
- (parsec-make-atom parsec-or (eval ,parser-sym))
- (push (parsec-error-str ,error-sym)
,error-str-list-sym)))))))))
+ `(let (,error-str-list-sym ,parser-sym ,error-sym)
+ (catch 'parsec-parsec-or
+ ,@(mapcar
+ (lambda (parser)
+ `(parsec-protect-atom parsec-or
+ (parsec-start
+ (throw 'parsec-parsec-or
+ (parsec-eavesdrop-error ,error-sym
+ (parsec-make-atom parsec-or ,parser)
+ (push (parsec-error-str ,error-sym)
,error-str-list-sym))))))
+ parsers)
+ (parsec-stop
+ :message
+ (replace-regexp-in-string
+ "\n" "\n\t"
+ (concat "None of the parsers succeeds:\n"
+ (mapconcat #'identity ,error-str-list-sym "\n"))))))))
(defalias 'parsec-and 'progn)
@@ -188,7 +190,6 @@
`(let ((,orig-pt-sym (point)))
(parsec-eavesdrop-error ,error-sym
,parser
- (message "equal=%s" (= (point) ,orig-pt-sym))
(unless (= (point) ,orig-pt-sym)
(throw ',tag ,error-sym))))))
@@ -232,7 +233,9 @@
`(cons ,parser (parsec-many ,parser)))
(defsubst parsec-list-to-string (l)
- (mapconcat #'identity l ""))
+ (if (stringp l)
+ l
+ (mapconcat #'identity l "")))
(defmacro parsec-many-as-string (parser)
`(mapconcat #'identity (parsec-many ,parser) ""))
@@ -243,11 +246,12 @@
(defmacro parsec-many-till (parser end &optional type)
(let ((res-sym (make-symbol "results"))
(end-res-sym (make-symbol "end-result")))
- `(let* (,res-sym
- (,end-res-sym (catch 'parsec-immediate-stop
- (while t
- (parsec-or (throw 'parsec-immediate-stop ,end)
- (push ,parser ,res-sym))))))
+ `(let ((,res-sym nil) ,end-res-sym)
+ (setq ,end-res-sym
+ (catch 'parsec-immediate-stop
+ (while t
+ (parsec-or (throw 'parsec-immediate-stop ,end)
+ (push ,parser ,res-sym)))))
(setq ,res-sym (nreverse ,res-sym))
,(cond
((eq type :both) `(cons ,res-sym ,end-res-sym))
@@ -303,8 +307,8 @@
(defmacro parsec-count-as-string (n parser)
`(parsec-list-to-string (parsec-count ,n ,parser)))
-(defmacro parsec-option (opt &rest forms)
- `(parsec-or (parsec-and ,@forms) ,opt))
+(defmacro parsec-option (opt parser)
+ `(parsec-or ,parser ,opt))
(defmacro parsec-optional (&rest forms)
`(parsec-or (parsec-and ,@forms) nil))
- [elpa] master 31388e6 52/60: Add -s aliases, (continued)
- [elpa] master 31388e6 52/60: Add -s aliases, Junpeng Qiu, 2016/10/25
- [elpa] master 34521c6 53/60: Update README about *-s functions, Junpeng Qiu, 2016/10/25
- [elpa] master 8f0c266 58/60: Add doc for parsec-peek(-p), Junpeng Qiu, 2016/10/25
- [elpa] master ffd42de 45/60: Use simple-csv-parser.el as a demo, Junpeng Qiu, 2016/10/25
- [elpa] master bf49fb6 38/60: Upate README, Junpeng Qiu, 2016/10/25
- [elpa] master 966ca9e 43/60: Add comments to parsec.el, Junpeng Qiu, 2016/10/25
- [elpa] master c61a38c 22/60: Add convenient newline methods, Junpeng Qiu, 2016/10/25
- [elpa] master 0c3408a 01/60: Init commit, Junpeng Qiu, 2016/10/25
- [elpa] master 1929932 02/60: Split into two files, Junpeng Qiu, 2016/10/25
- [elpa] master fd77961 25/60: Add a few simple API, Junpeng Qiu, 2016/10/25
- [elpa] master 12d2ad6 24/60: Bug fixes,
Junpeng Qiu <=
- [elpa] master adf4706 20/60: Add many-till, notFollowedBy and fix others, Junpeng Qiu, 2016/10/25
- [elpa] master 32809ad 30/60: Add parsec-error-new-2, Junpeng Qiu, 2016/10/25
- [elpa] master 3503e4a 13/60: Rename for easier understanding, Junpeng Qiu, 2016/10/25
- [elpa] master 4fb2abe 29/60: Update simple-csv-parser, Junpeng Qiu, 2016/10/25
- [elpa] master fa2e6f1 27/60: Add gitignore, Junpeng Qiu, 2016/10/25
- [elpa] master a06220c 42/60: Update README, Junpeng Qiu, 2016/10/25
- [elpa] master f7e8629 26/60: Add tests, Junpeng Qiu, 2016/10/25
- [elpa] master bc11325 50/60: Add file examples/.nosearch, Junpeng Qiu, 2016/10/25
- [elpa] master 1da4344 32/60: Update url-str-parser, Junpeng Qiu, 2016/10/25
- [elpa] master 89dd2ac 54/60: Fix some wording in README, Junpeng Qiu, 2016/10/25