Fix spurious "Lexical argument shadows the dynamic variable" due to inlining
Before this patch doing: rm lisp/calendar/calendar.elc make lisp/calendar/cal-hebrew.elc would spew out lots of spurious such warnings about a `date` argument, pointing to code which has no `date` argument in sight. This was because that code had calls to inlinable functions (taking a `date` argument) defined in `calendar.el`, and while `date` is a normal lexical var at the site of those functions' definitions, it was declared as dynbound at the call site. * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand): Don't impose our local context onto the inlined function. * test/lisp/emacs-lisp/bytecomp-tests.el: Add matching test.
This commit is contained in:
parent
931be5ee7d
commit
b41b4add7b
4 changed files with 31 additions and 2 deletions
|
@ -0,0 +1,17 @@
|
|||
;; -*- lexical-binding: t; -*-
|
||||
|
||||
;; In this test, we try and make sure that inlined functions's code isn't
|
||||
;; mistakenly re-interpreted in the caller's context: we import an
|
||||
;; inlinable function from another file where `foo-var' is a normal
|
||||
;; lexical variable, and then call(inline) it in a function where
|
||||
;; `foo-var' is a dynamically-scoped variable.
|
||||
|
||||
(require 'foo-inlinable
|
||||
(expand-file-name "foo-inlinable.el"
|
||||
(file-name-directory
|
||||
(or byte-compile-current-file load-file-name))))
|
||||
|
||||
(defvar foo-var)
|
||||
|
||||
(defun foo-fun ()
|
||||
(+ (foo-inlineable 5) 1))
|
Loading…
Add table
Add a link
Reference in a new issue