- Floor division (DONE)
- exponentiation (DONE)
- Arrays (DONE)
- Make declaring an external function easier (DONE)
- to string conversion in VM itself
- Make Boolean a type in the expression engine so we can print it properly (DONE)
- Split bytecode struct into pieces (do a SOA optimization) (DONE)
- Move values to a constant table and make Load instructions read from this table (DONE)
- Add Immediate instructions for cases where one side is a constant
- Constant folding (on AST level) Split vm math module into a runtime module so compiler can use it as well Fold +, -, *, %, /, // Possibly write a walk() and visit() interface like in the Expr library Also fold conditionals if the conditional is a constant
- Add constant array parsing where we identify if each element of an array is a fixed constant. Need to think through the details of this.
- Jump chaining (a peephole optimization)
- Implement local variables
- Implement SSA based IR
- Implement CSE and DCE (relies on the above 2)
- Implement closures