selfhost: auto-Drop for Array<T> in @[Checked] functions
In @[Checked] functions, variables of type Array<T> automatically get a defer Array_Free_T(&var) injected at declaration site. This ensures Array values are freed when they go out of scope, preventing leaks. Implementation: - HIR lowering detects Array_<T> types in skLet statements - Generates Array_Free_T generic instance if needed - Builds synthetic defer node: defer Array_Free_T(&var) - Wraps let+defer in hBlock for proper statement chaining Also adds checkedFunc flag to HirFunc and CEmitter for future use.
This commit is contained in:
@@ -76,6 +76,7 @@ struct CEmitter {
|
||||
sb: StringBuilder,
|
||||
indent: int,
|
||||
mod: *HirModule,
|
||||
checkedFunc: bool,
|
||||
deferCount: int,
|
||||
defer0: *HirNode,
|
||||
defer1: *HirNode,
|
||||
@@ -1081,6 +1082,7 @@ func CBackend_Generate(mod: *HirModule) -> String {
|
||||
CBE_EmitFuncDecl(cbe, &mod.funcs[i]);
|
||||
StringBuilder_Append(&cbe.sb, " {\n");
|
||||
// Body
|
||||
cbe.checkedFunc = mod.funcs[i].checkedFunc;
|
||||
var hasReturn: bool = false;
|
||||
cbe.indent = 1;
|
||||
CBE_EmitExpr(cbe, body);
|
||||
|
||||
Reference in New Issue
Block a user