mirror of
https://github.com/vercel-labs/scriptc.git
synced 2026-10-28 06:53:42 +08:00
The zero-cost gate showed every benchmark executable changing: the new string literals and floating-point constants grew the merged constant pools of scr_json.o and scr_lib.o, which every program linking those units carries, and edits to scr_dyn_fn_get and scr_dyn_has_own changed code the typed benchmarks reach. - The builtin constructor values, the inherited Object.prototype members and the stored timer functions move to scr_dyn_invoke.c, which links only into programs that use them: the frontend now selects that unit for dyn.globalConstructor, dyn.builtinFunction, dyn.objectTag and constant-key reads of constructor/valueOf/toString/hasOwnProperty/ propertyIsEnumerable. Those reads call scr_dyn_inherited_read after the ordinary read (and scr_dyn_object_prototype_member before it, since the ordinary read fences Object.prototype itself); computed-key reads keep their old answer. The unit's new strings live in their own section so programs linking it for other reasons keep their bytes. - scr_date_parse_get_time keeps its exact body; Date.parse and new Date(string) call the new scr_date_parse (bounded grammars, then V8's parser), and JavaScript `new Date(value)` calls scr_dyn_native_date_new_value, so fs.Stats dates are untouched. The parser and UTC(t) avoid new pooled constants. - Object.prototype.toString's "[object Error]" moves to scr_dyn_object_tag_of; scr_json.c is unchanged. - Calling or constructing through stored constructor values and own-property checks on Object.prototype itself are not supported in this change (they would touch shared code). Also pins the IMF-fixdate (cookie Expires) parse and Date#toUTCString round-trip in the corpus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>