Commit 5121ef4c authored by Stefan Monnier's avatar Stefan Monnier
Browse files

(edebug-storing-offsets): Move indent and debug to inside the macro.

(edebug-read-storing-offsets): Simplify.
(edebug-read-quote, edebug-read-function): Place the start-position correctly.
(edebug-read-backquote-new): Remove.
(edebug-read-backquote-level): New var to replace it.
(edebug-read-backquote): Increment it.  Don't store offsets one extra time.
(edebug-read-comma): Decrement it.  Read the comma as a plain
symbol if outside of any new-style backquote.
(edebug-read-list): Use edebug-read-backquote-level.
Don't call edebug-read-backquote directly.  This way the extra
offsets store is done exactly when it's needed.
(edebug-read-vector): Use push.
(defmacro): Add support for the `declare' thingy.
parent 034060e4
......@@ -810,10 +810,8 @@ already is one.)"
;; Ignore the last created offset pair.
(setcdr edebug-current-offset (cdr (cdr edebug-current-offset))))
(def-edebug-spec edebug-storing-offsets (form body))
(put 'edebug-storing-offsets 'lisp-indent-hook 1)
(defmacro edebug-storing-offsets (point &rest body)
(declare (debug (form body)) (indent 1))
`(unwind-protect
(progn
(edebug-store-before-offset ,point)
......@@ -837,15 +835,13 @@ already is one.)"
))
(defun edebug-read-storing-offsets (stream)
(let ((class (edebug-next-token-class))
func
edebug-read-dotted-list) ; see edebug-store-after-offset
(let (edebug-read-dotted-list) ; see edebug-store-after-offset
(edebug-storing-offsets (point)
(if (setq func (assq class edebug-read-alist))
(funcall (cdr func) stream)
;; anything else, just read it.
(edebug-original-read stream))
)))
(funcall
(or (cdr (assq (edebug-next-token-class) edebug-read-alist))
;; anything else, just read it.
'edebug-original-read)
stream))))
(defun edebug-read-symbol (stream)
(edebug-original-read stream))
......@@ -857,25 +853,20 @@ already is one.)"
;; Turn 'thing into (quote thing)
(forward-char 1)
(list
(edebug-storing-offsets (point) 'quote)
(edebug-storing-offsets (1- (point)) 'quote)
(edebug-read-storing-offsets stream)))
(defvar edebug-read-backquote-level 0
"If non-zero, we're in a new-style backquote.
It should never be negative. This controls how we read comma constructs.")
(defun edebug-read-backquote (stream)
;; Turn `thing into (\` thing)
(let ((opoint (point)))
(forward-char 1)
;; Generate the same structure of offsets we would have
;; if the resulting list appeared verbatim in the input text.
(edebug-storing-offsets opoint
(list
(edebug-storing-offsets opoint '\`)
(edebug-read-storing-offsets stream)))))
(defvar edebug-read-backquote-new nil
"Non-nil if reading the inside of a new-style backquote with no parens around it.
Value of nil means reading the inside of an old-style backquote construct
which is surrounded by an extra set of parentheses.
This controls how we read comma constructs.")
(forward-char 1)
(list
(edebug-storing-offsets (1- (point)) '\`)
(let ((edebug-read-backquote-level (1+ edebug-read-backquote-level)))
(edebug-read-storing-offsets stream))))
(defun edebug-read-comma (stream)
;; Turn ,thing into (\, thing). Handle ,@ and ,. also.
......@@ -890,11 +881,12 @@ This controls how we read comma constructs.")
(forward-char 1)))
;; Generate the same structure of offsets we would have
;; if the resulting list appeared verbatim in the input text.
(if edebug-read-backquote-new
(list
(edebug-storing-offsets opoint symbol)
(edebug-read-storing-offsets stream))
(edebug-storing-offsets opoint symbol)))))
(if (zerop edebug-read-backquote-level)
(edebug-storing-offsets opoint symbol)
(list
(edebug-storing-offsets opoint symbol)
(let ((edebug-read-backquote-level (1- edebug-read-backquote-level)))
(edebug-read-storing-offsets stream)))))))
(defun edebug-read-function (stream)
;; Turn #'thing into (function thing)
......@@ -902,11 +894,11 @@ This controls how we read comma constructs.")
(cond ((eq ?\' (following-char))
(forward-char 1)
(list
(edebug-storing-offsets (point)
(edebug-storing-offsets (- (point) 2)
(if (featurep 'cl) 'function* 'function))
(edebug-read-storing-offsets stream)))
((memq (following-char) '(?: ?B ?O ?X ?b ?o ?x ?1 ?2 ?3 ?4 ?5 ?6
?7 ?8 ?9 ?0))
?7 ?8 ?9 ?0))
(backward-char 1)
(edebug-original-read stream))
(t (edebug-syntax-error "Bad char after #"))))
......@@ -916,18 +908,17 @@ This controls how we read comma constructs.")
(prog1
(let ((elements))
(while (not (memq (edebug-next-token-class) '(rparen dot)))
(if (eq (edebug-next-token-class) 'backquote)
(let ((edebug-read-backquote-new (not (null elements)))
(opoint (point)))
(if edebug-read-backquote-new
(setq elements (cons (edebug-read-backquote stream) elements))
(forward-char 1) ; Skip backquote.
;; Call edebug-storing-offsets here so that we
;; produce the same offsets we would have had
;; if the backquote were an ordinary symbol.
(setq elements (cons (edebug-storing-offsets opoint '\`)
elements))))
(setq elements (cons (edebug-read-storing-offsets stream) elements))))
(if (and (eq (edebug-next-token-class) 'backquote)
(null elements)
(zerop edebug-read-backquote-level))
(progn
;; Old style backquote.
(forward-char 1) ; Skip backquote.
;; Call edebug-storing-offsets here so that we
;; produce the same offsets we would have had
;; if the backquote were an ordinary symbol.
(push (edebug-storing-offsets (1- (point)) '\`) elements))
(push (edebug-read-storing-offsets stream) elements)))
(setq elements (nreverse elements))
(if (eq 'dot (edebug-next-token-class))
(let (dotted-form)
......@@ -947,7 +938,7 @@ This controls how we read comma constructs.")
(prog1
(let ((elements))
(while (not (eq 'rbracket (edebug-next-token-class)))
(setq elements (cons (edebug-read-storing-offsets stream) elements)))
(push (edebug-read-storing-offsets stream) elements))
(apply 'vector (nreverse elements)))
(forward-char 1) ; skip \]
))
......@@ -1983,7 +1974,7 @@ expressions; a `progn' form will be returned enclosing these forms."
[&optional ("interactive" interactive)]
def-body))
(def-edebug-spec defmacro
(&define name lambda-list def-body))
(&define name lambda-list [&optional ("declare" &rest sexp)] def-body))
(def-edebug-spec arglist lambda-list) ;; deprecated - use lambda-list.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment