* lisp/emacs-lisp/comp.el (comp-deferred-compilation-deny-list)
(comp-bootstrap-deny-list, comp-never-optimize-functions)
(comp-async-env-modifier-form, comp-native-driver-options):
Fix :type (`list' on its own isn't even a valid type).
* lisp/emacs-lisp/comp.el (comp-async-cu-done-functions): Rename
from 'comp-async-cu-done-hook' to reflect that it is an abnormal
hook. Doc fix and update single caller.
* test/src/comp-tests.el (comp-test-47868-1): Add new test.
* test/src/comp-test-funcs.el (comp-test-47868-1-f)
(comp-test-47868-2-f): New functions.
* lisp/emacs-lisp/comp.el (comp-imm-equal-test): Define new hash
tanble test.
(comp-data-container): Use it.
(comp-final, comp-run-async-workers): have comp required before
reading dumped hashes so that `comp-imm-equal-test' is defined.
* lisp/emacs-lisp/comp.el (comp-debug): Update docstring and
move default on Windows systems from 0 to 1.
* src/comp.c (Fcomp__compile_ctxt_to_file): Tweak debug
levels.
* lisp/emacs-lisp/comp.el (comp-spill-lap-function): Throw
no-native-compile when `byte-native-qualities' are null.
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): No need
to consider `no-byte-compile'.
* lisp/emacs-lisp/comp.el (no-native-compile): Update doctring.
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): when
`no-byte-compile' is set to non-nil it overrides this.
* lisp/emacs-lisp/bytecomp.el (byte-compile-from-buffer): Capture
`no-native-compile'.
* lisp/emacs-lisp/comp.el (no-native-compile): Define new
variable.
(comp-spill-lap-function): Throw when `no-native-compile' was
captured non-nil.
(comp--native-compile): Catch `no-native-compile' if necessary and
return nil in case.
* lisp/emacs-lisp/comp.el (comp--native-compile): During async
compilation if we catch an error print it in a parsable way so we
can report it to the user.
* lisp/emacs-lisp/comp-cstr.el (comp-intersect-typesets)
(comp-cstr-imm): Use Use `length=' and family where possible.
* lisp/emacs-lisp/comp.el (comp-add-cond-cstrs-target-block)
(comp-compute-dominator-frontiers)
(batch-byte-native-compile-for-bootstrap): Likewise.
* lisp/emacs-lisp/comp.el: Use 'w32-get-nproc' instead of the
environment variable NUMBER_OF_PROCESSORS.
* src/w32proc.c (Fw32_get_nproc): New primitive.
* src/w32.c (w32_get_nproc): New function.
(sample_system_load): Call w32_get_nproc to initialize the number
of processors on this system.
* src/w32.h (w32_get_nproc): Add prototype.
Extend assumes allowing the following form:
(assume dst (and-nhc src1 src2))
`and-nhc' assume operator allow for constraining correctly
intersections where non hash consed values are not propagated as
values but rather promoted to their types.
* lisp/emacs-lisp/comp-cstr.el
(comp-cstr-intersection-no-hashcons): New function.
* lisp/emacs-lisp/comp.el (comp-emit-assume): Logic update to emit
`and-nhc' operator (implemented in fwprop by
`comp-cstr-intersection-no-hashcons').
(comp-add-cond-cstrs): Map `eq' to `and' assume operator and
`equal' `eql' into `and-nhc'.
(comp-fwprop-insn): Update to handle `and-nhc'.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add two
tests covering `eql' and `equal' propagation of non hash consed
values.
Extend assumes allowing the following form
(assume dst (= src1 src2))
to caputure '=' semanting during fwprop handling float integer
conversions.
* lisp/emacs-lisp/comp.el (comp-equality-fun-p): Don't treat '=' as
simple equality.
(comp-arithm-cmp-fun-p, comp-negate-arithm-cmp-fun)
(comp-reverse-arithm-fun): Rename and add '=' '!='.
(comp-emit-assume, comp-add-cond-cstrs, comp-fwprop-insn): Update
for new function nameing and to handle '='.
* lisp/emacs-lisp/comp-cstr.el (comp-cstr-=): New function.
* test/src/comp-tests.el (comp-tests-type-spec-tests): Add a bunch
of '=' specific tests.