| Index: src/lookup-inl.h
|
| diff --git a/src/lookup-inl.h b/src/lookup-inl.h
|
| index 03fbac02c5f3e09a3dbf88e959224d1250fed377..ae09b545d9095dea90b9c44efea0b51af428aeee 100644
|
| --- a/src/lookup-inl.h
|
| +++ b/src/lookup-inl.h
|
| @@ -31,10 +31,13 @@ JSReceiver* LookupIterator::NextHolder(Map* map) {
|
| }
|
|
|
|
|
| -LookupIterator::State LookupIterator::LookupInHolder(Map* map,
|
| - JSReceiver* holder) {
|
| +LookupIterator::State LookupIterator::LookupInHolder(Map* const map,
|
| + JSReceiver* const holder) {
|
| STATIC_ASSERT(INTERCEPTOR == BEFORE_PROPERTY);
|
| DisallowHeapAllocation no_gc;
|
| + if (interceptor_state_ == InterceptorState::kProcessNonMasking) {
|
| + return LookupNonMaskingInterceptorInHolder(map, holder);
|
| + }
|
| switch (state_) {
|
| case NOT_FOUND:
|
| if (map->IsJSProxyMap()) return JSPROXY;
|
| @@ -48,7 +51,8 @@ LookupIterator::State LookupIterator::LookupInHolder(Map* map,
|
| IsIntegerIndexedExotic(holder)) {
|
| return INTEGER_INDEXED_EXOTIC;
|
| }
|
| - if (check_interceptor() && map->has_named_interceptor()) {
|
| + if (check_interceptor() && map->has_named_interceptor() &&
|
| + !SkipInterceptor(JSObject::cast(holder))) {
|
| return INTERCEPTOR;
|
| }
|
| // Fall through.
|
| @@ -86,6 +90,23 @@ LookupIterator::State LookupIterator::LookupInHolder(Map* map,
|
| UNREACHABLE();
|
| return state_;
|
| }
|
| +
|
| +
|
| +LookupIterator::State LookupIterator::LookupNonMaskingInterceptorInHolder(
|
| + Map* const map, JSReceiver* const holder) {
|
| + switch (state_) {
|
| + case NOT_FOUND:
|
| + if (check_interceptor() && map->has_named_interceptor() &&
|
| + !SkipInterceptor(JSObject::cast(holder))) {
|
| + return INTERCEPTOR;
|
| + }
|
| + // Fall through.
|
| + default:
|
| + return NOT_FOUND;
|
| + }
|
| + UNREACHABLE();
|
| + return state_;
|
| +}
|
| }
|
| } // namespace v8::internal
|
|
|
|
|