Expansions of call( and execute( words


call( and execute( have complex expansions.

If the input quotation is a literal, or built up from curry and compose with terminal quotations literal, it is inlined at the call site.

For dynamic call sites, call( uses the following strategy:
• Inline caching. If the quotation is the same as last time, just call it unsafely
• Effect inference. Infer quotation's effect, caching it in the cached-effect slot, and compare it with declaration. If matches, call it unsafely.
• Fallback. If the above doesn't work, call it and compare the datastack before and after to make sure it didn't mess anything up.
• Inline caches and cached effects are invalidated whenever a macro is redefined, or a word's effect changes, by comparing a global counter against the counter value last observed. The counter is incremented by compiler.units.


execute( uses a similar strategy.