mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-08 00:33:13 -08:00
peg.el: Fix bug#79502
* lisp/progmodes/peg.el (peg--merge-error): Provide a default method. (peg--merge-error) <call>: Handle calls with arguments. (peg--merge-error) <any, not>: Remove methods, now redundant with the default method. (peg--merge-error) <guard>: Delegate to the default method if we can't do better.
This commit is contained in:
parent
4e7cb37b84
commit
021b7065bb
1 changed files with 5 additions and 17 deletions
|
|
@ -897,8 +897,8 @@ input. PATH is the list of rules that we have visited so far."
|
|||
(defun peg-merge-error (exp merged)
|
||||
(apply #'peg--merge-error merged exp))
|
||||
|
||||
(cl-defgeneric peg--merge-error (_merged head &rest args)
|
||||
(error "No merge-error method for: %S" (cons head args)))
|
||||
(cl-defgeneric peg--merge-error (merged head &rest args)
|
||||
(cl-adjoin (cons head args) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql or)) e1 e2)
|
||||
(peg-merge-error e2 (peg-merge-error e1 merged)))
|
||||
|
|
@ -911,36 +911,24 @@ input. PATH is the list of rules that we have visited so far."
|
|||
;;(add-to-list 'merged str)
|
||||
(cl-adjoin str merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql call)) rule)
|
||||
;; (add-to-list 'merged rule)
|
||||
(cl-adjoin rule merged :test #'equal))
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql call)) rule &rest args)
|
||||
(cl-adjoin (if args (cons rule args) rule) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql char)) char)
|
||||
;; (add-to-list 'merged (string char))
|
||||
(cl-adjoin (string char) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql set)) r c k)
|
||||
;; (add-to-list 'merged (peg-make-charset-regexp r c k))
|
||||
(cl-adjoin (peg-make-charset-regexp r c k) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql range)) from to)
|
||||
;; (add-to-list 'merged (format "[%c-%c]" from to))
|
||||
(cl-adjoin (format "[%c-%c]" from to) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql *)) exp)
|
||||
(peg-merge-error exp merged))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql any)))
|
||||
;; (add-to-list 'merged '(any))
|
||||
(cl-adjoin '(any) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql not)) x)
|
||||
;; (add-to-list 'merged `(not ,x))
|
||||
(cl-adjoin `(not ,x) merged :test #'equal))
|
||||
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql action)) _action) merged)
|
||||
(cl-defmethod peg--merge-error (merged (_ (eql guard)) e)
|
||||
(if (eq e t) merged (cl-adjoin `(guard ,e) merged :test #'equal)))
|
||||
(if (eq e t) merged (cl-call-next-method)))
|
||||
|
||||
(provide 'peg)
|
||||
(require 'peg)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue