mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-16 17:24:23 +00:00
(peg-parse): Fix bug#78884
* lisp/progmodes/peg.el (peg-parse): Be more careful when testing if a symbol is the name of an existing rule. Improve docstring. test/lisp/progmodes/peg-tests.el (peg-tests--peg-parse): New test.
This commit is contained in:
parent
6c0bbf0f92
commit
68100ca656
2 changed files with 14 additions and 3 deletions
|
|
@ -317,11 +317,15 @@ EXPS is a list of rules/expressions that failed.")
|
|||
"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."
|
||||
moving point along the way.
|
||||
For backward compatibility (and convenience) PEXS can also be a list of
|
||||
RULES in which case we run the first such rule. In case of ambiguity,
|
||||
prefix PEXS with \"\" so it doesn't look like a list of rules."
|
||||
(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'
|
||||
|
|
|
|||
|
|
@ -396,5 +396,12 @@ resp. succeeded instead of signaling an error."
|
|||
;; (peg-ex-last-digit2 (make-string 500000 ?-))
|
||||
;; (peg-ex-last-digit2 (make-string 500000 ?5))
|
||||
|
||||
(ert-deftest peg-tests--peg-parse ()
|
||||
(with-temp-buffer
|
||||
(insert "abc")
|
||||
(goto-char (point-min))
|
||||
(peg-parse (bob) "ab")
|
||||
(should (looking-at "c"))))
|
||||
|
||||
(provide 'peg-tests)
|
||||
;;; peg-tests.el ends here
|
||||
|
|
|
|||
Loading…
Reference in a new issue