mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-09 15:50:40 -08:00
This commit add an initial support for a better type propagation and integer range propagation. Each mvar can be now characterized by a set of types, a set of values and an integral range. * lisp/emacs-lisp/comp.el (comp-known-ret-types): Store into typeset and remove fixnum. (comp-known-ret-ranges, comp-type-predicates): New variables. (comp-ctxt): Remove supertype-memoize slot and add union-typesets-mem. (comp-mvar): Remove const-vld, constant, type slots. Add typeset, valset, range slots. (comp-mvar-value-vld-p, comp-mvar-value, comp-mvar-fixnum-p) (comp-mvar-symbol-p, comp-mvar-cons-p) (comp-mvar-type-hint-match-p, comp-func-ret-typeset) (comp-func-ret-range): New functions. (make-comp-mvar, make-comp-ssa-mvar): Update logic. (comp--typeof-types): New variable. (comp-supertypes, comp-common-supertype): Logic update. (comp-subtype-p, comp-union-typesets, comp-range-1+) (comp-range-1-, comp-range-<, comp-range-union) (comp-range-intersection): New functions. (comp-fwprop-prologue, comp-mvar-propagate) (comp-function-foldable-p, comp-function-call-maybe-fold) (comp-fwprop-insn, comp-call-optim-func, comp-finalize-relocs): Logic update. * src/comp.c (emit_mvar_rval, emit_call_with_type_hint) (emit_call2_with_type_hint): Logic update. * lisp/emacs-lisp/cl-preloaded.el (cl--typeof-types): Undo the add of fixnum and bignum as unnecessary. * test/src/comp-tests.el (comp-tests-mentioned-p-1, comp-tests-cond-rw-checker-val) (comp-tests-cond-rw-checker-type, cond-rw-1, cond-rw-2) (cond-rw-3, cond-rw-4, cond-rw-5): Update for new type interface. (range-simple-union, range-simple-intersection): New integer range tests. (union-types): New union type test. |
||
|---|---|---|
| .. | ||
| advice.el | ||
| autoload.el | ||
| avl-tree.el | ||
| backquote.el | ||
| backtrace.el | ||
| benchmark.el | ||
| bindat.el | ||
| byte-opt.el | ||
| byte-run.el | ||
| bytecomp.el | ||
| cconv.el | ||
| chart.el | ||
| check-declare.el | ||
| checkdoc.el | ||
| cl-extra.el | ||
| cl-generic.el | ||
| cl-indent.el | ||
| cl-lib.el | ||
| cl-macs.el | ||
| cl-preloaded.el | ||
| cl-print.el | ||
| cl-seq.el | ||
| comp.el | ||
| copyright.el | ||
| crm.el | ||
| cursor-sensor.el | ||
| debug.el | ||
| derived.el | ||
| disass.el | ||
| easy-mmode.el | ||
| easymenu.el | ||
| edebug.el | ||
| eieio-base.el | ||
| eieio-compat.el | ||
| eieio-core.el | ||
| eieio-custom.el | ||
| eieio-datadebug.el | ||
| eieio-opt.el | ||
| eieio-speedbar.el | ||
| eieio.el | ||
| eldoc.el | ||
| elint.el | ||
| elp.el | ||
| ert-x.el | ||
| ert.el | ||
| ewoc.el | ||
| faceup.el | ||
| find-func.el | ||
| float-sup.el | ||
| generator.el | ||
| generic.el | ||
| gv.el | ||
| helper.el | ||
| hierarchy.el | ||
| inline.el | ||
| let-alist.el | ||
| lisp-mnt.el | ||
| lisp-mode.el | ||
| lisp.el | ||
| macroexp.el | ||
| map-ynp.el | ||
| map.el | ||
| nadvice.el | ||
| package-x.el | ||
| package.el | ||
| pcase.el | ||
| pp.el | ||
| radix-tree.el | ||
| re-builder.el | ||
| regexp-opt.el | ||
| regi.el | ||
| ring.el | ||
| rmc.el | ||
| rx.el | ||
| seq.el | ||
| shadow.el | ||
| shortdoc.el | ||
| smie.el | ||
| subr-x.el | ||
| syntax.el | ||
| tabulated-list.el | ||
| tcover-ses.el | ||
| testcover.el | ||
| text-property-search.el | ||
| thunk.el | ||
| timer-list.el | ||
| timer.el | ||
| tq.el | ||
| trace.el | ||
| unsafep.el | ||
| warnings.el | ||