* Only build standard library for JS target
* Add initial data structures for QBE generator
* Allow generators to return an error
Required for QBE generator
* qbe: implement function generation
* qbe: generate integer literal expression
* qbe: generate return with expression
* qbe: generate boolean expression
* qbe: implement most of binary operations
* qbe: store a type in scope maps
* qbe: implement variable access expression
* qbe: implement function declarations
* qbe: implement if/else
* qbe: implement while loops
* qbe: implement break in loops
* qbe: implement continue
* qbe: implement expression statement
* qbe: implement function calls
* qbe: implement assignment for variables
* qbe: add QbeValue, use it instead of temporaries
With old approach, it was not possible for function call instruction to
accept a $-global value (for static strings), as well as having an
inconsistent API for QbeInstr::Copy because of Either<...>.
QbeValue can hold either a temporary, global or a constant literal. This
allows it to be used everywhere, without hacks like Either for copy.
* qbe: implement string literals
* qbe: move Assign into generate_assignment
* qbe: add typedefs
* qbe: generate offset table for structs
* qbe: implement struct initialization
* qbe: resolve struct variable types
* qbe: convert assignment QBE statements to base types
This prevents generating incorrect IR with structs
* qbe: implement field access
* qbe: do not cast to ABI types in scope
* qbe: implement assignments to field access
* qbe: store loop labels as a stack
Fixes issues when using continue/break in nested loops.
* docs: add QBE to supported backends
* Add QBE backend to changelog
* qbe: implement assignment BinOps (e.g. +=)
* qbe: resolve arrays in variable types
* qbe: implement array initialization
* qbe: add aggregate type fills (e.g. { w 12 })
* qbe: generate aggregate types for arrays