added -fdefault-eraseable which is the same as adding [[eraseable]] to all definitions instead the opposite behavior can be controlled with [[noerase]] attribute
catch broken vector member access These kinds of expressions currently cannot be handled without pionter support in the qcvm without scanning the ast from within ast_member::codegen for an assignments as seen in the added test case. This change makes code like that return a pointer type which will cause an error that we did not get a vector or field back. With pointer support this pointer could actually be used instead. So at least it shouldn't silently produce broken code anymore. Signed-off-by: Wolfgang Bumiller <wry.git@bumiller.com>
c++: ir_function::m_params
c++: ir_block::m_instr
c++: ir_block::m_entries
Remove parser m_uses in favor of {IR,AST}_FLAG_NOREF instead
fix access to fields of vector members When ast_member encounters the result of an ast_entfield it has to replace the ast_entfield's codegen as we cannot evaluate the field access first. We then perform the same action as ast_entfield but call vectorMember on the field before issuing the load/address instruction. This effectively turns the codegen of the following ast structure: member_of { field_of { entity, a_vector } memberid } into the one of this structure: field_of { entity, member_of { a_vector memberid } }
tempcommitting a whole bunch of to-c++ conversions
ast_unary::make: safer double-negation optimization check
fix backward propagateSideEffect impl
destructor call order is important here
ast conversion mostly finished
BROKEN: more ast nodes converted
BROKEN: in the middle of converting ast nodes to c++ with constructors and methods
a whole lotta 'm_'s
for now just call the dtors like this
more c++ migration for ast/ir/code; reached a working condition here
temp committing major c++ification
making ast nodes derive from ast_expression
ast_expression: params -> type_params