So I can't get my head around why this happens (I haven't dug through v8's code to try to figure it out either), but this is really inconsistent to me with how v8 constructs hidden classes in general. The following is running in Node.js v0.8.2 (V8 v3.11.10.12).
Here's the code: http://pastebin.com/2gKWrfHp Here's the output, and the deopt trace: http://pastebin.com/WerQuGLZ Calling Foo.prototype.runTest with any Foo object results in similar performance (unless you change the hidden class, as expected). Bar expectedly deoptimizes because abc is stored on the proto and isn't actually on the constructed object until the first call, causing the optimized function (once it gets hot, which is after the object has changed hidden class) to bailout on the next attempt with a new Bar object. It gets weird with Foobar. test is added directly to the object, the only difference is that this is a function, not a primitive, but it seems like the hidden classes of objects from Foobar's constructor should be the same. The first run is performant, equivalent to Foo (expected). Though running the test again with a new Foobar deoptimizes it. I can't at all understand why. Thanks, Justin -- v8-users mailing list [email protected] http://groups.google.com/group/v8-users
