| Index: src/ic/handler-compiler.cc
|
| diff --git a/src/ic/handler-compiler.cc b/src/ic/handler-compiler.cc
|
| index 5c747c10ff2055d4391d620e802e2d8307816e6f..21a653e7b61e126bb9a477a65a729aa5d29a5422 100644
|
| --- a/src/ic/handler-compiler.cc
|
| +++ b/src/ic/handler-compiler.cc
|
| @@ -225,22 +225,28 @@ Handle<Code> NamedLoadHandlerCompiler::CompileLoadInterceptor(
|
| // So far the most popular follow ups for interceptor loads are FIELD and
|
| // ExecutableAccessorInfo, so inline only them. Other cases may be added
|
| // later.
|
| - bool inline_followup = it->state() == LookupIterator::PROPERTY;
|
| - if (inline_followup) {
|
| - switch (it->property_kind()) {
|
| - case LookupIterator::DATA:
|
| - inline_followup = it->property_details().type() == FIELD;
|
| - break;
|
| - case LookupIterator::ACCESSOR: {
|
| - Handle<Object> accessors = it->GetAccessors();
|
| - inline_followup = accessors->IsExecutableAccessorInfo();
|
| - if (!inline_followup) break;
|
| - Handle<ExecutableAccessorInfo> info =
|
| - Handle<ExecutableAccessorInfo>::cast(accessors);
|
| - inline_followup = info->getter() != NULL &&
|
| - ExecutableAccessorInfo::IsCompatibleReceiverType(
|
| - isolate(), info, type());
|
| - }
|
| + bool inline_followup = false;
|
| + switch (it->state()) {
|
| + case LookupIterator::TRANSITION:
|
| + case LookupIterator::UNKNOWN:
|
| + UNREACHABLE();
|
| + case LookupIterator::ACCESS_CHECK:
|
| + case LookupIterator::INTERCEPTOR:
|
| + case LookupIterator::JSPROXY:
|
| + case LookupIterator::NOT_FOUND:
|
| + break;
|
| + case LookupIterator::DATA:
|
| + inline_followup = it->property_details().type() == FIELD;
|
| + break;
|
| + case LookupIterator::ACCESSOR: {
|
| + Handle<Object> accessors = it->GetAccessors();
|
| + inline_followup = accessors->IsExecutableAccessorInfo();
|
| + if (!inline_followup) break;
|
| + Handle<ExecutableAccessorInfo> info =
|
| + Handle<ExecutableAccessorInfo>::cast(accessors);
|
| + inline_followup = info->getter() != NULL &&
|
| + ExecutableAccessorInfo::IsCompatibleReceiverType(
|
| + isolate(), info, type());
|
| }
|
| }
|
|
|
| @@ -264,7 +270,14 @@ void NamedLoadHandlerCompiler::GenerateLoadPostInterceptor(
|
| set_holder(real_named_property_holder);
|
| Register reg = Frontend(interceptor_reg, it->name());
|
|
|
| - switch (it->property_kind()) {
|
| + switch (it->state()) {
|
| + case LookupIterator::ACCESS_CHECK:
|
| + case LookupIterator::INTERCEPTOR:
|
| + case LookupIterator::JSPROXY:
|
| + case LookupIterator::NOT_FOUND:
|
| + case LookupIterator::TRANSITION:
|
| + case LookupIterator::UNKNOWN:
|
| + UNREACHABLE();
|
| case LookupIterator::DATA: {
|
| DCHECK_EQ(FIELD, it->property_details().type());
|
| __ Move(receiver(), reg);
|
|
|