emacs/lisp/emacs-lisp
Mattias Engdegård 83983b6b7a Constprop of lexical variables
Lexical variables bound to a constant value (symbol, number or string)
are substituted at their point of use and the variable then eliminated
if possible.  Example:

  (let ((x (+ 2 3))) (f x))  =>  (f 5)

This reduces code size, eliminates stack operations, and enables
further optimisations.  The implementation is conservative, and is
strongly curtailed by the presence of variable mutation, conditions
and loops.

* lisp/emacs-lisp/byte-opt.el
(byte-optimize-enable-variable-constprop)
(byte-optimize-warn-eliminated-variable): New constants.
(byte-optimize--lexvars, byte-optimize--vars-outside-condition)
(byte-optimize--vars-outside-loop, byte-optimize--dynamic-vars):
New dynamic variables.
(byte-optimize--substitutable-p, byte-optimize-let-form):
New functions.
(byte-optimize-form-code-walker): Adapt clauses for variable
constprop, and add clauses for 'setq' and 'defvar'.
* test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-test-var)
(bytecomp-test-get-var, bytecomp-test-identity)
(byte-opt-testsuite-arith-data): Add test cases.
2021-02-06 20:22:24 +01:00
..
advice.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
autoload.el * lisp/emacs-lisp/autoload.el: Improve last change 2021-01-05 17:57:15 -05:00
avl-tree.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
backquote.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
backtrace.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
benchmark.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
bindat.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
byte-opt.el Constprop of lexical variables 2021-02-06 20:22:24 +01:00
byte-run.el Fix missing file&line info in "Unknown defun property" warnings 2021-01-23 16:04:36 -05:00
bytecomp.el * lisp/emacs-lisp/bytecomp.el (byte-compile--declare-var): Fix warning 2021-01-20 20:17:11 -05:00
cconv.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
chart.el Prefer defvar-local in emacs-lisp/*.el 2021-01-31 14:55:53 +01:00
check-declare.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
checkdoc.el * lisp/emacs-lisp/checkdoc.el: Doc fix; don't mention built-ins. 2021-02-05 02:52:52 +01:00
cl-extra.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-generic.el * lisp/emacs-lisp/cl-generic.el (cl--generic-lambda): Fix last change 2021-01-08 18:28:47 -05:00
cl-indent.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-lib.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-macs.el * lisp/emacs-lisp/cl-macs.el (cl--self-tco): Fix build of gnus-agent.el 2021-01-09 11:35:53 -05:00
cl-preloaded.el Fix copyright years by hand 2021-01-01 00:33:28 -08:00
cl-print.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-seq.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
copyright.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
crm.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
cursor-sensor.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
debug.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
derived.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
disass.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
easy-mmode.el Allow a :variable keyword in define-globalized-minor-mode 2021-02-04 15:22:40 +01:00
easymenu.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
edebug.el Remove XEmacs compat code from edebug.el 2021-02-04 05:27:45 +01:00
eieio-base.el * lisp/emacs-lisp/eieio-base.el: Silence warnings in last change 2021-01-11 16:44:39 -05:00
eieio-compat.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eieio-core.el Fix obsolete variable warnings about class names 2021-01-06 10:51:28 +01:00
eieio-custom.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eieio-datadebug.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eieio-opt.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
eieio-speedbar.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eieio.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eldoc.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
elint.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
elp.el Remove some unnecessary references to Emacs 19 2021-02-04 05:28:00 +01:00
ert-x.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
ert.el * lisp/emacs-lisp/pcase.el: Add support for not to pred 2021-01-16 14:21:57 -05:00
ewoc.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
faceup.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
find-func.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
float-sup.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
generator.el Avoid a compilation warning in iter-do 2021-02-06 11:31:18 +01:00
generic.el Prefer defvar-local in emacs-lisp/*.el 2021-01-31 14:55:53 +01:00
gv.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
helper.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
hierarchy.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
inline.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
let-alist.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
lisp-mnt.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
lisp-mode.el Improve filling of Emacs Lisp doc strings 2021-02-04 16:12:41 +01:00
lisp.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
macroexp.el * lisp/emacs-lisp/macroexp.el (macroexp-if): Fix typo 2021-01-27 18:53:58 -05:00
map-ynp.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
map.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
memory-report.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
nadvice.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
package-x.el * lisp/gnus/gnus-art.el: Fix misuse of standard-value. 2021-02-02 14:39:28 -05:00
package.el Move the ‘declare’ form before the interactive spec in 10 functions. 2021-01-20 21:19:23 +02:00
pcase.el * lisp/emacs-lisp/pcase.el (let): Reimplement as a pcase macro 2021-02-05 15:07:47 -05:00
pp.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
radix-tree.el * lisp/emacs-lisp/pcase.el: Add support for not to pred 2021-01-16 14:21:57 -05:00
re-builder.el Prefer defvar-local in emacs-lisp/*.el 2021-01-31 14:55:53 +01:00
regexp-opt.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
regi.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
ring.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
rmc.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
rx.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
seq.el * lisp/emacs-lisp/seq.el (seq-concatenate): Unautoload (merge fix). 2021-01-15 09:38:20 +00:00
shadow.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
shortdoc.el Minor shortdoc link improvements 2021-01-10 13:45:44 +01:00
smie.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
subr-x.el * lisp/emacs-lisp/subr-x.el (named-let): New macro 2021-01-20 14:13:15 -05:00
syntax.el Prefer defvar-local in emacs-lisp/*.el 2021-01-31 14:55:53 +01:00
tabulated-list.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
tcover-ses.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
testcover.el Fix previous change in testcover.el 2021-02-06 15:04:52 +01:00
text-property-search.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
thunk.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
timer-list.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
timer.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
tq.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
trace.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
unsafep.el Use lexical-binding in all of lisp/emacs-lisp 2021-01-28 14:42:21 -05:00
warnings.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00