diff options
author | Eli Zaretskii <eliz@gnu.org> | 2024-11-02 08:34:42 -0400 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2024-11-02 08:34:42 -0400 |
commit | 9bc6362d6e43e99cfe2dea8748e29e63c65985c0 (patch) | |
tree | 147ec9ea92222a38833cb0cef79ef567d14df682 /lisp/progmodes/peg.el | |
parent | 74d3232522f762742e9acaf9e62b9fd6d63ae380 (diff) | |
parent | 98796f95fa5ce7c38074429517c477cd01b0be37 (diff) | |
download | emacs-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.el | 15 |
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) |