GNU bug report logs -
#78884
30.1; peg-parse does not treat its arguments as sequence
Previous Next
To reply to this bug, email your comments to 78884 AT debbugs.gnu.org.
Toggle the display of automated, internal messages from the tracker.
Report forwarded
to
monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org
:
bug#78884
; Package
emacs
.
(Tue, 24 Jun 2025 00:13:02 GMT)
Full text and
rfc822 format available.
Acknowledgement sent
to
Tim Landscheidt <tim <at> tim-landscheidt.de>
:
New bug report received and forwarded. Copy sent to
monnier <at> iro.umontreal.ca, bug-gnu-emacs <at> gnu.org
.
(Tue, 24 Jun 2025 00:13:02 GMT)
Full text and
rfc822 format available.
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
The docstring for Emacs 30.1's peg-parse reads:
| (peg-parse &rest PEXS)
| Match PEXS at point.
| PEXS is a sequence of PEG expressions, implicitly combined with ‘and’.
| Returns STACK if the match succeed and signals an error on failure,
| moving point along the way.
However, it will fail with (for example) "Wrong type
argument: listp" when called as such:
| ELISP> (with-temp-buffer
| (insert "ABCDEF")
| (goto-char (point-min))
| (peg-parse
| (bob)
| "ABC"))
| *** Eval error *** Wrong type argument: listp, "ABC"
| ELISP>
An explicit sequence with "and" works:
| ELISP> (with-temp-buffer
| (insert "ABCDEF")
| (goto-char (point-min))
| (peg-parse
| (and
| (bob)
| "ABC")))
| t
| ELISP>
Information forwarded
to
bug-gnu-emacs <at> gnu.org
:
bug#78884
; Package
emacs
.
(Tue, 24 Jun 2025 18:13:02 GMT)
Full text and
rfc822 format available.
Message #8 received at 78884 <at> debbugs.gnu.org (full text, mbox):
Tim Landscheidt [2025-06-24 00:12:11] wrote:
> The docstring for Emacs 30.1's peg-parse reads:
>
> | (peg-parse &rest PEXS)
>
> | Match PEXS at point.
> | PEXS is a sequence of PEG expressions, implicitly combined with ‘and’.
> | Returns STACK if the match succeed and signals an error on failure,
> | moving point along the way.
>
> However, it will fail with (for example) "Wrong type
> argument: listp" when called as such:
>
> | ELISP> (with-temp-buffer
> | (insert "ABCDEF")
> | (goto-char (point-min))
> | (peg-parse
> | (bob)
> | "ABC"))
> | *** Eval error *** Wrong type argument: listp, "ABC"
> | ELISP>
>
> An explicit sequence with "and" works:
>
> | ELISP> (with-temp-buffer
> | (insert "ABCDEF")
> | (goto-char (point-min))
> | (peg-parse
> | (and
> | (bob)
> | "ABC")))
> | t
>
> | ELISP>
Can you check that the quick-fix below fixes things on your side (and
not just for your example)?
Stefan
diff --git a/lisp/progmodes/peg.el b/lisp/progmodes/peg.el
index 7827990af35..b5ffff31362 100644
--- a/lisp/progmodes/peg.el
+++ b/lisp/progmodes/peg.el
@@ -320,8 +320,9 @@ peg-parse
moving point along the way."
(if (and (consp (car pexs))
(symbolp (caar pexs))
- (not (ignore-errors
- (not (eq 'call (car (peg-normalize (car pexs))))))))
+ (not (or (get (peg--rule-id (caar pexs)) 'peg--rule-definition)
+ (ignore-errors
+ (not (eq 'call (car (peg-normalize (car pexs)))))))))
;; The first of `pexs' has not been defined as a rule, so assume
;; that none of them have been and they should be fed to
;; `with-peg-rules'
This bug report was last modified 1 day ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.