Some benchmarks are then printed out - usually the ARC code manages some 600,000 instructions per second, if all safety checks are off. This can probably be optimized, but I haven't bothered yet. Compilation compile is used to compile a class. It takes the whole class as parameter. Maybe I should clean it up someday, but keeping the pointer the same gives some advantages.
Compilation sets up a setjmp buffer.
If during compilation something happens, we longjmp back to here. This is far easier than handling error codes. I don't like exceptions - and I didn't feel like introducing exceptions to the code just because of this one place. The lexer returns tokens to the parser, and the parser tries to put them together as rules. Things that may have a value inherit from Expression.