mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2025-01-05 11:45:45 +00:00
Remove harmful and redundant bindings from the byte compiler.
This fixes bug#65017. Binding symbols-with-pos-enabled in two macro handling functions was harmful; one of these caused cl--labels-convert to fail. Binding print-symbols-bare in many places in the byte compiler was redundant. * lisp/emacs-lisp/bytecomp.el (byte-compile-recurse-toplevel) (byte-compile-initial-macro-environment) (byte-compile-output-file-form, byte-compile-output-docform) (byte-compile-preprocess): Remove bindings of print-symbols-bare. * lisp/emacs-lisp/macroexp.el (macroexp--compiler-macro) (internal-macroexpand-for-load): Remove bindings of symbols-with-pos-enabled. (internal-macroexpand-for-load): Remove binding of print-symbols-bare.
This commit is contained in:
parent
722b1ebc6e
commit
18a84922c5
@ -489,8 +489,7 @@ Return the compile-time value of FORM."
|
||||
;; 3.2.3.1, "Processing of Top Level Forms". The semantics are very
|
||||
;; subtle: see test/lisp/emacs-lisp/bytecomp-tests.el for interesting
|
||||
;; cases.
|
||||
(let ((print-symbols-bare t)) ; Possibly redundant binding.
|
||||
(setf form (macroexp-macroexpand form byte-compile-macro-environment)))
|
||||
(setf form (macroexp-macroexpand form byte-compile-macro-environment))
|
||||
(if (eq (car-safe form) 'progn)
|
||||
(cons (car form)
|
||||
(mapcar (lambda (subform)
|
||||
@ -568,11 +567,10 @@ Only conses are traversed and duplicated, not arrays or any other structure."
|
||||
;; Don't compile here, since we don't know
|
||||
;; whether to compile as byte-compile-form
|
||||
;; or byte-compile-file-form.
|
||||
(let* ((print-symbols-bare t) ; Possibly redundant binding.
|
||||
(expanded
|
||||
(macroexpand--all-toplevel
|
||||
form
|
||||
macroexpand-all-environment)))
|
||||
(let ((expanded
|
||||
(macroexpand--all-toplevel
|
||||
form
|
||||
macroexpand-all-environment)))
|
||||
(eval (byte-run-strip-symbol-positions
|
||||
(bytecomp--copy-tree expanded))
|
||||
lexical-binding)
|
||||
@ -2489,8 +2487,7 @@ Call from the source buffer."
|
||||
;; Spill output for the native compiler here
|
||||
(push (make-byte-to-native-top-level :form form :lexical lexical-binding)
|
||||
byte-to-native-top-level-forms))
|
||||
(let ((print-symbols-bare t) ; Possibly redundant binding.
|
||||
(print-escape-newlines t)
|
||||
(let ((print-escape-newlines t)
|
||||
(print-length nil)
|
||||
(print-level nil)
|
||||
(print-quoted t)
|
||||
@ -2524,8 +2521,7 @@ list that represents a doc string reference.
|
||||
;; in the input buffer (now current), not in the output buffer.
|
||||
(let ((dynamic-docstrings byte-compile-dynamic-docstrings))
|
||||
(with-current-buffer byte-compile--outbuffer
|
||||
(let (position
|
||||
(print-symbols-bare t)) ; Possibly redundant binding.
|
||||
(let (position)
|
||||
;; Insert the doc string, and make it a comment with #@LENGTH.
|
||||
(when (and (>= (nth 1 info) 0) dynamic-docstrings)
|
||||
(setq position (byte-compile-output-as-comment
|
||||
@ -2621,8 +2617,7 @@ list that represents a doc string reference.
|
||||
byte-compile-jump-tables nil))))
|
||||
|
||||
(defun byte-compile-preprocess (form &optional _for-effect)
|
||||
(let ((print-symbols-bare t)) ; Possibly redundant binding.
|
||||
(setq form (macroexpand-all form byte-compile-macro-environment)))
|
||||
(setq form (macroexpand-all form byte-compile-macro-environment))
|
||||
;; FIXME: We should run byte-optimize-form here, but it currently does not
|
||||
;; recurse through all the code, so we'd have to fix this first.
|
||||
;; Maybe a good fix would be to merge byte-optimize-form into
|
||||
|
@ -107,8 +107,7 @@ each clause."
|
||||
|
||||
(defun macroexp--compiler-macro (handler form)
|
||||
(condition-case-unless-debug err
|
||||
(let ((symbols-with-pos-enabled t))
|
||||
(apply handler form (cdr form)))
|
||||
(apply handler form (cdr form))
|
||||
(error
|
||||
(message "Warning: Optimization failure for %S: Handler: %S\n%S"
|
||||
(car form) handler err)
|
||||
@ -760,40 +759,38 @@ test of free variables in the following ways:
|
||||
|
||||
(defun internal-macroexpand-for-load (form full-p)
|
||||
;; Called from the eager-macroexpansion in readevalloop.
|
||||
(let ((symbols-with-pos-enabled t)
|
||||
(print-symbols-bare t))
|
||||
(cond
|
||||
;; Don't repeat the same warning for every top-level element.
|
||||
((eq 'skip (car macroexp--pending-eager-loads)) form)
|
||||
;; If we detect a cycle, skip macro-expansion for now, and output a warning
|
||||
;; with a trimmed backtrace.
|
||||
((and load-file-name (member load-file-name macroexp--pending-eager-loads))
|
||||
(let* ((bt (delq nil
|
||||
(mapcar #'macroexp--trim-backtrace-frame
|
||||
(macroexp--backtrace))))
|
||||
(elem `(load ,(file-name-nondirectory load-file-name)))
|
||||
(tail (member elem (cdr (member elem bt)))))
|
||||
(if tail (setcdr tail (list '…)))
|
||||
(if (eq (car-safe (car bt)) 'macroexpand-all) (setq bt (cdr bt)))
|
||||
(if macroexp--debug-eager
|
||||
(debug 'eager-macroexp-cycle)
|
||||
(error "Eager macro-expansion skipped due to cycle:\n %s"
|
||||
(mapconcat #'prin1-to-string (nreverse bt) " => ")))
|
||||
(push 'skip macroexp--pending-eager-loads)
|
||||
form))
|
||||
(t
|
||||
(condition-case err
|
||||
(let ((macroexp--pending-eager-loads
|
||||
(cons load-file-name macroexp--pending-eager-loads)))
|
||||
(if full-p
|
||||
(macroexpand--all-toplevel form)
|
||||
(macroexpand form)))
|
||||
(error
|
||||
;; Hopefully this shouldn't happen thanks to the cycle detection,
|
||||
;; but in case it does happen, let's catch the error and give the
|
||||
;; code a chance to macro-expand later.
|
||||
(error "Eager macro-expansion failure: %S" err)
|
||||
form))))))
|
||||
(cond
|
||||
;; Don't repeat the same warning for every top-level element.
|
||||
((eq 'skip (car macroexp--pending-eager-loads)) form)
|
||||
;; If we detect a cycle, skip macro-expansion for now, and output a warning
|
||||
;; with a trimmed backtrace.
|
||||
((and load-file-name (member load-file-name macroexp--pending-eager-loads))
|
||||
(let* ((bt (delq nil
|
||||
(mapcar #'macroexp--trim-backtrace-frame
|
||||
(macroexp--backtrace))))
|
||||
(elem `(load ,(file-name-nondirectory load-file-name)))
|
||||
(tail (member elem (cdr (member elem bt)))))
|
||||
(if tail (setcdr tail (list '…)))
|
||||
(if (eq (car-safe (car bt)) 'macroexpand-all) (setq bt (cdr bt)))
|
||||
(if macroexp--debug-eager
|
||||
(debug 'eager-macroexp-cycle)
|
||||
(error "Eager macro-expansion skipped due to cycle:\n %s"
|
||||
(mapconcat #'prin1-to-string (nreverse bt) " => ")))
|
||||
(push 'skip macroexp--pending-eager-loads)
|
||||
form))
|
||||
(t
|
||||
(condition-case err
|
||||
(let ((macroexp--pending-eager-loads
|
||||
(cons load-file-name macroexp--pending-eager-loads)))
|
||||
(if full-p
|
||||
(macroexpand--all-toplevel form)
|
||||
(macroexpand form)))
|
||||
(error
|
||||
;; Hopefully this shouldn't happen thanks to the cycle detection,
|
||||
;; but in case it does happen, let's catch the error and give the
|
||||
;; code a chance to macro-expand later.
|
||||
(error "Eager macro-expansion failure: %S" err)
|
||||
form)))))
|
||||
|
||||
;; ¡¡¡ Big Ugly Hack !!!
|
||||
;; src/bootstrap-emacs is mostly used to compile .el files, so it needs
|
||||
|
Loading…
Reference in New Issue
Block a user