Index: src/objects.cc |
diff --git a/src/objects.cc b/src/objects.cc |
index 507fbfc1142ccf057a70995c112c143232a1a402..30a546cc7474b4c294ecc43807300082f4983f59 100644 |
--- a/src/objects.cc |
+++ b/src/objects.cc |
@@ -4029,6 +4029,29 @@ MaybeObject* JSObject::SetPropertyForResult(LookupResult* lookup, |
} |
+MaybeObject* JSObject::SetLocalPropertyIgnoreAttributesTrampoline( |
+ Name* key, |
+ Object* value, |
+ PropertyAttributes attributes, |
+ ValueType value_type, |
+ StoreMode mode, |
+ ExtensibilityCheck extensibility_check) { |
+ // TODO(mstarzinger): The trampoline is a giant hack, don't use it anywhere |
+ // else or handlification people will start hating you for all eternity. |
+ HandleScope scope(GetIsolate()); |
+ IdempotentPointerToHandleCodeTrampoline trampoline(GetIsolate()); |
+ return trampoline.CallWithReturnValue( |
+ &JSObject::SetLocalPropertyIgnoreAttributes, |
+ Handle<JSObject>(this), |
+ Handle<Name>(key), |
+ Handle<Object>(value, GetIsolate()), |
+ attributes, |
+ value_type, |
+ mode, |
+ extensibility_check); |
+} |
+ |
+ |
// Set a real local property, even if it is READ_ONLY. If the property is not |
// present, add it with attributes NONE. This code is an exact clone of |
// SetProperty, with the check for IsReadOnly and the check for a |
@@ -4044,11 +4067,12 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes( |
Handle<Object> value, |
PropertyAttributes attributes, |
ValueType value_type, |
- StoreMode mode) { |
+ StoreMode mode, |
+ ExtensibilityCheck extensibility_check) { |
CALL_HEAP_FUNCTION( |
object->GetIsolate(), |
object->SetLocalPropertyIgnoreAttributes( |
- *key, *value, attributes, value_type, mode), |
+ *key, *value, attributes, value_type, mode, extensibility_check), |
Object); |
} |
@@ -4951,13 +4975,13 @@ MaybeObject* JSObject::GetHiddenPropertiesHashTable( |
ASSERT_EQ(hashtable, new_table); |
} |
- MaybeObject* store_result = |
- SetLocalPropertyIgnoreAttributes(GetHeap()->hidden_string(), |
- hashtable, |
- DONT_ENUM, |
- OPTIMAL_REPRESENTATION, |
- ALLOW_AS_CONSTANT, |
- OMIT_EXTENSIBILITY_CHECK); |
+ MaybeObject* store_result = SetLocalPropertyIgnoreAttributesTrampoline( |
+ GetHeap()->hidden_string(), |
+ hashtable, |
+ DONT_ENUM, |
+ OPTIMAL_REPRESENTATION, |
+ ALLOW_AS_CONSTANT, |
+ OMIT_EXTENSIBILITY_CHECK); |
if (store_result->IsFailure()) return store_result; |
return hashtable; |
} |
@@ -4984,13 +5008,13 @@ MaybeObject* JSObject::SetHiddenPropertiesHashTable(Object* value) { |
} |
} |
} |
- MaybeObject* store_result = |
- SetLocalPropertyIgnoreAttributes(GetHeap()->hidden_string(), |
- value, |
- DONT_ENUM, |
- OPTIMAL_REPRESENTATION, |
- ALLOW_AS_CONSTANT, |
- OMIT_EXTENSIBILITY_CHECK); |
+ MaybeObject* store_result = SetLocalPropertyIgnoreAttributesTrampoline( |
+ GetHeap()->hidden_string(), |
+ value, |
+ DONT_ENUM, |
+ OPTIMAL_REPRESENTATION, |
+ ALLOW_AS_CONSTANT, |
+ OMIT_EXTENSIBILITY_CHECK); |
if (store_result->IsFailure()) return store_result; |
return this; |
} |