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.
13 lines
519 B
Plaintext
13 lines
519 B
Plaintext
// crossmod — sibling module whose probe() takes a param named like the
|
|
// module `shadowmod` that paramshadowmod (NOT crossmod) imports. The
|
|
// shadow rule is filtered by the BINDING's own module (src_imports
|
|
// cur_mod filter): crossmod carries no `import shadowmod`, so this param
|
|
// must NOT trip even though a sibling module in the same bundle imports
|
|
// that leaf. Legit-form survivor of the abolished self-import tolerance.
|
|
|
|
package crossmod;
|
|
|
|
export fn probe(shadowmod: str) i32 = {
|
|
return shadowmod.len;
|
|
};
|