Both unions kept the wrong side. macro_union keeps the left on a name collision, and both callers had the older set on the left: Load.program put the ambient set ahead of the packages it had just resolved, and Session put the copy it had been holding since creation ahead of what Load handed back. So editing a macro in a package and reloading the file that imports it went on expanding the old body -- and said nothing, which in this area is the failure that costs the most to find. Two tests, because the two unions are reached by different paths: the reload itself, and the C-c C-c after it, which reads the set the session kept rather than the one Load just supplied. Each fails on its own if only the other order is put back. Also written down, and not fixed: C-x C-e expands no macros at all. Parse.expr never calls the expander, so (unless ...) as a bare expression is as much an unknown name as (mac/twice 4) -- the prelude fails there too, which is what says it is an older gap. Changing it changes what an expression evaluation means. And the cost note is cut back to what was measured. Four macro modules where the file's own macros leave two is what the cache shows; why four is not settled and no longer claimed.
Description
Languages
OCaml
67.2%
Emacs Lisp
15.2%
C
10.4%
HTML
2.9%
Standard ML
2.8%
Other
1.5%