mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-11-07 08:33:50 +08:00
Node resolves a name nothing declares at run time. In sloppy mode a WRITE creates a property on the process-wide global object, which a native binary has no object for, so those programs belong on the Node island route (plan D-2/D-5). Until that routing exists, an undeclared write in a `.js` source is refused at build time under a dedicated code, SC1091, whose text names the island route instead of failing with a generic no-lowering message. Reaching that refusal at all means the checker has to stop treating an undeclared name in a JavaScript source as a compile error, so 2304, its did-you-mean spelling 2552, and shorthand position's 18004 join the JS relaxation set. The relaxation stays `isJsSourceFileName`-gated: TypeScript input keeps the compile error, where an undeclared name is a bug rather than a runtime path. The refusal is a preflight walk over every JavaScript file, so it reports once per write, before any code is emitted, at the span the checker used. `isJsWriteTarget7` is shared with the lowerer's unresolved-reference fence, which supplies the same refusal for a write that reaches lowering by a path preflight does not model. An empty identifier is skipped: it is a parse recovery artifact, never a name a program writes. The JS-read half of D-2 (the name lowers to Node's catchable `ReferenceError`) is the next commit; this one only changes what the build says about a write. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
7 lines
360 B
JavaScript
7 lines
360 B
JavaScript
// A sloppy-mode implicit-global WRITE in a JavaScript source. Node resolves
|
|
// the write by creating a property on the global object — process-wide state
|
|
// a native binary has none of — so the write is refused by name (SC1091) and
|
|
// names the Node-island route the sloppy semantics need (plan D-2/D-5).
|
|
implicitGlobal = 42;
|
|
console.log(implicitGlobal);
|