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:
parent
6730ec8433
commit
1037a883de
26
src/api.cc
26
src/api.cc
@ -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;
|
||||
|
@ -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()));
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -487,14 +487,18 @@ MaybeObject* JSProxy::GetPropertyWithHandler(Object* receiver_raw,
|
||||
}
|
||||
|
||||
|
||||
Handle<Object> Object::GetProperty(Handle<Object> object,
|
||||
Handle<Object> Object::GetPropertyOrElement(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.
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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> Runtime::GetObjectProperty(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);
|
||||
|
||||
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>());
|
||||
}
|
||||
|
@ -846,13 +846,7 @@ 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,
|
||||
static Handle<Object> GetObjectProperty(Isolate* isolate,
|
||||
Handle<Object> object,
|
||||
Handle<Object> key);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user