Chromium Code Reviews| Index: src/objects.cc |
| diff --git a/src/objects.cc b/src/objects.cc |
| index 2e60cf0982ed3ce6947af92d8c973a289f0e80e4..3412197f1d16da570a90e84c262b9b71717022d2 100644 |
| --- a/src/objects.cc |
| +++ b/src/objects.cc |
| @@ -656,6 +656,43 @@ MaybeHandle<Object> Object::GetProperty(LookupIterator* it, |
| } |
| +MaybeHandle<Object> Object::GetPropertyEx(LookupIterator* it, |
| + bool& access_check_failed, |
| + LanguageMode language_mode) { |
| + access_check_failed = false; |
|
caitp (gmail)
2015/10/01 15:16:47
This alternative implementation doesn't change the
|
| + for (; it->IsFound(); it->Next()) { |
| + switch (it->state()) { |
| + case LookupIterator::NOT_FOUND: |
| + case LookupIterator::TRANSITION: |
| + UNREACHABLE(); |
| + case LookupIterator::JSPROXY: |
| + return JSProxy::GetPropertyWithHandler( |
| + it->GetHolder<JSProxy>(), it->GetReceiver(), it->GetName()); |
| + case LookupIterator::INTERCEPTOR: { |
| + bool done; |
| + Handle<Object> result; |
| + ASSIGN_RETURN_ON_EXCEPTION( |
| + it->isolate(), result, |
| + JSObject::GetPropertyWithInterceptor(it, &done), Object); |
| + if (done) return result; |
| + break; |
| + } |
| + case LookupIterator::ACCESS_CHECK: |
| + if (it->HasAccess()) break; |
| + access_check_failed = true; |
| + return it->isolate()->factory()->undefined_value(); |
| + case LookupIterator::ACCESSOR: |
| + return GetPropertyWithAccessor(it, language_mode); |
| + case LookupIterator::INTEGER_INDEXED_EXOTIC: |
| + return ReadAbsentProperty(it, language_mode); |
| + case LookupIterator::DATA: |
| + return it->GetDataValue(); |
| + } |
| + } |
| + return ReadAbsentProperty(it, language_mode); |
| +} |
| + |
| + |
| Handle<Object> JSReceiver::GetDataProperty(Handle<JSReceiver> object, |
| Handle<Name> name) { |
| LookupIterator it(object, name, |