mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-14 10:00:25 -08:00
Merge remote-tracking branch 'savannah/master' into native-comp
This commit is contained in:
commit
f92bb788a0
255 changed files with 4837 additions and 3941 deletions
|
|
@ -3020,7 +3020,8 @@ for symbols generated by the byte compiler itself."
|
|||
;; unless it is the last element of the body.
|
||||
(if (cdr body)
|
||||
(setq body (cdr body))))))
|
||||
(int (assq 'interactive body)))
|
||||
(int (assq 'interactive body))
|
||||
command-modes)
|
||||
(when lexical-binding
|
||||
(dolist (var arglistvars)
|
||||
(when (assq var byte-compile--known-dynamic-vars)
|
||||
|
|
@ -3031,10 +3032,13 @@ for symbols generated by the byte compiler itself."
|
|||
;; Skip (interactive) if it is in front (the most usual location).
|
||||
(if (eq int (car body))
|
||||
(setq body (cdr body)))
|
||||
(cond ((consp (cdr int))
|
||||
(if (cdr (cdr int))
|
||||
(byte-compile-warn "malformed interactive spec: %s"
|
||||
(prin1-to-string int)))
|
||||
(cond ((consp (cdr int)) ; There is an `interactive' spec.
|
||||
;; Check that the bit after the `interactive' spec is
|
||||
;; just a list of symbols (i.e., modes).
|
||||
(unless (seq-every-p #'symbolp (cdr (cdr int)))
|
||||
(byte-compile-warn "malformed interactive specc: %s"
|
||||
(prin1-to-string int)))
|
||||
(setq command-modes (cdr (cdr int)))
|
||||
;; If the interactive spec is a call to `list', don't
|
||||
;; compile it, because `call-interactively' looks at the
|
||||
;; args of `list'. Actually, compile it to get warnings,
|
||||
|
|
@ -3045,15 +3049,14 @@ for symbols generated by the byte compiler itself."
|
|||
(while (consp (cdr form))
|
||||
(setq form (cdr form)))
|
||||
(setq form (car form)))
|
||||
(if (and (eq (car-safe form) 'list)
|
||||
;; For code using lexical-binding, form is not
|
||||
;; valid lisp, but rather an intermediate form
|
||||
;; which may include "calls" to
|
||||
;; internal-make-closure (Bug#29988).
|
||||
(not lexical-binding))
|
||||
nil
|
||||
(setq int `(interactive ,newform)))))
|
||||
((cdr int)
|
||||
(when (or (not (eq (car-safe form) 'list))
|
||||
;; For code using lexical-binding, form is not
|
||||
;; valid lisp, but rather an intermediate form
|
||||
;; which may include "calls" to
|
||||
;; internal-make-closure (Bug#29988).
|
||||
lexical-binding)
|
||||
(setq int `(interactive ,newform)))))
|
||||
((cdr int) ; Invalid (interactive . something).
|
||||
(byte-compile-warn "malformed interactive spec: %s"
|
||||
(prin1-to-string int)))))
|
||||
;; Process the body.
|
||||
|
|
@ -3070,29 +3073,36 @@ for symbols generated by the byte compiler itself."
|
|||
;; Build the actual byte-coded function.
|
||||
(cl-assert (eq 'byte-code (car-safe compiled)))
|
||||
(let ((out
|
||||
(apply #'make-byte-code
|
||||
(if lexical-binding
|
||||
(byte-compile-make-args-desc arglist)
|
||||
arglist)
|
||||
(append
|
||||
;; byte-string, constants-vector, stack depth
|
||||
(cdr compiled)
|
||||
;; optionally, the doc string.
|
||||
(cond ((and lexical-binding arglist)
|
||||
;; byte-compile-make-args-desc lost the args's names,
|
||||
;; so preserve them in the docstring.
|
||||
(list (help-add-fundoc-usage doc arglist)))
|
||||
((or doc int)
|
||||
(list doc)))
|
||||
;; optionally, the interactive spec.
|
||||
(if int
|
||||
(list (nth 1 int)))))))
|
||||
(when byte-native-compiling
|
||||
(apply #'make-byte-code
|
||||
(if lexical-binding
|
||||
(byte-compile-make-args-desc arglist)
|
||||
arglist)
|
||||
(append
|
||||
;; byte-string, constants-vector, stack depth
|
||||
(cdr compiled)
|
||||
;; optionally, the doc string.
|
||||
(cond ((and lexical-binding arglist)
|
||||
;; byte-compile-make-args-desc lost the args's names,
|
||||
;; so preserve them in the docstring.
|
||||
(list (help-add-fundoc-usage doc arglist)))
|
||||
((or doc int)
|
||||
(list doc)))
|
||||
;; optionally, the interactive spec (and the modes the
|
||||
;; command applies to).
|
||||
(cond
|
||||
;; We have some command modes, so use the vector form.
|
||||
(command-modes
|
||||
(list (vector (nth 1 int) command-modes)))
|
||||
;; No command modes, use the simple form with just the
|
||||
;; interactive spec.
|
||||
(int
|
||||
(list (nth 1 int))))))))
|
||||
(when byte-native-compiling
|
||||
(setf (byte-to-native-lambda-byte-func
|
||||
(gethash (cadr compiled)
|
||||
byte-to-native-lambdas-h))
|
||||
out))
|
||||
out))))
|
||||
out))))
|
||||
|
||||
(defvar byte-compile-reserved-constants 0)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue