Repository navigation
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
o[k] with k naming constructor, toString, valueOf, hasOwnProperty or propertyIsEnumerable read undefined on a plain object, while o.toString answered the member. Computed string and dyn keys now fall back through scr_dyn_inherited_read like constant keys, and link scr_dyn_invoke.c. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ime unit Computed-key dynamic reads may name an inherited member at run time, so every such program needs the fallback. It lived in scr_dyn_invoke.c, which also pulled scr_async_dyn.c into those programs. scr_dyn_inherited.c now holds the fallback, Object.prototype's methods as values and the interned builtin constructors, over the base units only; the dynInherited feature links it for computed keys and constant keys naming one of the five members, and the dyn-invoke unit links it too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The interned constructors' `new` support builds dates and collections and pulled the date, time-zone and collection code into every program with a computed dynamic read. It moves to scr_dyn_global_construct.c, which the dyn-invoke unit links and which programs that also construct dynamic values install at start (dyn.globalConstructInstall). Corpus 8116 pins construction through computed and constant constructor reads in a program without method dispatch. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
84f7662 to
8cb80e6
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Verification for 8cb80e6, rebased onto origin/main 4206155. The later head adds only the corpus cost files. Runtime unit split. Computed keys are built at run time, so every program with a computed dynamic read needs the inherited-member fallback, and restricting the link would be unsound. Before this change, the fallback pulled
Differential. Corpus 8113, 8114 and the new 8116 (construction through computed and constant Zero-cost gate against main 4206155, full sets: bench, self and the TypeScript corpus. Run without
Programs that grow by more than 5 KB (program, baseline bytes, growth) |
…ition Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Natively,
o[k]withknamingconstructor,toString,valueOf,hasOwnPropertyorpropertyIsEnumerableread undefined on a plain object, while the constant-key reado.toStringanswered the inherited member. Computed string keys and dyn keys now fall back throughscr_dyn_inherited_readthe same way.Computed keys are built at run time, so every program with a computed dynamic read must link the fallback. To keep that cheap, the fallback moves out of
scr_dyn_invoke.c(which also pulled inscr_async_dyn.c) into two small units that reference only the base units:scr_dyn_inherited.c: the five-member fallback, Object.prototype's methods as values and the interned builtin constructors. The newdynInheritedfeature links it for computed-key reads and for constant keys naming one of the five members. The dyn-invoke unit links it too.scr_dyn_global_construct.c:newthrough those constructors, which builds dates and collections. The dyn-invoke unit links it, and so do programs that construct dynamic values and also read inherited members; those programs install it at start throughdyn.globalConstructInstall.Evidence: corpus
8113-computed-inherited-member-reads.js,8114-computed-inherited-member-unknown.tsand8116-computed-inherited-construct.js, with order baselines and CI costs recorded. All three fail on main and match Node in the plain and sanitized lanes. The 525 corpus programs whose executables change also pass the plain differential.Zero-cost gate against main, full sets (bench, self and the TypeScript corpus):
The full list is in the verification comment.
🤖 Generated with Claude Code