Subject: bug#6566: 23.2; error: (invalid-read-syntax "Dotted spec required.")

From: Leo <[email-masked]>
Date: Mon, 05 Jul 2010 13:52:17 +0100

To reproduce:

C-u C-M-x to edebug the following example function

(defun test ()
  (destructuring-bind (beg . end)
      '(1 . 2)))

Should see a backtrace as attached to the end of this report.

In GNU Emacs 23.2.9 of 2010-06-26 on Victoria.local

Debugger entered--Lisp error: (invalid-read-syntax "Dotted spec required.")
  signal(invalid-read-syntax ("Dotted spec required."))
  edebug-syntax-error("Dotted spec required.")
  apply(edebug-syntax-error "Dotted spec required.")
  edebug-no-match((end (44 . 48) . 49) "Dotted spec required.")
  edebug-match-specs((end (44 . 48) . 49) ([&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-specs((end (44 . 48) . 49) ([&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-specs((end (44 . 48) . 49) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]) edebug-match-specs)
  edebug-match-sublist((end (44 . 48) . 49) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]))
  edebug-match-list((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]))
  edebug-match-one-spec((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) ([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg]))
  edebug-match-specs((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) (([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg])) edebug-match-specs)
  edebug-match((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) (([&optional "&environment" arg] [&rest cl-macro-arg] [&optional ["&optional" &rest &or ... arg]] [&optional [[&or "&rest" "&body"] cl-macro-arg]] [&optional ["&key" [&rest [&or ... arg]] &optional "&allow-other-keys"]] [&optional ["&aux" &rest &or ... symbolp]] [&optional "&environment" arg])))
  edebug-match-symbol((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) cl-macro-list)
  edebug-match-one-spec((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) cl-macro-list)
  edebug-match-specs((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) (cl-macro-list def-form cl-declarations def-body) edebug-match-specs)
  edebug-match-specs((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) ("destructuring-bind" cl-macro-list def-form cl-declarations def-body) edebug-match-specs)
  edebug-match((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) ("destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-make-form-wrapper((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) 18 64 ("destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-defining-form((((beg . end) (quote ...)) (38 (39 . 42) (44 . 48) . 49) (56 (56 . 57) (57 ... ... . 64) . 64) . 65) 18 65 ("destructuring-bind" cl-macro-list def-form cl-declarations def-body))
  edebug-form((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66))
  edebug-match-form((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66))
  edebug-match-symbol((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) form)
  edebug-match-one-spec((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) form)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (form) edebug-&rest-wrapper)
  byte-code("\304	\n#.\305\207" [cursor specs remainder-handler result edebug-match-specs nil] 4)
  edebug-&optional-wrapper((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (form) edebug-&rest-wrapper)
  edebug-&rest-wrapper((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (form) edebug-&rest-wrapper)
  edebug-match-&rest((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (form))
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (&rest form) edebug-match-specs)
  edebug-match((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (&rest form))
  edebug-match-def-body((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66))
  edebug-match-symbol((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) def-body)
  edebug-match-one-spec((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) def-body)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (def-body) edebug-match-specs)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) ([&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) ([&optional stringp] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) (name lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-specs((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) ("defun" name lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body) edebug-match-specs)
  edebug-match-sublist((((destructuring-bind ... ...)) (18 (19 . 37) (38 ... ... . 49) (56 ... ... . 64) . 65) . 66) ("defun" name lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body))
  edebug-match-list((((defun test nil ...)) (1 (2 . 7) (8 . 12) (13 . 15) (18 ... ... ... . 65) . 66)) ("defun" name lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body))
  edebug-match-one-spec((((defun test nil ...)) (1 (2 . 7) (8 . 12) (13 . 15) (18 ... ... ... . 65) . 66)) ("defun" name lambda-list [&optional stringp] [&optional ("interactive" interactive)] def-body))
  edebug-match-specs((((defun test nil ...)) (1 (2 . 7) (8 . 12) (13 . 15) (18 ... ... ... . 65) . 66)) (("defun" name lambda-list [&optional stringp] [&optional ...] def-body)) edebug-match-specs)
  edebug-match((((defun test nil ...)) (1 (2 . 7) (8 . 12) (13 . 15) (18 ... ... ... . 65) . 66)) (("defun" name lambda-list [&optional stringp] [&optional ...] def-body)))
  edebug-make-form-wrapper((((defun test nil ...)) (1 (2 . 7) (8 . 12) (13 . 15) (18 ... ... ... . 65) . 66)) 1 65 (("defun" name lambda-list [&optional stringp] [&optional ...] def-body)))
  edebug-read-and-maybe-wrap-form1()
  byte-code("\301 .\302\207" [result edebug-read-and-maybe-wrap-form1 nil] 1)
  edebug-read-and-maybe-wrap-form()
  edebug-read-top-level-form()
  eval-defun((4))
  call-interactively(eval-defun nil nil)