fix(cli): change user merge from LIFO to FIFO order, add per-file decl counts

- Cli_BuildProject now appends declarations (preserving original file order)
  instead of prepending (which reversed order)
- Added per-file declaration count debug output
- This makes merge order match Nim bootstrap behavior
This commit is contained in:
2026-06-07 16:08:51 +03:00
parent 1f0baefa5a
commit e1038059c2
+29 -2
View File
@@ -554,26 +554,53 @@ func Cli_BuildProject(projectDir: String) -> int {
}
// Merge declarations from this module into userMerged
var decl: *Decl = mod.firstItem;
var fileDeclCount: int = 0;
while decl != null as *Decl {
let next: *Decl = decl.childDecl2;
decl.childDecl2 = null as *Decl;
// Flatten module declarations
if decl.kind == dkModule {
var inner: *Decl = decl.childDecl1;
// Find last item to append (preserve original order)
var last: *Decl = userMerged.firstItem;
if last != null as *Decl {
while last.childDecl2 != null as *Decl {
last = last.childDecl2;
}
}
while inner != null as *Decl {
let innerNext: *Decl = inner.childDecl2;
inner.childDecl2 = userMerged.firstItem;
inner.childDecl2 = null as *Decl;
if userMerged.firstItem == null as *Decl {
userMerged.firstItem = inner;
last = inner;
} else {
last.childDecl2 = inner;
last = inner;
}
userMerged.itemCount = userMerged.itemCount + 1;
fileDeclCount = fileDeclCount + 1;
inner = innerNext;
}
} else {
decl.childDecl2 = userMerged.firstItem;
decl.childDecl2 = null as *Decl;
var last2: *Decl = userMerged.firstItem;
if last2 != null as *Decl {
while last2.childDecl2 != null as *Decl {
last2 = last2.childDecl2;
}
last2.childDecl2 = decl;
} else {
userMerged.firstItem = decl;
}
userMerged.itemCount = userMerged.itemCount + 1;
fileDeclCount = fileDeclCount + 1;
}
decl = next;
}
Print(" -> ");
PrintInt(fileDeclCount as int64);
PrintLine(" decls merged");
i = i + 1;
}