Clean up some "GetProperty" methods/functions.

Runtime::GetObjectProperty:
  - handled string.charAt, element access and property access
  - now handlified
GetProperty in handles.cc:
  - called to Runtime::GetObjectProperty
  - now removed
Object::GetProperty (handlified version):
  - handled element access and property access
  - now changed to only do property access
New: Object::GetPropertyOrElement:
  - handles element access and property access

R=ishell@chromium.org

Review URL: https://codereview.chromium.org/210953005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@20327 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
yangguo@chromium.org 2014-03-28 09:49:27 +00:00
parent 6730ec8433
commit 1037a883de
12 changed files with 105 additions and 118 deletions

View File

@ -1941,7 +1941,7 @@ v8::Local<Value> v8::TryCatch::StackTrace() const {
i::Handle<i::JSObject> obj(i::JSObject::cast(raw_obj), isolate_);
i::Handle<i::String> name = isolate_->factory()->stack_string();
if (!i::JSReceiver::HasProperty(obj, name)) return v8::Local<Value>();
i::Handle<i::Object> value = i::GetProperty(isolate_, obj, name);
i::Handle<i::Object> value = i::Object::GetProperty(obj, name);
if (value.is_null()) return v8::Local<Value>();
return v8::Utils::ToLocal(scope.CloseAndEscape(value));
} else {
@ -3143,7 +3143,8 @@ Local<Value> v8::Object::Get(v8::Handle<Value> key) {
i::Handle<i::Object> self = Utils::OpenHandle(this);
i::Handle<i::Object> key_obj = Utils::OpenHandle(*key);
EXCEPTION_PREAMBLE(isolate);
i::Handle<i::Object> result = i::GetProperty(isolate, self, key_obj);
i::Handle<i::Object> result =
i::Runtime::GetObjectProperty(isolate, self, key_obj);
has_pending_exception = result.is_null();
EXCEPTION_BAILOUT_CHECK(isolate, Local<Value>());
return Utils::ToLocal(result);
@ -6157,8 +6158,10 @@ Local<Symbol> v8::Symbol::For(Isolate* isolate, Local<String> name) {
i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry();
i::Handle<i::String> part = i_isolate->factory()->for_string();
i::Handle<i::JSObject> symbols =
i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part));
i::Handle<i::Object> symbol = i::JSObject::GetProperty(symbols, i_name);
i::Handle<i::JSObject>::cast(
i::Object::GetPropertyOrElement(registry, part));
i::Handle<i::Object> symbol =
i::Object::GetPropertyOrElement(symbols, i_name);
if (!symbol->IsSymbol()) {
ASSERT(symbol->IsUndefined());
symbol = i_isolate->factory()->NewSymbol();
@ -6175,8 +6178,10 @@ Local<Symbol> v8::Symbol::ForApi(Isolate* isolate, Local<String> name) {
i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry();
i::Handle<i::String> part = i_isolate->factory()->for_api_string();
i::Handle<i::JSObject> symbols =
i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part));
i::Handle<i::Object> symbol = i::JSObject::GetProperty(symbols, i_name);
i::Handle<i::JSObject>::cast(
i::Object::GetPropertyOrElement(registry, part));
i::Handle<i::Object> symbol =
i::Object::GetPropertyOrElement(symbols, i_name);
if (!symbol->IsSymbol()) {
ASSERT(symbol->IsUndefined());
symbol = i_isolate->factory()->NewSymbol();
@ -6205,8 +6210,10 @@ Local<Private> v8::Private::ForApi(Isolate* isolate, Local<String> name) {
i::Handle<i::JSObject> registry = i_isolate->GetSymbolRegistry();
i::Handle<i::String> part = i_isolate->factory()->private_api_string();
i::Handle<i::JSObject> privates =
i::Handle<i::JSObject>::cast(i::JSObject::GetProperty(registry, part));
i::Handle<i::Object> symbol = i::JSObject::GetProperty(privates, i_name);
i::Handle<i::JSObject>::cast(
i::Object::GetPropertyOrElement(registry, part));
i::Handle<i::Object> symbol =
i::Object::GetPropertyOrElement(privates, i_name);
if (!symbol->IsSymbol()) {
ASSERT(symbol->IsUndefined());
symbol = i_isolate->factory()->NewPrivateSymbol();
@ -6956,7 +6963,8 @@ Local<Value> Debug::GetMirror(v8::Handle<v8::Value> obj) {
i::Handle<i::JSObject> debug(isolate_debug->debug_context()->global_object());
i::Handle<i::String> name = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("MakeMirror"));
i::Handle<i::Object> fun_obj = i::GetProperty(isolate, debug, name);
i::Handle<i::Object> fun_obj = i::Object::GetProperty(debug, name);
ASSERT(!fun_obj.is_null());
i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(fun_obj);
v8::Handle<v8::Function> v8_fun = Utils::ToLocal(fun);
const int kArgc = 1;

View File

@ -1938,8 +1938,8 @@ bool Genesis::InstallNatives() {
// Install Function.prototype.call and apply.
{ Handle<String> key = factory()->function_class_string();
Handle<JSFunction> function =
Handle<JSFunction>::cast(
GetProperty(isolate(), isolate()->global_object(), key));
Handle<JSFunction>::cast(Object::GetProperty(
isolate()->global_object(), key));
Handle<JSObject> proto =
Handle<JSObject>(JSObject::cast(function->instance_prototype()));
@ -2076,8 +2076,8 @@ static Handle<JSObject> ResolveBuiltinIdHolder(
Handle<GlobalObject> global(native_context->global_object());
const char* period_pos = strchr(holder_expr, '.');
if (period_pos == NULL) {
return Handle<JSObject>::cast(GetProperty(
isolate, global, factory->InternalizeUtf8String(holder_expr)));
return Handle<JSObject>::cast(Object::GetPropertyOrElement(
global, factory->InternalizeUtf8String(holder_expr)));
}
ASSERT_EQ(".prototype", period_pos);
Vector<const char> property(holder_expr,
@ -2085,7 +2085,7 @@ static Handle<JSObject> ResolveBuiltinIdHolder(
Handle<String> property_string = factory->InternalizeUtf8String(property);
ASSERT(!property_string.is_null());
Handle<JSFunction> function = Handle<JSFunction>::cast(
GetProperty(isolate, global, property_string));
Object::GetProperty(global, property_string));
return Handle<JSObject>(JSObject::cast(function->prototype()));
}

View File

@ -783,8 +783,8 @@ Handle<Object> Execution::CharAt(Handle<String> string, uint32_t index) {
return factory->undefined_value();
}
Handle<Object> char_at = GetProperty(
isolate, isolate->js_builtins_object(), factory->char_at_string());
Handle<Object> char_at = Object::GetProperty(
isolate->js_builtins_object(), factory->char_at_string());
if (!char_at->IsJSFunction()) {
return factory->undefined_value();
}

View File

@ -197,15 +197,8 @@ Handle<Object> GetProperty(Handle<JSReceiver> obj,
const char* name) {
Isolate* isolate = obj->GetIsolate();
Handle<String> str = isolate->factory()->InternalizeUtf8String(name);
CALL_HEAP_FUNCTION(isolate, obj->GetProperty(*str), Object);
}
Handle<Object> GetProperty(Isolate* isolate,
Handle<Object> obj,
Handle<Object> key) {
CALL_HEAP_FUNCTION(isolate,
Runtime::GetObjectProperty(isolate, obj, key), Object);
ASSERT(!str.is_null());
return Object::GetPropertyOrElement(obj, str);
}
@ -477,9 +470,8 @@ Handle<Object> GetScriptNameOrSourceURL(Handle<Script> script) {
isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("nameOrSourceURL"));
Handle<JSValue> script_wrapper = GetScriptWrapper(script);
Handle<Object> property = GetProperty(isolate,
script_wrapper,
name_or_source_url_key);
Handle<Object> property =
Object::GetProperty(script_wrapper, name_or_source_url_key);
ASSERT(property->IsJSFunction());
Handle<JSFunction> method = Handle<JSFunction>::cast(property);
bool caught_exception;

View File

@ -240,10 +240,6 @@ Handle<Object> HasProperty(Handle<JSReceiver> obj, Handle<Object> key);
Handle<Object> GetProperty(Handle<JSReceiver> obj, const char* name);
Handle<Object> GetProperty(Isolate* isolate,
Handle<Object> obj,
Handle<Object> key);
Handle<String> LookupSingleCharacterStringFromCode(Isolate* isolate,
uint32_t index);

View File

@ -1082,7 +1082,9 @@ Handle<Code> KeyedLoadIC::LoadElementStub(Handle<JSObject> receiver) {
MaybeObject* KeyedLoadIC::Load(Handle<Object> object, Handle<Object> key) {
if (MigrateDeprecated(object)) {
return Runtime::GetObjectPropertyOrFail(isolate(), object, key);
Handle<Object> result = Runtime::GetObjectProperty(isolate(), object, key);
RETURN_IF_EMPTY_HANDLE(isolate(), result);
return *result;
}
MaybeObject* maybe_object = NULL;
@ -1121,7 +1123,9 @@ MaybeObject* KeyedLoadIC::Load(Handle<Object> object, Handle<Object> key) {
}
if (maybe_object != NULL) return maybe_object;
return Runtime::GetObjectPropertyOrFail(isolate(), object, key);
Handle<Object> result = Runtime::GetObjectProperty(isolate(), object, key);
RETURN_IF_EMPTY_HANDLE(isolate(), result);
return *result;
}

View File

@ -875,7 +875,7 @@ Failure* Isolate::StackOverflow() {
// attach the stack trace as a hidden property.
Handle<String> key = factory()->stack_overflow_string();
Handle<JSObject> boilerplate =
Handle<JSObject>::cast(GetProperty(this, js_builtins_object(), key));
Handle<JSObject>::cast(Object::GetProperty(js_builtins_object(), key));
Handle<JSObject> exception = JSObject::Copy(boilerplate);
DoThrow(*exception, NULL);

View File

@ -671,7 +671,7 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSObject(
map->instance_descriptors()->GetFieldIndex(i)),
isolate_);
} else {
property = GetProperty(isolate_, object, key);
property = Object::GetPropertyOrElement(object, key);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate_, property, EXCEPTION);
}
Result result = SerializeProperty(property, comma, key);
@ -690,7 +690,7 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSObject(
Handle<Object> property;
if (key->IsString()) {
key_handle = Handle<String>(String::cast(key), isolate_);
property = GetProperty(isolate_, object, key_handle);
property = Object::GetPropertyOrElement(object, key_handle);
} else {
ASSERT(key->IsNumber());
key_handle = factory_->NumberToString(Handle<Object>(key, isolate_));
@ -701,7 +701,7 @@ BasicJsonStringifier::Result BasicJsonStringifier::SerializeJSObject(
} else if (key_handle->AsArrayIndex(&index)) {
property = Object::GetElement(isolate_, object, index);
} else {
property = GetProperty(isolate_, object, key_handle);
property = Object::GetPropertyOrElement(object, key_handle);
}
}
RETURN_IF_EMPTY_HANDLE_VALUE(isolate_, property, EXCEPTION);

View File

@ -487,14 +487,18 @@ MaybeObject* JSProxy::GetPropertyWithHandler(Object* receiver_raw,
}
Handle<Object> Object::GetProperty(Handle<Object> object,
Handle<Name> name) {
// TODO(rossberg): The index test should not be here but in the GetProperty
// method (or somewhere else entirely). Needs more global clean-up.
Handle<Object> Object::GetPropertyOrElement(Handle<Object> object,
Handle<Name> name) {
uint32_t index;
Isolate* isolate = name->GetIsolate();
if (name->AsArrayIndex(&index)) return GetElement(isolate, object, index);
CALL_HEAP_FUNCTION(isolate, object->GetProperty(*name), Object);
return GetProperty(object, name);
}
Handle<Object> Object::GetProperty(Handle<Object> object,
Handle<Name> name) {
CALL_HEAP_FUNCTION(name->GetIsolate(), object->GetProperty(*name), Object);
}
@ -3602,9 +3606,8 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
Handle<String> configurable_name =
isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("configurable_"));
Handle<Object> configurable(
v8::internal::GetProperty(isolate, desc, configurable_name));
ASSERT(!isolate->has_pending_exception());
Handle<Object> configurable = Object::GetProperty(desc, configurable_name);
ASSERT(!configurable.is_null());
ASSERT(configurable->IsTrue() || configurable->IsFalse());
if (configurable->IsFalse()) {
Handle<String> trap =
@ -3622,17 +3625,15 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
Handle<String> hasWritable_name =
isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("hasWritable_"));
Handle<Object> hasWritable(
v8::internal::GetProperty(isolate, desc, hasWritable_name));
ASSERT(!isolate->has_pending_exception());
Handle<Object> hasWritable = Object::GetProperty(desc, hasWritable_name);
ASSERT(!hasWritable.is_null());
ASSERT(hasWritable->IsTrue() || hasWritable->IsFalse());
if (hasWritable->IsTrue()) {
Handle<String> writable_name =
isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("writable_"));
Handle<Object> writable(
v8::internal::GetProperty(isolate, desc, writable_name));
ASSERT(!isolate->has_pending_exception());
Handle<Object> writable = Object::GetProperty(desc, writable_name);
ASSERT(!writable.is_null());
ASSERT(writable->IsTrue() || writable->IsFalse());
*done = writable->IsFalse();
if (!*done) return isolate->factory()->the_hole_value();
@ -3647,8 +3648,8 @@ Handle<Object> JSProxy::SetPropertyViaPrototypesWithHandler(
// We have an AccessorDescriptor.
Handle<String> set_name = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("set_"));
Handle<Object> setter(v8::internal::GetProperty(isolate, desc, set_name));
ASSERT(!isolate->has_pending_exception());
Handle<Object> setter = Object::GetProperty(desc, set_name);
ASSERT(!setter.is_null());
if (!setter->IsUndefined()) {
// TODO(rossberg): nicer would be to cast to some JSCallable here...
return SetPropertyWithDefinedSetter(
@ -3726,21 +3727,21 @@ PropertyAttributes JSProxy::GetPropertyAttributeWithHandler(
// Convert result to PropertyAttributes.
Handle<String> enum_n = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("enumerable_"));
Handle<Object> enumerable(v8::internal::GetProperty(isolate, desc, enum_n));
if (isolate->has_pending_exception()) return NONE;
Handle<Object> enumerable = Object::GetProperty(desc, enum_n);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, enumerable, NONE);
Handle<String> conf_n = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("configurable_"));
Handle<Object> configurable(v8::internal::GetProperty(isolate, desc, conf_n));
if (isolate->has_pending_exception()) return NONE;
Handle<Object> configurable = Object::GetProperty(desc, conf_n);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, configurable, NONE);
Handle<String> writ_n = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("writable_"));
Handle<Object> writable(v8::internal::GetProperty(isolate, desc, writ_n));
if (isolate->has_pending_exception()) return NONE;
Handle<Object> writable = Object::GetProperty(desc, writ_n);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, writable, NONE);
if (!writable->BooleanValue()) {
Handle<String> set_n = isolate->factory()->InternalizeOneByteString(
STATIC_ASCII_VECTOR("set_"));
Handle<Object> setter(v8::internal::GetProperty(isolate, desc, set_n));
if (isolate->has_pending_exception()) return NONE;
Handle<Object> setter = Object::GetProperty(desc, set_n);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, setter, NONE);
writable = isolate->factory()->ToBoolean(!setter->IsUndefined());
}
@ -3803,8 +3804,8 @@ MUST_USE_RESULT Handle<Object> JSProxy::CallTrap(const char* name,
Handle<Object> handler(this->handler(), isolate);
Handle<String> trap_name = isolate->factory()->InternalizeUtf8String(name);
Handle<Object> trap(v8::internal::GetProperty(isolate, handler, trap_name));
if (isolate->has_pending_exception()) return trap;
Handle<Object> trap = Object::GetPropertyOrElement(handler, trap_name);
RETURN_IF_EMPTY_HANDLE_VALUE(isolate, trap, Handle<Object>());
if (trap->IsUndefined()) {
if (derived.is_null()) {
@ -4070,7 +4071,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object,
bool is_observed = object->map()->is_observed() &&
*name != isolate->heap()->hidden_string();
if (is_observed && lookup->IsDataProperty()) {
old_value = Object::GetProperty(object, name);
old_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
}
@ -4116,7 +4117,7 @@ Handle<Object> JSObject::SetPropertyForResult(Handle<JSObject> object,
LookupResult new_lookup(isolate);
object->LocalLookup(*name, &new_lookup, true);
if (new_lookup.IsDataProperty()) {
Handle<Object> new_value = Object::GetProperty(object, name);
Handle<Object> new_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, new_value);
if (!new_value->SameValue(*old_value)) {
EnqueueChangeRecord(object, "update", name, old_value);
@ -4195,7 +4196,7 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
*name != isolate->heap()->hidden_string();
if (is_observed && lookup.IsProperty()) {
if (lookup.IsDataProperty()) {
old_value = Object::GetProperty(object, name);
old_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
}
old_attributes = lookup.GetAttributes();
@ -4241,7 +4242,7 @@ Handle<Object> JSObject::SetLocalPropertyIgnoreAttributes(
object->LocalLookup(*name, &new_lookup, true);
bool value_changed = false;
if (new_lookup.IsDataProperty()) {
Handle<Object> new_value = Object::GetProperty(object, name);
Handle<Object> new_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, new_value);
value_changed = !old_value->SameValue(*new_value);
}
@ -5231,7 +5232,7 @@ Handle<Object> JSObject::DeleteProperty(Handle<JSObject> object,
bool is_observed = object->map()->is_observed() &&
*name != isolate->heap()->hidden_string();
if (is_observed && lookup.IsDataProperty()) {
old_value = Object::GetProperty(object, name);
old_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
}
Handle<Object> result;
@ -6339,7 +6340,7 @@ void JSObject::DefineAccessor(Handle<JSObject> object,
object->LocalLookup(*name, &lookup, true);
preexists = lookup.IsProperty();
if (preexists && lookup.IsDataProperty()) {
old_value = Object::GetProperty(object, name);
old_value = Object::GetPropertyOrElement(object, name);
CHECK_NOT_EMPTY_HANDLE(isolate, old_value);
}
}

View File

@ -1557,6 +1557,9 @@ class Object : public MaybeObject {
Name* key,
PropertyAttributes* attributes);
static Handle<Object> GetPropertyOrElement(Handle<Object> object,
Handle<Name> key);
static Handle<Object> GetProperty(Handle<Object> object,
Handle<Name> key);
static Handle<Object> GetProperty(Handle<Object> object,

View File

@ -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>());
}

View File

@ -846,15 +846,9 @@ class Runtime : public AllStatic {
Handle<JSReceiver> object,
Handle<Object> key);
MUST_USE_RESULT static MaybeObject* GetObjectProperty(
Isolate* isolate,
Handle<Object> object,
Handle<Object> key);
MUST_USE_RESULT static MaybeObject* GetObjectPropertyOrFail(
Isolate* isolate,
Handle<Object> object,
Handle<Object> key);
static Handle<Object> GetObjectProperty(Isolate* isolate,
Handle<Object> object,
Handle<Object> key);
static void SetupArrayBuffer(Isolate* isolate,
Handle<JSArrayBuffer> array_buffer,