Index: src/runtime.cc |
diff --git a/src/runtime.cc b/src/runtime.cc |
index 3195d207ee61c52c97d87cd950dfdd9f93a20e90..ac17ff36a47ccff3dc809dfdabe80d63593c1278 100644 |
--- a/src/runtime.cc |
+++ b/src/runtime.cc |
@@ -628,8 +628,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_CreateGlobalPrivateSymbol) { |
Handle<JSObject> registry = isolate->GetSymbolRegistry(); |
Handle<String> part = isolate->factory()->private_intern_string(); |
Handle<JSObject> privates = |
- Handle<JSObject>::cast(JSObject::GetProperty(registry, part)); |
- Handle<Object> symbol = JSObject::GetProperty(privates, name); |
+ Handle<JSObject>::cast(Object::GetPropertyOrElement(registry, part)); |
+ Handle<Object> symbol = Object::GetPropertyOrElement(privates, name); |
if (!symbol->IsSymbol()) { |
ASSERT(symbol->IsUndefined()); |
symbol = isolate->factory()->NewPrivateSymbol(); |
@@ -1959,8 +1959,8 @@ static Handle<Object> GetOwnProperty(Isolate* isolate, |
if (raw_accessors == NULL) { |
elms->set(WRITABLE_INDEX, heap->ToBoolean((attrs & READ_ONLY) == 0)); |
- // GetProperty does access check. |
- Handle<Object> value = GetProperty(isolate, obj, name); |
+ // Runtime::GetObjectProperty does access check. |
+ Handle<Object> value = Runtime::GetObjectProperty(isolate, obj, name); |
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, value, Handle<Object>::null()); |
elms->set(VALUE_INDEX, *value); |
} else { |
@@ -4980,59 +4980,46 @@ MaybeObject* Runtime::HasObjectProperty(Isolate* isolate, |
return isolate->heap()->ToBoolean(JSReceiver::HasProperty(object, name)); |
} |
-MaybeObject* Runtime::GetObjectPropertyOrFail( |
- Isolate* isolate, |
- Handle<Object> object, |
- Handle<Object> key) { |
- CALL_HEAP_FUNCTION_PASS_EXCEPTION(isolate, |
- GetObjectProperty(isolate, object, key)); |
-} |
- |
-MaybeObject* Runtime::GetObjectProperty(Isolate* isolate, |
- Handle<Object> object, |
- Handle<Object> key) { |
- HandleScope scope(isolate); |
+Handle<Object> Runtime::GetObjectProperty(Isolate* isolate, |
+ Handle<Object> object, |
+ Handle<Object> key) { |
if (object->IsUndefined() || object->IsNull()) { |
Handle<Object> args[2] = { key, object }; |
- Handle<Object> error = |
- isolate->factory()->NewTypeError("non_object_property_load", |
- HandleVector(args, 2)); |
- return isolate->Throw(*error); |
+ isolate->Throw(*isolate->factory()->NewTypeError("non_object_property_load", |
+ HandleVector(args, 2))); |
+ return Handle<Object>(); |
} |
// Check if the given key is an array index. |
uint32_t index; |
if (key->ToArrayIndex(&index)) { |
- Handle<Object> result = GetElementOrCharAt(isolate, object, index); |
- RETURN_IF_EMPTY_HANDLE(isolate, result); |
- return *result; |
+ return GetElementOrCharAt(isolate, object, index); |
} |
// Convert the key to a name - possibly by calling back into JavaScript. |
Handle<Name> name = ToName(isolate, key); |
- RETURN_IF_EMPTY_HANDLE(isolate, name); |
+ RETURN_IF_EMPTY_HANDLE_VALUE(isolate, name, Handle<Object>()); |
// Check if the name is trivially convertible to an index and get |
// the element if so. |
if (name->AsArrayIndex(&index)) { |
- Handle<Object> result = GetElementOrCharAt(isolate, object, index); |
- RETURN_IF_EMPTY_HANDLE(isolate, result); |
- return *result; |
+ return GetElementOrCharAt(isolate, object, index); |
} else { |
- return object->GetProperty(*name); |
+ return Object::GetProperty(object, name); |
} |
} |
RUNTIME_FUNCTION(MaybeObject*, Runtime_GetProperty) { |
- SealHandleScope shs(isolate); |
+ HandleScope scope(isolate); |
ASSERT(args.length() == 2); |
Handle<Object> object = args.at<Object>(0); |
Handle<Object> key = args.at<Object>(1); |
- |
- return Runtime::GetObjectProperty(isolate, object, key); |
+ Handle<Object> result = Runtime::GetObjectProperty(isolate, object, key); |
+ RETURN_IF_EMPTY_HANDLE(isolate, result); |
+ return *result; |
} |
@@ -5135,9 +5122,11 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_KeyedGetProperty) { |
} |
// Fall back to GetObjectProperty. |
- return Runtime::GetObjectProperty(isolate, |
- args.at<Object>(0), |
- args.at<Object>(1)); |
+ HandleScope scope(isolate); |
+ Handle<Object> result = Runtime::GetObjectProperty( |
+ isolate, args.at<Object>(0), args.at<Object>(1)); |
+ RETURN_IF_EMPTY_HANDLE(isolate, result); |
+ return *result; |
} |
@@ -11554,7 +11543,7 @@ static void UpdateStackLocalsFromMaterializedObject(Isolate* isolate, |
ASSERT(!frame->GetParameter(i)->IsTheHole()); |
HandleScope scope(isolate); |
Handle<String> name(scope_info->ParameterName(i)); |
- Handle<Object> value = GetProperty(isolate, target, name); |
+ Handle<Object> value = Object::GetPropertyOrElement(target, name); |
frame->SetParameterValue(i, *value); |
} |
@@ -11562,8 +11551,8 @@ static void UpdateStackLocalsFromMaterializedObject(Isolate* isolate, |
for (int i = 0; i < scope_info->StackLocalCount(); ++i) { |
if (frame->GetExpression(i)->IsTheHole()) continue; |
HandleScope scope(isolate); |
- Handle<Object> value = GetProperty( |
- isolate, target, Handle<String>(scope_info->StackLocalName(i))); |
+ Handle<Object> value = Object::GetPropertyOrElement( |
+ target, Handle<String>(scope_info->StackLocalName(i))); |
frame->SetExpression(i, *value); |
} |
} |
@@ -11607,7 +11596,7 @@ static Handle<JSObject> MaterializeLocalContext(Isolate* isolate, |
Runtime::SetObjectProperty(isolate, |
target, |
key, |
- GetProperty(isolate, ext, key), |
+ Object::GetPropertyOrElement(ext, key), |
NONE, |
SLOPPY), |
Handle<JSObject>()); |
@@ -11757,7 +11746,7 @@ static Handle<JSObject> MaterializeClosure(Isolate* isolate, |
RETURN_IF_EMPTY_HANDLE_VALUE( |
isolate, |
Runtime::SetObjectProperty(isolate, closure_scope, key, |
- GetProperty(isolate, ext, key), |
+ Object::GetPropertyOrElement(ext, key), |
NONE, SLOPPY), |
Handle<JSObject>()); |
} |