Remove LookupTransitionOrDescriptor altogether.
Review URL: https://chromiumcodereview.appspot.com/10778011 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@12100 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
77ccfe895c
commit
7cb94437cb
@ -2579,7 +2579,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result,
|
||||
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);
|
||||
|
@ -1689,13 +1689,9 @@ static bool PrototypeChainCanNeverResolve(
|
||||
|
||||
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;
|
||||
@ -1720,7 +1716,7 @@ HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context,
|
||||
++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: {
|
||||
@ -1739,10 +1735,6 @@ HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context,
|
||||
case CALLBACKS:
|
||||
break;
|
||||
case TRANSITION:
|
||||
if (PrototypeChainCanNeverResolve(map, name)) {
|
||||
negative_lookups.Add(types->at(i), zone);
|
||||
}
|
||||
break;
|
||||
case INTERCEPTOR:
|
||||
case NONEXISTENT:
|
||||
case NORMAL:
|
||||
@ -1750,10 +1742,9 @@ HLoadNamedFieldPolymorphic::HLoadNamedFieldPolymorphic(HValue* context,
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2410,7 +2410,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result,
|
||||
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);
|
||||
|
@ -2150,20 +2150,6 @@ void Map::LookupTransition(JSObject* holder,
|
||||
}
|
||||
|
||||
|
||||
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) {
|
||||
@ -4202,8 +4188,7 @@ void JSReceiver::LocalLookup(String* name, LookupResult* result) {
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
@ -12545,10 +12530,9 @@ MaybeObject* StringDictionary::TransformPropertiesToFastFor(
|
||||
|
||||
// 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;
|
||||
|
@ -4905,10 +4905,6 @@ class Map: public HeapObject {
|
||||
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();
|
||||
|
Loading…
Reference in New Issue
Block a user