Revision: 20327
Author: [email protected]
Date: Fri Mar 28 09:49:27 2014 UTC
Log: 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
[email protected]
Review URL: https://codereview.chromium.org/210953005
http://code.google.com/p/v8/source/detail?r=20327
Modified:
/branches/bleeding_edge/src/api.cc
/branches/bleeding_edge/src/bootstrapper.cc
/branches/bleeding_edge/src/execution.cc
/branches/bleeding_edge/src/handles.cc
/branches/bleeding_edge/src/handles.h
/branches/bleeding_edge/src/ic.cc
/branches/bleeding_edge/src/isolate.cc
/branches/bleeding_edge/src/json-stringifier.h
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/objects.h
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/src/runtime.h
=======================================
--- /branches/bleeding_edge/src/api.cc Fri Mar 28 08:59:25 2014 UTC
+++ /branches/bleeding_edge/src/api.cc Fri Mar 28 09:49:27 2014 UTC
@@ -1941,7 +1941,7 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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;
=======================================
--- /branches/bleeding_edge/src/bootstrapper.cc Thu Mar 27 16:42:34 2014 UTC
+++ /branches/bleeding_edge/src/bootstrapper.cc Fri Mar 28 09:49:27 2014 UTC
@@ -1938,8 +1938,8 @@
// 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 @@
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 @@
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()));
}
=======================================
--- /branches/bleeding_edge/src/execution.cc Mon Mar 24 10:07:15 2014 UTC
+++ /branches/bleeding_edge/src/execution.cc Fri Mar 28 09:49:27 2014 UTC
@@ -783,8 +783,8 @@
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();
}
=======================================
--- /branches/bleeding_edge/src/handles.cc Fri Mar 28 06:59:20 2014 UTC
+++ /branches/bleeding_edge/src/handles.cc Fri Mar 28 09:49:27 2014 UTC
@@ -197,15 +197,8 @@
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 @@
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;
=======================================
--- /branches/bleeding_edge/src/handles.h Thu Jan 16 08:17:40 2014 UTC
+++ /branches/bleeding_edge/src/handles.h Fri Mar 28 09:49:27 2014 UTC
@@ -240,10 +240,6 @@
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);
=======================================
--- /branches/bleeding_edge/src/ic.cc Thu Mar 27 09:59:43 2014 UTC
+++ /branches/bleeding_edge/src/ic.cc Fri Mar 28 09:49:27 2014 UTC
@@ -1082,7 +1082,9 @@
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 @@
}
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;
}
=======================================
--- /branches/bleeding_edge/src/isolate.cc Mon Mar 24 16:34:06 2014 UTC
+++ /branches/bleeding_edge/src/isolate.cc Fri Mar 28 09:49:27 2014 UTC
@@ -875,7 +875,7 @@
// 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);
=======================================
--- /branches/bleeding_edge/src/json-stringifier.h Tue Mar 25 09:51:13 2014
UTC
+++ /branches/bleeding_edge/src/json-stringifier.h Fri Mar 28 09:49:27 2014
UTC
@@ -671,7 +671,7 @@
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 @@
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 @@
} 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);
=======================================
--- /branches/bleeding_edge/src/objects.cc Thu Mar 27 18:29:07 2014 UTC
+++ /branches/bleeding_edge/src/objects.cc Fri Mar 28 09:49:27 2014 UTC
@@ -487,14 +487,18 @@
}
-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<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<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 @@
// 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 @@
// 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 @@
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 @@
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 @@
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 @@
*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 @@
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 @@
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 @@
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);
}
}
=======================================
--- /branches/bleeding_edge/src/objects.h Thu Mar 27 16:41:09 2014 UTC
+++ /branches/bleeding_edge/src/objects.h Fri Mar 28 09:49:27 2014 UTC
@@ -1557,6 +1557,9 @@
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,
=======================================
--- /branches/bleeding_edge/src/runtime.cc Fri Mar 28 08:59:46 2014 UTC
+++ /branches/bleeding_edge/src/runtime.cc Fri Mar 28 09:49:27 2014 UTC
@@ -628,8 +628,8 @@
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 @@
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 @@
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 @@
}
// 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 @@
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 @@
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 @@
Runtime::SetObjectProperty(isolate,
target,
key,
- GetProperty(isolate, ext, key),
+ Object::GetPropertyOrElement(ext,
key),
NONE,
SLOPPY),
Handle<JSObject>());
@@ -11757,7 +11746,7 @@
RETURN_IF_EMPTY_HANDLE_VALUE(
isolate,
Runtime::SetObjectProperty(isolate, closure_scope, key,
- GetProperty(isolate, ext, key),
+ Object::GetPropertyOrElement(ext,
key),
NONE, SLOPPY),
Handle<JSObject>());
}
=======================================
--- /branches/bleeding_edge/src/runtime.h Thu Mar 27 16:30:03 2014 UTC
+++ /branches/bleeding_edge/src/runtime.h Fri Mar 28 09:49:27 2014 UTC
@@ -846,15 +846,9 @@
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,
--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
---
You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.