[csa] Add IsArrayProtectorCellInvalid utility method
Change-Id: I8ecca14e1d65aeed59cd55626e41f9863d58be50 Reviewed-on: https://chromium-review.googlesource.com/589431 Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#46955}
This commit is contained in:
parent
de9b0a071c
commit
68a58016a1
@ -2230,10 +2230,7 @@ TF_BUILTIN(ArrayIteratorPrototypeNext, CodeStubAssembler) {
|
||||
BIND(&holey_object_values);
|
||||
{
|
||||
// Check the array_protector cell, and take the slow path if it's invalid.
|
||||
Node* invalid = SmiConstant(Isolate::kProtectorInvalid);
|
||||
Node* cell = LoadRoot(Heap::kArrayProtectorRootIndex);
|
||||
Node* cell_value = LoadObjectField(cell, PropertyCell::kValueOffset);
|
||||
GotoIf(WordEqual(cell_value, invalid), &generic_values);
|
||||
GotoIf(IsArrayProtectorCellInvalid(), &generic_values);
|
||||
|
||||
var_value.Bind(UndefinedConstant());
|
||||
Node* value = LoadFixedArrayElement(elements, index, 0, SMI_PARAMETERS);
|
||||
@ -2245,10 +2242,7 @@ TF_BUILTIN(ArrayIteratorPrototypeNext, CodeStubAssembler) {
|
||||
BIND(&holey_double_values);
|
||||
{
|
||||
// Check the array_protector cell, and take the slow path if it's invalid.
|
||||
Node* invalid = SmiConstant(Isolate::kProtectorInvalid);
|
||||
Node* cell = LoadRoot(Heap::kArrayProtectorRootIndex);
|
||||
Node* cell_value = LoadObjectField(cell, PropertyCell::kValueOffset);
|
||||
GotoIf(WordEqual(cell_value, invalid), &generic_values);
|
||||
GotoIf(IsArrayProtectorCellInvalid(), &generic_values);
|
||||
|
||||
var_value.Bind(UndefinedConstant());
|
||||
Node* value = LoadFixedDoubleArrayElement(
|
||||
|
@ -3405,6 +3405,13 @@ Node* CodeStubAssembler::IsUndetectableMap(Node* map) {
|
||||
return IsSetWord32(LoadMapBitField(map), 1 << Map::kIsUndetectable);
|
||||
}
|
||||
|
||||
Node* CodeStubAssembler::IsArrayProtectorCellInvalid() {
|
||||
Node* invalid = SmiConstant(Isolate::kProtectorInvalid);
|
||||
Node* cell = LoadRoot(Heap::kArrayProtectorRootIndex);
|
||||
Node* cell_value = LoadObjectField(cell, PropertyCell::kValueOffset);
|
||||
return WordEqual(cell_value, invalid);
|
||||
}
|
||||
|
||||
Node* CodeStubAssembler::IsCallable(Node* object) {
|
||||
return IsCallableMap(LoadMap(object));
|
||||
}
|
||||
|
@ -877,6 +877,7 @@ class V8_EXPORT_PRIVATE CodeStubAssembler : public compiler::CodeAssembler {
|
||||
Node* IsUnseededNumberDictionary(Node* object);
|
||||
Node* IsWeakCell(Node* object);
|
||||
Node* IsUndetectableMap(Node* map);
|
||||
Node* IsArrayProtectorCellInvalid();
|
||||
|
||||
// True iff |object| is a Smi or a HeapNumber.
|
||||
Node* IsNumber(Node* object);
|
||||
|
Loading…
Reference in New Issue
Block a user