708 pinned param + clet + self-import-skip after #19 landed; the other 4 sites where check_module_shadow is wired (N_MLET, N_FORRANGE single, N_FORRANGE tuple, N_MCASE) had no dedicated negative-compile row. Worker-19's note that all 6 sites use identical call shape is true today but unpinned by tests; a future asymmetric edit could silently disable enforcement on one site. Adds neg_mlet (let-tuple binder shadows), neg_forrange_single (`for shadowmod of ...`), neg_forrange_tuple (`for (shadowmod, x) of pairs`), neg_mcase (`case let shadowmod:`). Each errors at the binder decl line with the canonical "<kind> '<name>' shadows imported module '<name>'" message. 708's main now runs 8/8 (param, let, mlet, forrange_single, forrange_tuple, mcase, pos_rename, pos_selfimp).
16 lines
403 B
Plaintext
16 lines
403 B
Plaintext
// neg_mlet — Hare tuple destructure `let (shadowmod, x) = pair();`
|
|
// where the first binder shadows the imported module. N_MLET wires
|
|
// check_module_shadow per-binder, so the rule fires at the first
|
|
// name; the second binder `x` is innocuous.
|
|
|
|
use shadowmod;
|
|
|
|
fn pair() (i64, i64) = {
|
|
return 1i64, 2i64;
|
|
};
|
|
|
|
export fn main() i32 = {
|
|
let (shadowmod, x) = pair();
|
|
return (shadowmod + x): i32;
|
|
};
|