summaryrefslogtreecommitdiff
path: root/lisp/progmodes/peg.el
diff options
context:
space:
mode:
authorEli Zaretskii <eliz@gnu.org>2024-11-02 08:34:42 -0400
committerEli Zaretskii <eliz@gnu.org>2024-11-02 08:34:42 -0400
commit9bc6362d6e43e99cfe2dea8748e29e63c65985c0 (patch)
tree147ec9ea92222a38833cb0cef79ef567d14df682 /lisp/progmodes/peg.el
parent74d3232522f762742e9acaf9e62b9fd6d63ae380 (diff)
parent98796f95fa5ce7c38074429517c477cd01b0be37 (diff)
downloademacs-9bc6362d6e43e99cfe2dea8748e29e63c65985c0.tar.gz
emacs-9bc6362d6e43e99cfe2dea8748e29e63c65985c0.tar.bz2
emacs-9bc6362d6e43e99cfe2dea8748e29e63c65985c0.zip
Merge from origin/emacs-30
98796f95fa5 Work on proced-tests.el 8a4d13e370c ; * doc/lispref/frames.texi (Yanking Media): Add index en... 0aae02a3741 * lisp/files.el (require-with-check): Be a bit more lenie... cc6a11f4832 (with-peg-rules): Fix references to rulesets (bug#74018) 70f084db2ff ; * etc/NEWS: Fix typo (bug#74066). 9e1abf11fc1 Tweak doc w.r.t to "void function" (bug#73886) 7a8ca202c5e Fix flakey proced refine tests (Bug#73441) 55a8cec013e Another 'void' update
Diffstat (limited to 'lisp/progmodes/peg.el')
-rw-r--r--lisp/progmodes/peg.el15
1 files changed, 13 insertions, 2 deletions
diff --git a/lisp/progmodes/peg.el b/lisp/progmodes/peg.el
index 96334162195..0b069e95563 100644
--- a/lisp/progmodes/peg.el
+++ b/lisp/progmodes/peg.el
@@ -412,6 +412,7 @@ sequencing `and' operator of PEG grammars."
(full-rname (format "%s %s" name rname)))
(push `(define-peg-rule ,full-rname . ,(cdr rule)) defs)
(push `(,(peg--rule-id rname) #',(peg--rule-id full-rname)) aliases)))
+ (require 'cl-lib)
`(cl-flet ,aliases
,@defs
(eval-and-compile (put ',name 'peg--rules ',aliases)))))
@@ -432,7 +433,8 @@ rulesets defined previously with `define-peg-ruleset'."
(progn (push rule rulesets) nil)
(cons (car rule) (peg-normalize `(and . ,(cdr rule))))))
rules)))
- (ctx (assq :peg-rules macroexpand-all-environment)))
+ (ctx (assq :peg-rules macroexpand-all-environment))
+ (body
(macroexpand-all
`(cl-labels
,(mapcar (lambda (rule)
@@ -444,6 +446,15 @@ rulesets defined previously with `define-peg-ruleset'."
,@body)
`((:peg-rules ,@(append rules (cdr ctx)))
,@macroexpand-all-environment))))
+ (if (null rulesets)
+ body
+ `(cl-flet ,(mapcan (lambda (ruleset)
+ (let ((aliases (get ruleset 'peg--rules)))
+ (unless aliases
+ (message "Unknown PEG ruleset: %S" ruleset))
+ (copy-sequence aliases)))
+ rulesets)
+ ,body))))
;;;;; Old entry points
@@ -645,7 +656,7 @@ rulesets defined previously with `define-peg-ruleset'."
(code (peg-translate-exp exp)))
(cond
((null msg) code)
- (t (macroexp-warn-and-return msg code)))))
+ (t (macroexp-warn-and-return msg code 'peg nil exp)))))
;; This is the main translation function.
(defun peg-translate-exp (exp)