Make __slice = Array.prototype.slice instead of a wrapper around it, requiring .call syntax. Make a bunch of macros in the prelude check the is-apply status of a call.
Add tests for label!. Meant to do that earlier.
Make RegExps not part of Const in the ast, to support non-standard flags like y (sticky) that might work in the client.
Don't stick RegExps in ConstNode in the parser, keep it its own node. This allows for custom flags that wouldn't exist during the compilation phase but might exist in the client, specifically the sticky (y) flag.
Some performance tweaks to the parser's rule macros.
Add an optimization to || and && chains to deal with constant or known-truthy/falsy values in the middle of the chain.
Add an optimization to || where if the left is an IfNode that has a falsy when-false, it will convert the left to a && chain, making things like x?.y or z become (x? and x.y) or z instead of (if x? then x.y else void) or z.
If the gc function is available, call it after running each test file and building each file, to give a more accurate display of how long each individual file takes.
Add some standardized type checking to the parser, and optimize multiple! a bit.
If it can be guaranteed that an ident has not been assigned, don't bother assigning it to undefined.
Some more optimization to the parser macros.
Optimize the maybe! macro in the parser
Prevent double-naming of rules in the parser.
Several more optimizations to the parser macros.
Remove an unnecessary try-finally.
Reverse the way the internal cache stores to be cache[indent][index][cache-key] instead of cache[indent][cache-key][index], as it is faster in benchmarks.
In the cache, loop around the index after 65521 (largest prime below 64k), so that the array doesn't get too large. If a file that large is parsed, it is likely that the previously cached results are settled-on anyway.
After running some benchmarks, the cache size is now limited to 16 entries per cache rule, which seems to be roughly the most efficient. The Root rule will also clear the cache on entry and exit.
Add array[* - 1] as a syntax that converts the standalone `*` to the current array's .length