+ Build the consteval stuff OPTIMIZATIONS: + Use hashmaps or something similar for lookups for types and calls LOWERING: Structure handling in lowering could probably be as follows: Imagine struct something { i27 a; other_struct b; }; main () { // something s = {...}; i27 s_def = alloc $STRUCT_SIZE; // i27 a = s.a; i27 member_a = struct_def + 0; i27 a << struct_def 0; // other_struct c = s.b; i27 c_def = alloc $OTHER_STRUCT_SIZE; i27 member_b = struct_def + 3; c_def blit member_b, $OTHER_STRUCT_SIZE; // has to be added to qbt, // might need to be handled // like store with constant as // 'return'. Or can c_def be // considered an output value // for blit? /* calls just dump all registers down I guess, as do returns. No * implicit conversion to pointer and passed as first argument, ufcs * does that for us. */ } + Might want to add in some kind of suffix for integer types, s for i9 and l for i27 or something? + lowering could check if a function has been lowered and if not, lower it for us. Should it also check that no abstract data types are used in the final lowering? Which would mean that even the lowering is allowed to fail, and not just the actualization phase.