[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 3503e4a 13/60: Rename for easier understanding
From: |
Junpeng Qiu |
Subject: |
[elpa] master 3503e4a 13/60: Rename for easier understanding |
Date: |
Tue, 25 Oct 2016 17:45:13 +0000 (UTC) |
branch: master
commit 3503e4a624ddf1289cffd6d761c04a08953939f3
Author: Junpeng Qiu <address@hidden>
Commit: Junpeng Qiu <address@hidden>
Rename for easier understanding
---
parsec.el | 71 ++++++++++++++++++++++++++++---------------------------------
1 file changed, 32 insertions(+), 39 deletions(-)
diff --git a/parsec.el b/parsec.el
index 0c4c772..5c3e45b 100644
--- a/parsec.el
+++ b/parsec.el
@@ -38,7 +38,7 @@
(char-to-string c)
"`eob'")))
-(defun parsec-msg (msg)
+(defun parsec-new-msg (msg)
(cons 'parsec-msg msg))
(defun parsec-msg-p (msg)
@@ -59,10 +59,10 @@
(when (or (stringp msg)
(and (stringp expected)
(stringp found)))
- (parsec-msg (if (stringp msg)
- msg
- (format "Found \"%s\" -> Expected \"%s\""
- found expected))))))))
+ (parsec-new-msg (if (stringp msg)
+ msg
+ (format "Found \"%s\" -> Expected \"%s\""
+ found expected))))))))
(defun parsec-ch (ch &rest args)
(let ((next-char (char-after)))
@@ -152,12 +152,12 @@
(concat "None of the parsers succeeds:\n"
(mapconcat #'identity ,error-list-sym
"\n"))))
do
- (parsec--if-catch-and-forward 'parsec-failed-at-half
- (parsec-start
- (cl-return-from ,outer-sym
- (parsec--if-handle-and-forward ,msg-sym
- (parsec-as-single (eval ,parser-sym))
- (push (parsec-msg-get ,msg-sym) ,error-list-sym)))))))))
+ (parsec-protect-atom
+ (parsec-start
+ (cl-return-from ,outer-sym
+ (parsec-eavesdrop-message ,msg-sym
+ (parsec-make-atom (eval ,parser-sym))
+ (push (parsec-msg-get ,msg-sym)
,error-list-sym)))))))))
(defalias 'parsec-and 'progn)
@@ -172,25 +172,27 @@
(let ((orig-pt-sym (make-symbol "orig-pt"))
(msg-sym (make-symbol "msg")))
`(let ((,orig-pt-sym (point)))
- (parsec--if-handle-and-forward ,msg-sym
+ (parsec-eavesdrop-message ,msg-sym
(parsec-and ,@forms)
(goto-char ,orig-pt-sym)))))
-(defmacro parsec--if-catch (tag body &rest forms)
- (declare (indent 2))
- `(catch 'parsec-success
- (catch ,tag
- (throw 'parsec-success ,body))
- ,@forms))
-
-(defmacro parsec--if-catch-and-forward (tag parser)
- (declare (indent 1))
+(defmacro parsec-protect-atom (parser)
+ "This must be used together with `parsec-make-atom'."
(let ((error-sym (make-symbol "err")))
`(catch 'parsec-success
- (parsec-throw (catch ,tag
+ (parsec-throw (catch 'parsec-failed-at-half
(throw 'parsec-success ,parser))))))
-(defmacro parsec--if-handle-and-forward (error-sym parser &rest handler)
+(defmacro parsec-make-atom (parser)
+ (let ((orig-pt-sym (make-symbol "orig-pt"))
+ (error-sym (make-symbol "err")))
+ `(let ((,orig-pt-sym (point)))
+ (parsec-eavesdrop-message ,error-sym
+ ,parser
+ (unless (= (point) ,orig-pt-sym)
+ (throw 'parsec-failed-at-half ,error-sym))))))
+
+(defmacro parsec-eavesdrop-message (error-sym parser &rest handler)
(declare (indent 2))
`(catch 'parsec-success
(let ((,error-sym (parsec-start
@@ -200,12 +202,12 @@
(defmacro parsec-with-message (msg &rest forms)
(declare (indent 1))
- `(parsec--if-catch 'parsec-failed
+ `(parsec-eavesdrop-message _
(parsec-and ,@forms)
- (parsec-throw (parsec-msg msg))))
+ (parsec-throw (parsec-new-msg msg))))
(defmacro parsec-ensure (&rest forms)
- `(parsec--if-handle-and-forward msg
+ `(parsec-eavesdrop-message msg
(parsec-and ,@forms)
(error "%s" (parsec-msg-get msg))))
@@ -224,23 +226,14 @@
`(,skip 1)
`(forward-char 1)))))
-(defmacro parsec-as-single (parser)
- (let ((orig-pt-sym (make-symbol "orig-pt"))
- (error-sym (make-symbol "err")))
- `(let ((,orig-pt-sym (point)))
- (parsec--if-handle-and-forward ,error-sym
- ,parser
- (unless (= (point) ,orig-pt-sym)
- (throw 'parsec-failed-at-half ,error-sym))))))
-
(defmacro parsec-many (parser)
(let ((res (make-symbol "results"))
(error-sym (make-symbol "err")))
`(let (,res)
- (parsec--if-catch-and-forward 'parsec-failed-at-half
- (parsec-start
- (while (not (eobp))
- (push (parsec-as-single ,parser) ,res))))
+ (parsec-protect-atom
+ (parsec-start
+ (while (not (eobp))
+ (push (parsec-make-atom ,parser) ,res))))
(nreverse ,res))))
(defmacro parsec-many1 (parser)
- [elpa] master ffd42de 45/60: Use simple-csv-parser.el as a demo, (continued)
- [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, 2016/10/25
- [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 <=
- [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
- [elpa] master 55515ca 48/60: Add missing dependencies, Junpeng Qiu, 2016/10/25
- [elpa] master 2e9f962 59/60: Add new package parsec to externals-list, Junpeng Qiu, 2016/10/25
- [elpa] master 3827d26 36/60: Add docs for user-interface functions & combinators, Junpeng Qiu, 2016/10/25