wcc+ww: //ww:module-reset boundary directive; package-less files keep module "" (#16 PREP-main)
Driver twins emit the line-comment directive only before package-less files (peekpackage==nil); both lexers tokenize it (TK_MODRESET, appended =87 so existing token values hold) and both parsers reset curmod — a package-less file's decls get module "" instead of inheriting the last bundled package (the sticky-curmod leak, task #11). Withdrawn alternative: injecting 'package main' flips non-entry symbols bare->main-prefixed (FFI-visible, broke 764). Codegen-neutral by proof: bare symbols preserved, both stages emit byte-identical asm for a directive-bearing combined. Transitional until strict-package rejects package-less files outright. Includes 737 bad-deep pin for the PREP-peek >2048 edge + 904/toktest rows for the new token.
This commit is contained in:
@@ -180,6 +180,10 @@ typedef enum {
|
||||
TK_YIELD, /* `yield expr;` — value-return from a match arm */
|
||||
TK_ENUM, /* Hare-style `enum [storage] { ... }` type form */
|
||||
TK_MODULE, /* `module foo;` — directory-as-module declaration */
|
||||
TK_MODRESET, /* `//ww:module-reset` — driver bundle boundary: reset
|
||||
* curmod to NULL before a package-less file's bytes
|
||||
* (#16 option-B; the package-less-entry attribution fix
|
||||
* that replaces the withdrawn `package main` inject). */
|
||||
|
||||
TK_LAST /* sentinel for tables */
|
||||
} Tkind;
|
||||
@@ -207,6 +211,9 @@ struct Lex {
|
||||
i32 col;
|
||||
Arena *a; /* token-text arena */
|
||||
int errs;
|
||||
int modreset; /* a `//ww:module-reset` directive was seen in
|
||||
* the last skipped run; lexnext emits TK_MODRESET
|
||||
* before the next real token. */
|
||||
};
|
||||
|
||||
void lexinit(Lex*, Arena*, const char *file, const char *src, u64 len);
|
||||
|
||||
Reference in New Issue
Block a user