| Index: src/lookup.cc
|
| diff --git a/src/lookup.cc b/src/lookup.cc
|
| index fa6d579122b618554de15db315a823262c5dfc52..256aa02d21cf4ffffc9487b0b2bbd6662bb07cb6 100644
|
| --- a/src/lookup.cc
|
| +++ b/src/lookup.cc
|
| @@ -842,5 +842,27 @@ Handle<InterceptorInfo> LookupIterator::GetInterceptorForFailedAccessCheck()
|
| return Handle<InterceptorInfo>();
|
| }
|
|
|
| +bool LookupIterator::TryLookupCachedProperty() {
|
| + return state() == LookupIterator::ACCESSOR &&
|
| + GetAccessors()->IsAccessorPair() && LookupCachedProperty();
|
| +}
|
| +
|
| +bool LookupIterator::LookupCachedProperty() {
|
| + DCHECK_EQ(state(), LookupIterator::ACCESSOR);
|
| + DCHECK(GetAccessors()->IsAccessorPair());
|
| +
|
| + AccessorPair* accessor_pair = AccessorPair::cast(*GetAccessors());
|
| + Handle<Object> getter(accessor_pair->getter(), isolate());
|
| + MaybeHandle<Name> maybe_name =
|
| + FunctionTemplateInfo::TryGetCachedPropertyName(isolate(), getter);
|
| + if (maybe_name.is_null()) return false;
|
| +
|
| + // We have found a cached property! Modify the iterator accordingly.
|
| + name_ = maybe_name.ToHandleChecked();
|
| + Restart();
|
| + CHECK_EQ(state(), LookupIterator::DATA);
|
| + return true;
|
| +}
|
| +
|
| } // namespace internal
|
| } // namespace v8
|
|
|