* Change of module names aeb_fate_code -> aeb_fate_ops
* Add missing call instructions
* Use new adt for fate code
* Add default init function if not present and keep init function if present
* Fix BLOCKHASH function for fate
* Rewrite for clarity and Dialyzer
* Update to changes in icode format
* Start on new intermediate code for FATE
* Compile `let` to FATE
* Fix and improve broken bytecode optimisations
* Basic tuple patterns
* Compile shallow matching on tuples
* Liveness analysis for local variables
* Fix minor bug
* Use RETURNR when possible
* Nicer debug printing
* Refactor optimization rules
* Compile tuple construction
* Improve instruction analysis and generalize some optimizations
* Compile nested pattern matching to case trees
(Only tuple and variable patterns so far)
* Reannotate and repeat optimization pass once it done
Could try hard to keep annotations more precise, but would be more error prone
* Get rid of unnecessary STORE instructions
* Keep better track of liveness annotations when swapping instructions
* Limit the number of iterations for the optimization loop
Should finish in one iteration, but we shouldn't loop if there are bugs
or corner cases where it doesn't.
* Pattern matching on booleans
* wip: rewrite case tree compiler to handle catch-alls
still with debug printing, and can't compile it yet
* Add missing case in renaming
* Compile case trees all the way to Fate assembly
* Simplify variables bindings in environment
* Shortcut let x = y in ...
* compile list literals
* Fix various bugs in pattern match compilation
* Pretty printer for fcode
* Fix renaming bug
* Another renaming bug
* Handle switch_body in optimizations
* Remove optimization for if-then-else
* Tag instructions in annotated scode
* Remove 'if' from fcode
* Fix dialyzer things
* Remove unused argument
* Compile pattern matching on integer literals
* Compile list patterns
* Use op_view in more places
* allow leaving out fields from record patterns
* compile records (patterns and construction)
* Compile record update
* Use SETELEMENT instruction
* Compile variants
* Remove incorrect push for tuple switches
* Optimize matching on single constructors datatypes
* Use the fact that SWITCH and JUMPIF can use args and vars
* string literals and pattern matching on the same
* Compile character literals
* Minor refactoring of op instruction handling
* compile address literals
* Get rid of unit in AST
* Unary operators
* Compile function calls
(to fully saturated top-level functions only)
* fix breakage after unary operators
* variables are now lists of names in fcode
* pretty printing for function calls
* use STORE ?a instead of PUSH during optimizations
* no-op fcode optimization pass
* some constant propagation optimizations
* Case on constructor optimization
* fix minor bugs
* Compile all the operators
* Compile maps
* Simplify JUMPIF on true/false
* Fixed left-over reference to STR_EQ
* Add compile-time evaluation for more operators
* Distinguish local vars and top-level names already in fcode
* Compile builtins
* Compile bytes(N)
Compile to FATE strings for now
* Improve inlining of PUSH
* Fix name resolution bug
* Change map_get/set to operators in fcode
* Compile lambdas and higher-order functions
* Optimize single variable closure envs
* Handle unapplied builtins and top-level functions
* Missing case in fcode pretty printer
* Fix variable binding bug in fcode compiler
* Compiler side of state updates
No support in FATE yet though
* Compile statements
* Compile events
But no FATE support for events yet
* Compile remote calls
* Clearer distinction between applied and unapplied top-level things (def/builtin) in fcode
* Tag for literals in fcode to make code cleaner
* We now have block hash at height in FATE
* Update aebytecode commit
* Get rid of catchall todos
* Jump some hoops to please Dialyzer