Parent: #465. Related: #806, #808. Class NamedEvaluation before static effects is tracked separately in #814.
At main 209201a, four retained required-bytecode Test262 failures reproduce unchanged: object/method-definition/fn-name-fn.js, fn-name-gen.js, generator-name-prop-symbol.js and name-name-prop-symbol.js. Forced tree-walker passes, required bytecode misses the Symbol-derived function names.
The wider audit confirms three object-literal metadata defects:
- Computed data-property lowering omits the source-level anonymous function/method naming step. String and described/empty Symbol keys fail for concise methods, functions, arrows and generators.
- Both static and computed VM/native property initialization set HomeObject whenever the stored callable is a method, even when the syntax only copies an existing method. Copying
a.readinto another literal changessuperin the original function. The source-level MethodDefinition distinction must survive lowering. - Computed accessor lowering leaves an unconverted key for vmInitAccessor, which performs keyOf and keyDisplayName on the original object. Its @@toPrimitive is called twice. ToPropertyKey must occur once, before function creation/publication, and the canonical key must be retained.
Examples:
var a = { __proto__: { x: 7 }, read() { return super.x; } };
var b = { __proto__: { x: 9 }, read: a.read };
// Both calls must remain 7; copying is not MakeMethod.
a.read() === 7 && b.read() === 7;var calls = 0;
var key = { [Symbol.toPrimitive]() { calls++; return 'x'; } };
var object = { get [key]() { return 7; } };
// calls must be 1, with accessor name 'get x'.Acceptance:
- Carry explicit source-derived naming/MakeMethod intent through canonical bytecode and native operation metadata; never infer it from the runtime callable's flags or rename copied values.
- Preserve once-only ToPropertyKey, accessor prefixes, exact Symbol/string names and function-name descriptors, HomeObject identity, named/existing callable controls and ordinary/generator/async function forms.
- Force tree-walker, required VM and native paths; cover key-coercion abrupt/moving boundaries and allocation replay, shared no-GIL/TSan, full units and seeded fuzz.
- Measure the same pinned upstream scopes before/after with nonzero denominators, and link conventional issue-specific commits and complete pushed CI.
Current local metadata probes excluding #814's class-static-name case: 10/32 passing entry forms, versus Node 32/32. These are ordinary automatic IIFEs and generator entries, not claimed as a forced-tree matrix. Four upstream paired witnesses independently prove the required-tier mismatch. Exact sources, logs, current-main runner and hashes are retained at /Users/chris/.cache/zig-js-vm-naming.7Wj8Ri.
No blanket runtime renaming, method rebinding on copies, duplicate coercion, source rewrite, fallback coverage substitution, disabled GC or native stack/queue/job lifecycle redesign.