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

Reply via email to