mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.7 KiB
68 lines
1.7 KiB
// Copyright 2014 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef V8_LOOKUP_INL_H_
|
|
#define V8_LOOKUP_INL_H_
|
|
|
|
#include "src/lookup.h"
|
|
|
|
namespace v8 {
|
|
namespace internal {
|
|
|
|
|
|
JSReceiver* LookupIterator::NextHolder(Map* map) {
|
|
DisallowHeapAllocation no_gc;
|
|
if (map->prototype()->IsNull()) return NULL;
|
|
|
|
JSReceiver* next = JSReceiver::cast(map->prototype());
|
|
DCHECK(!next->map()->IsGlobalObjectMap() ||
|
|
next->map()->is_hidden_prototype());
|
|
|
|
if (!check_derived() &&
|
|
!(check_hidden() && next->map()->is_hidden_prototype())) {
|
|
return NULL;
|
|
}
|
|
|
|
return next;
|
|
}
|
|
|
|
|
|
LookupIterator::State LookupIterator::LookupInHolder(Map* map) {
|
|
DisallowHeapAllocation no_gc;
|
|
switch (state_) {
|
|
case NOT_FOUND:
|
|
if (map->IsJSProxyMap()) {
|
|
return JSPROXY;
|
|
}
|
|
if (check_access_check() && map->is_access_check_needed()) {
|
|
return ACCESS_CHECK;
|
|
}
|
|
// Fall through.
|
|
case ACCESS_CHECK:
|
|
if (check_interceptor() && map->has_named_interceptor()) {
|
|
return INTERCEPTOR;
|
|
}
|
|
// Fall through.
|
|
case INTERCEPTOR:
|
|
if (map->is_dictionary_map()) {
|
|
property_encoding_ = DICTIONARY;
|
|
} else {
|
|
DescriptorArray* descriptors = map->instance_descriptors();
|
|
number_ = descriptors->SearchWithCache(*name_, map);
|
|
if (number_ == DescriptorArray::kNotFound) return NOT_FOUND;
|
|
property_encoding_ = DESCRIPTOR;
|
|
}
|
|
return PROPERTY;
|
|
case PROPERTY:
|
|
return NOT_FOUND;
|
|
case JSPROXY:
|
|
UNREACHABLE();
|
|
}
|
|
UNREACHABLE();
|
|
return state_;
|
|
}
|
|
}
|
|
} // namespace v8::internal
|
|
|
|
#endif // V8_LOOKUP_INL_H_
|
|
|