check-(c): a package importing itself (any spelling) is a hard error, mirroring Go. Predicate is leaf==owner at the N_USE/installdecl seam — sound only after the PREP commits (dotted-test renames, package-less boundary directive). Identical wording both stages; diagnostics-only, byte-id-neutral. 948 pins the reject in both compilers; 708's pos_selfimp (which pinned the abolished self-import skip) converts to neg_selfimp + new pos_crossmod preserving the param-shadow tolerance the case existed for. Checks (a) unused and (b)/(d) name-membership stay deferred to the multi-package arc: imports are filename-keyed pulls, so those need import->file provenance this compiler lacks.
18 lines
650 B
Plaintext
18 lines
650 B
Plaintext
// pos_crossmod — cur_mod-filtering positive. Replaces the abolished
|
|
// pos_selfimp (self-import is hard-rejected post-#16). This module
|
|
// (paramshadowmod) imports `shadowmod`, and the bundle also pulls module
|
|
// `crossmod`, whose probe() has a param named `shadowmod`. crossmod does
|
|
// NOT import shadowmod, so the shadow rule — filtered by the binding's
|
|
// own module — must NOT trip crossmod's param, even though a sibling
|
|
// module in the same bundle imports that leaf. Build + run; exit = 2.
|
|
|
|
package paramshadowmod;
|
|
|
|
import shadowmod;
|
|
import crossmod;
|
|
|
|
export fn main() i32 = {
|
|
let _ = shadowmod.say();
|
|
return crossmod.probe("hi");
|
|
};
|