Turn Data Constructors with constant members into constants When all arguments of a Data Constructor are constants, the created object will also be a constant. For now this is only tracked for closures without arguments and helps to avoid some allocations when records for interfaces are created. (As they only contain funtion pointers without arguments.)
[refactor] Codegen: use simpler state modification methods
Ensure static closure objects are properly aligned
[refactor] Remove unused import
[refactor] Get rid of `Reg RVal` usage in builtins, make sure all builtins return a value
Extract closure handling code into separate module
Turn closures without arguments into constants If a "closure" object is created that doesn't capture any arguments, we can use a statically allocated object (constant) instead of dynamically allocating. This greatly reduces allocations in most non-trivial code.
[refactor] Remove obsolete scratch file
[refactor] Extract string handling functions into separate module
[refactor] Remove last traces of pervasive `i`
[refactor] (Almost) get rid of omnipresent `i` for constant naming
[refactor] Add new modules to CMakeLists
[refactor] Extract `Integer` related functions into separate module
[refactor] Extract %extern primitives and foreign redirect map
[refactor] Move more casts into genericCast, simplify
[refactor] Move builtins onto their own module
[refactor] Move object asserts into Object module
[refactor] Get rid of handcrafted object headers
Fix showSep implementation in Data.Utils
[refactor] Extract more generic stuff from GenLLVMIR into submodules