fix: allow lexical import shadowing
This commit is contained in:
@@ -598,7 +598,53 @@ precedence. Type-shaped arguments parsed for `size` and `align` must retain type
|
||||
checking when either spelling is instead an import binding; neither stage may
|
||||
fall into an internal expression-kind diagnostic.
|
||||
|
||||
The same observer must exercise ordinary root and imported builds plus
|
||||
The adjacent focused dual-stage
|
||||
`lexical_import_bindings_shadow_normally` package observer, together with the
|
||||
tool-suite `paramshadow_lexical_bindings` fixture matrix, is the acceptance
|
||||
owner for ordinary lexical shadowing of an effective file-local package-name
|
||||
object. Together they require a selector before a later local to resolve to and
|
||||
consume the import, while the later spelling resolves to the closer parameter,
|
||||
`let`, tuple-let, ordinary-`for`/range, or match-arm binding. Nested blocks and
|
||||
loop exit restore the import; a parameter wins throughout its body;
|
||||
self-shadowing initializers retain the outer import until the local declaration
|
||||
point; and every annotated tuple type is checked before any tuple binder enters
|
||||
scope. Default, explicit, and builtin-spelled qualifiers follow the same rule.
|
||||
A local value, struct or pseudo-field, function-pointer field, or local
|
||||
enum/member collision must use the local receiver rather than recover the
|
||||
same-spelled import. Conversely, a shadowed dotted type or invalid scalar
|
||||
selector must reject as a local use without a checker/backend cascade. A
|
||||
selector-shaped local-only occurrence does not consume the import, so its
|
||||
unused diagnostic retains source-position precedence. Sibling source files
|
||||
retain independent import bindings and a separately selected legal import use
|
||||
remains effective. Blank, effective-`init`, and missing-target controls remain
|
||||
owned by their immediately adjacent focused observers and are explicit
|
||||
non-effects of this acceptance pair.
|
||||
|
||||
This observer exercises raw-source and directory builds, imported dependencies,
|
||||
production reached by tests, same-package, external-test, and honest
|
||||
test-only sources, filtered execution, retained test execution, and later
|
||||
direct retained-binary execution. Cstage and WWstage must agree on status,
|
||||
stdout, normalized full stderr (including positioned diagnostic order) for
|
||||
build and test rejection, representative comparable semantic artifacts, every
|
||||
test role's public binary bytes, retained binary bytes, and valid runtime
|
||||
results. Its lifecycle matrix requires cold invalid requests to leave no public
|
||||
or retained product and an empty workdir; a warm valid-to-invalid unused-import
|
||||
transition whose source also contains an invalid local selector to preserve the
|
||||
prior public product and complete committed generation byte-for-byte; and
|
||||
restoration to recover ordinary exact-byte reuse with no `.new`, `.install`,
|
||||
`.wwtxn.*`, adjacent `.sepwork`, capture/result, or request-scratch residue. The
|
||||
rule changes neither source eligibility,
|
||||
package/import identity, direct graph edges, action/variant identity, init
|
||||
ordering, test process/state/fatal-abort topology, runtime/process ownership,
|
||||
publication transaction shape, persistence format, concurrency isolation,
|
||||
interruption handling, nor descendant cleanup; those boundaries retain their
|
||||
existing owners. Go has no range-loop `else` clause; that WW-only extension's
|
||||
pre-existing Cstage/WWstage scope difference is explicitly outside this
|
||||
pinned-Go observer, and each import-use prepass continues to mirror its own
|
||||
stage's live checker there.
|
||||
|
||||
The `bare_import_bindings_require_selectors` observer must exercise ordinary
|
||||
root and imported builds plus
|
||||
production, same-package test, external-test, and honest test-only source
|
||||
roles. Cstage and WWstage must agree on status and normalized stdout/stderr,
|
||||
including diagnostic order and source position, and valid controls must produce
|
||||
|
||||
Reference in New Issue
Block a user