Summary
In jelly-micro/prototypes/prototypes.js, new C() creates a local C. The receiver edge from prototypes/prototypes.js(file) → C(class) should point to the LOCAL C defined in prototypes.js, but instead points to classes/classes.js:C (WASM) or private/private.js:C (native).
This is a receiver resolution non-determinism when multiple files define a same-named class. The same-file candidate should always win.
Fix direction
In resolveReceiverEdge (call-resolver.ts), when computing same-file candidates vs global candidates, the same-file C in prototypes.js should be found and used. Likely an extraction gap — the local C function constructor may not be extracted with kind='class' in one of the engines.
Stacking
Found in #1472. Defer to a follow-up PR.
Summary
In
jelly-micro/prototypes/prototypes.js,new C()creates a localC. The receiver edge fromprototypes/prototypes.js(file) → C(class)should point to the LOCALCdefined inprototypes.js, but instead points toclasses/classes.js:C(WASM) orprivate/private.js:C(native).This is a receiver resolution non-determinism when multiple files define a same-named class. The same-file candidate should always win.
Fix direction
In
resolveReceiverEdge(call-resolver.ts), when computing same-file candidates vs global candidates, the same-fileCinprototypes.jsshould be found and used. Likely an extraction gap — the localCfunction constructor may not be extracted withkind='class'in one of the engines.Stacking
Found in #1472. Defer to a follow-up PR.