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:
+29
-2
@@ -554,26 +554,53 @@ func Cli_BuildProject(projectDir: String) -> int {
|
|||||||
}
|
}
|
||||||
// Merge declarations from this module into userMerged
|
// Merge declarations from this module into userMerged
|
||||||
var decl: *Decl = mod.firstItem;
|
var decl: *Decl = mod.firstItem;
|
||||||
|
var fileDeclCount: int = 0;
|
||||||
while decl != null as *Decl {
|
while decl != null as *Decl {
|
||||||
let next: *Decl = decl.childDecl2;
|
let next: *Decl = decl.childDecl2;
|
||||||
decl.childDecl2 = null as *Decl;
|
decl.childDecl2 = null as *Decl;
|
||||||
// Flatten module declarations
|
// Flatten module declarations
|
||||||
if decl.kind == dkModule {
|
if decl.kind == dkModule {
|
||||||
var inner: *Decl = decl.childDecl1;
|
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 {
|
while inner != null as *Decl {
|
||||||
let innerNext: *Decl = inner.childDecl2;
|
let innerNext: *Decl = inner.childDecl2;
|
||||||
inner.childDecl2 = userMerged.firstItem;
|
inner.childDecl2 = null as *Decl;
|
||||||
|
if userMerged.firstItem == null as *Decl {
|
||||||
userMerged.firstItem = inner;
|
userMerged.firstItem = inner;
|
||||||
|
last = inner;
|
||||||
|
} else {
|
||||||
|
last.childDecl2 = inner;
|
||||||
|
last = inner;
|
||||||
|
}
|
||||||
userMerged.itemCount = userMerged.itemCount + 1;
|
userMerged.itemCount = userMerged.itemCount + 1;
|
||||||
|
fileDeclCount = fileDeclCount + 1;
|
||||||
inner = innerNext;
|
inner = innerNext;
|
||||||
}
|
}
|
||||||
} else {
|
} 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.firstItem = decl;
|
||||||
|
}
|
||||||
userMerged.itemCount = userMerged.itemCount + 1;
|
userMerged.itemCount = userMerged.itemCount + 1;
|
||||||
|
fileDeclCount = fileDeclCount + 1;
|
||||||
}
|
}
|
||||||
decl = next;
|
decl = next;
|
||||||
}
|
}
|
||||||
|
Print(" -> ");
|
||||||
|
PrintInt(fileDeclCount as int64);
|
||||||
|
PrintLine(" decls merged");
|
||||||
i = i + 1;
|
i = i + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user