fix(C4): collectCImportSources recurses into nested namespaces
A named #import c unit declared inside an aliased module sits two namespace levels deep in the merged tree; the one-level walk (the extractLibraries/0130 pattern in c_import form) never collected it, so the unit silently never compiled and its symbols resolved from whatever process image carried the same names — surfaced by C4's sqlite migration, where only the version pin could tell the OS copy from the vendored one.
This commit is contained in:
11
examples/1623-cimport-unit-in-aliased-module.sx
Normal file
11
examples/1623-cimport-unit-in-aliased-module.sx
Normal file
@@ -0,0 +1,11 @@
|
||||
// A named `#import c` unit declared INSIDE an aliased module (so the
|
||||
// unit's namespace nests two deep in the merged tree) still compiles
|
||||
// and links — collectCImportSources recurses through namespaces, the
|
||||
// same way #library collection does (issue 0130's pattern).
|
||||
#import "modules/std.sx";
|
||||
m :: #import "1623-cimport-unit-in-aliased-module/mod.sx";
|
||||
|
||||
main :: () -> i32 {
|
||||
print("nested unit answer = {}\n", m.answer_via_mod());
|
||||
0
|
||||
}
|
||||
1
examples/1623-cimport-unit-in-aliased-module/inmod.c
Normal file
1
examples/1623-cimport-unit-in-aliased-module/inmod.c
Normal file
@@ -0,0 +1 @@
|
||||
int unit_in_mod_answer(void) { return 54; }
|
||||
10
examples/1623-cimport-unit-in-aliased-module/mod.sx
Normal file
10
examples/1623-cimport-unit-in-aliased-module/mod.sx
Normal file
@@ -0,0 +1,10 @@
|
||||
// A module that owns a named C unit + a hand-curated binding.
|
||||
#import "modules/std.sx";
|
||||
|
||||
cunit :: #import c {
|
||||
#source "inmod.c";
|
||||
};
|
||||
|
||||
unit_in_mod_answer :: () -> i32 #foreign cunit "unit_in_mod_answer";
|
||||
|
||||
answer_via_mod :: () -> i32 { return unit_in_mod_answer(); }
|
||||
@@ -0,0 +1 @@
|
||||
0
|
||||
@@ -0,0 +1 @@
|
||||
nested unit answer = 54
|
||||
Reference in New Issue
Block a user