emacs/test/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
..
bytecomp-resources Fix spurious "Lexical argument shadows the dynamic variable" due to inlining 2021-01-21 13:15:05 -05:00
edebug-resources Update copyright year to 2021 2021-01-01 01:13:56 -08:00
eieio-tests Update copyright year to 2021 2021-01-01 01:13:56 -08:00
faceup-resources Update copyright year to 2021 2021-01-01 01:13:56 -08:00
faceup-tests Update copyright year to 2021 2021-01-01 01:13:56 -08:00
package-resources Update copyright year to 2021 2021-01-01 01:13:56 -08:00
shadow-resources Use lexical-binding in most remaining emacs-lisp tests 2020-04-30 12:09:51 +02:00
testcover-resources Update copyright year to 2021 2021-01-01 01:13:56 -08:00
backquote-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
backtrace-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
benchmark-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
bindat-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
bytecomp-tests.el Constprop of lexical variables 2021-02-06 20:22:24 +01:00
cconv-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
check-declare-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
checkdoc-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-extra-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-generic-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-lib-tests.el Fix recently uncovered 'make check' failures 2021-01-23 23:38:19 +00:00
cl-macs-tests.el * lisp/emacs-lisp/cl-macs.el: Optimize self-calls in tail position 2021-01-08 19:59:31 -05:00
cl-preloaded-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-print-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
cl-seq-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
copyright-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
derived-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
easy-mmode-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
edebug-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
ert-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
ert-x-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
find-func-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
float-sup-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
generator-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
gv-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
hierarchy-tests.el Use lexical-binding in more tests 2020-08-29 22:41:51 +02:00
let-alist-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
lisp-mode-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
lisp-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
map-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
memory-report-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
nadvice-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
package-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
pcase-tests.el * lisp/emacs-lisp/pcase.el: Add support for not to pred 2021-01-16 14:21:57 -05:00
pp-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
regexp-opt-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
ring-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
rmc-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
rx-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
seq-tests.el Fix recently uncovered 'make check' failures 2021-01-23 23:38:19 +00:00
shadow-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
subr-x-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
syntax-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
tabulated-list-test.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
testcover-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
text-property-search-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
thunk-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
timer-tests.el Prefer skip-unless in more tests 2021-01-13 17:39:53 +01:00
unsafep-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00
warnings-tests.el Update copyright year to 2021 2021-01-01 01:13:56 -08:00