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:
2026-06-10 11:40:11 +03:00
parent 5eec4328f3
commit a099999e02
3 changed files with 47 additions and 0 deletions
+2
View File
@@ -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);