Source
Jelly micro-test benchmark (PR #1304). defineProperty scores 0% recall (0/6 named edges).
Pattern
function defProp() {
const obj = {};
Object.defineProperty(obj, "f", { value: f1 });
obj.f(); // ← should resolve to f1
}
defProp(); // Edge: defProp → f1 (missed)
function defProps() {
const obj = {};
Object.defineProperties(obj, {
"f1": { value: f1 },
"f2": { value: f2 },
});
obj.f1(); obj.f2(); // ← should resolve to f1, f2
}
function create() {
const obj = Object.create({ f1, f2 });
obj.f1(); obj.f2(); // ← should resolve via prototype
}
Named edges missed:
f1 → defProp, f1 → defProps, f1 → create (6 total)
What's needed
When the resolver sees Object.defineProperty(obj, "key", { value: expr }):
- Record that
obj.key resolves to expr
- Propagate to call sites
obj.key()
Similarly for Object.defineProperties(obj, { key: { value: expr } }) and Object.create({ key: expr }).
This is primarily a lookup-table issue at the WASM extractor level — the property descriptor's value field needs to be tracked as a property assignment.
Impact
- 6 named edges in
defineProperty fixture
Object.defineProperty is used heavily in polyfills, Vue reactivity, class field transpilation
Fixture
tests/benchmarks/resolution/fixtures/jelly-micro/defineProperty/defineProperty.js
References
Source
Jelly micro-test benchmark (PR #1304).
definePropertyscores 0% recall (0/6 named edges).Pattern
Named edges missed:
f1 → defProp,f1 → defProps,f1 → create(6 total)What's needed
When the resolver sees
Object.defineProperty(obj, "key", { value: expr }):obj.keyresolves toexprobj.key()Similarly for
Object.defineProperties(obj, { key: { value: expr } })andObject.create({ key: expr }).This is primarily a lookup-table issue at the WASM extractor level — the property descriptor's
valuefield needs to be tracked as a property assignment.Impact
definePropertyfixtureObject.definePropertyis used heavily in polyfills, Vue reactivity, class field transpilationFixture
tests/benchmarks/resolution/fixtures/jelly-micro/defineProperty/defineProperty.jsReferences