DescriptionImplement immutable prototype chains
This patch implements "immutable prototype exotic objects" from the ECMAScript
spec, which are objects whose __proto__ cannot be changed, but are not otherwise
frozen. They are introduced in order to prevent a Proxy from being introduced
to the prototype chain of the global object.
The API is extended by a SetImmutablePrototype() call in ObjectTemplate, which
can be used to vend new immutable prototype objects. Additionally, Object.prototype
is an immutable prototype object.
In the implementation, a new bit is added to Maps to say whether the prototype is
immutable, which is read by SetPrototype. Map transitions to the immutable prototype
state are not saved in the transition tree because the main use case is just for
the prototype chain of the global object, which there will be only one of per
Context, so no need to take up the extra word for a pointer in each full transition
tree.
BUG=v8:5149
Committed: https://crrev.com/0ff7b4830c82b9e6a9f14d375b05ee64009e1d01
Cr-Commit-Position: refs/heads/master@{#37482}
Patch Set 1 #Patch Set 2 : Various fixes #Patch Set 3 : fix typo #Patch Set 4 : fix test expectations #Patch Set 5 : simplify #
Total comments: 9
Patch Set 6 : changes from review #Patch Set 7 : internal field count is an int, not a bool #Patch Set 8 : Add another DCHECK #Patch Set 9 : reverse bitfield arguments #
Total comments: 2
Patch Set 10 : IsImmutableProto #
Messages
Total messages: 46 (20 generated)
|