Handle<String> name,
LEnvironment* env) {
LookupResult lookup(isolate());
- type->LookupTransitionOrDescriptor(NULL, *name, &lookup);
+ type->LookupDescriptor(NULL, *name, &lookup);
ASSERT(lookup.IsFound() || lookup.IsCacheable());
if (lookup.IsField()) {
int index = lookup.GetLocalFieldIndexFromMap(*type);
LookupResult lookup(isolate);
Map* map = JSObject::cast(current)->map();
- map->LookupTransitionOrDescriptor(NULL, *name, &lookup);
- if (lookup.IsFound()) {
- if (!lookup.IsTransition()) return false;
- } else if (!lookup.IsCacheable()) {
- return false;
- }
-
+ map->LookupDescriptor(NULL, *name, &lookup);
+ if (lookup.IsFound()) return false;
+ if (!lookup.IsCacheable()) return false;
current = JSObject::cast(current)->GetPrototype();
}
return true;
++i) {
Handle<Map> map = types->at(i);
LookupResult lookup(map->GetIsolate());
- map->LookupTransitionOrDescriptor(NULL, *name, &lookup);
+ map->LookupDescriptor(NULL, *name, &lookup);
if (lookup.IsFound()) {
switch (lookup.type()) {
case FIELD: {
case CALLBACKS:
break;
case TRANSITION:
- if (PrototypeChainCanNeverResolve(map, name)) {
- negative_lookups.Add(types->at(i), zone);
- }
- break;
case INTERCEPTOR:
case NONEXISTENT:
case NORMAL:
UNREACHABLE();
break;
}
- } else if (lookup.IsCacheable()) {
- if (PrototypeChainCanNeverResolve(map, name)) {
- negative_lookups.Add(types->at(i), zone);
- }
+ } else if (lookup.IsCacheable() &&
+ PrototypeChainCanNeverResolve(map, name)) {
+ negative_lookups.Add(types->at(i), zone);
}
}
Handle<String> name,
LEnvironment* env) {
LookupResult lookup(isolate());
- type->LookupTransitionOrDescriptor(NULL, *name, &lookup);
+ type->LookupDescriptor(NULL, *name, &lookup);
ASSERT(lookup.IsFound() || lookup.IsCacheable());
if (lookup.IsField()) {
int index = lookup.GetLocalFieldIndexFromMap(*type);
}
-void Map::LookupTransitionOrDescriptor(JSObject* holder,
- String* name,
- LookupResult* result) {
- // AccessorPairs containing both a Descriptor and a Transition are shared
- // between the DescriptorArray and the Transition array. This is why looking
- // up the AccessorPair solely in the DescriptorArray works.
- // TODO(verwaest) This should be implemented differently so the
- // DescriptorArray is free of transitions; and so we can freely share it.
- this->LookupDescriptor(holder, name, result);
- if (result->IsFound()) return;
- this->LookupTransition(holder, name, result);
-}
-
-
static bool ContainsMap(MapHandleList* maps, Handle<Map> map) {
ASSERT(!map.is_null());
for (int i = 0; i < maps->length(); ++i) {
}
-void JSReceiver::Lookup(String* name,
- LookupResult* result) {
+void JSReceiver::Lookup(String* name, LookupResult* result) {
// Ecma-262 3rd 8.6.2.4
Heap* heap = GetHeap();
for (Object* current = this;
// Allocate the fixed array for the fields.
Object* fields;
- { MaybeObject* maybe_fields =
- heap->AllocateFixedArray(number_of_allocated_fields);
- if (!maybe_fields->ToObject(&fields)) return maybe_fields;
- }
+ MaybeObject* maybe_fields =
+ heap->AllocateFixedArray(number_of_allocated_fields);
+ if (!maybe_fields->ToObject(&fields)) return maybe_fields;
// Fill in the instance descriptor and the fields.
int next_descriptor = 0;
String* name,
LookupResult* result);
- void LookupTransitionOrDescriptor(JSObject* holder,
- String* name,
- LookupResult* result);
-
MUST_USE_RESULT MaybeObject* RawCopy(int instance_size);
MUST_USE_RESULT MaybeObject* CopyWithPreallocatedFieldDescriptors();
MUST_USE_RESULT MaybeObject* CopyDropDescriptors();