Closed
Bug 429787
Opened 16 years ago
Closed 16 years ago
baconize object initialization
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
WONTFIX
People
(Reporter: shaver, Unassigned)
Details
(Keywords: perf)
Current codegen for object initialization: js> function g() { return {a:5, b:1, c:"cookie"}; } js> dis(g) main: 00000: newinit 1 00002: int8 5 00004: initprop "a" 00007: one 00008: initprop "b" 00011: string "cookie" 00014: initprop "c" 00017: endinit I propose that we: (push the property values in inverse order) string "cookie" one int8 5 (newinit, adding the number of properties as an operand) newinit 1 3 (initprop in sequence) initprop "a" initprop "b" initprop "c" (endinit, with the offset back to newinit as an operand) endinit 9 ENDINIT would fill the propcache entry for NEWINIT to hold the resulting shape of the object, via a pointer to the appropriate property in the tree. Finding the cache entry during NEWINIT execution would create an object, grow the slots vector in one shot, set scope->lastProp and such, and then pop the stack into those slots. Pruning of the property tree during GC would have to invalidate the cache appropriately. We couldn't do this 100% compatibly if there are setters on Object.prototype; I propose a cheap test for that and Array.prototype on which to condition this and other fast paths. Tell me how wrong this idea is!
Comment 1•16 years ago
|
||
(In reply to comment #0) > Current codegen for object initialization: > > js> function g() { return {a:5, b:1, c:"cookie"}; } > I propose that we: > (push the property values in inverse order) > string "cookie" > one > int8 5 This would not work due to possible side effects in values like in: var x = 0; var obj = { a: (++x, 0), b: x}; It should be straightforward to fix this since initprop can access the pushed values in the reverse order. But it also suggests instead of having initptop/endinit to have single variable-length bytecode like initobj that takes the list of indexes of property names together with flags describing getters/setters. Then the implementation of this bytecode can define the properties in any order as it wishes.
Comment 2•16 years ago
|
||
ECMA does specify order of evaluation, so care is needed. But what problem is this bug solving? If there's a perf prob it has to be due to a loop creating the same initialiser over and over, but I did "baconize" JSOP_INITPROP already. Benchmark and profile first, then file. As stated, this bug is probably invalid. /be
Reporter | ||
Comment 3•16 years ago
|
||
OK, nm.
Status: NEW → RESOLVED
Closed: 16 years ago
Resolution: --- → WONTFIX
You need to log in
before you can comment on or make changes to this bug.
Description
•