From 1cff0c498e47b5807b9aadeecea88bf7942034bb Mon Sep 17 00:00:00 2001 From: "verwaest@chromium.org" Date: Thu, 21 Jun 2012 15:32:52 +0000 Subject: [PATCH] Cleaning up usage of lookup results. - Ensure that IsFound() is only used when not in combination with other checks. To do so, the default type is NONEXISTENT rather than NORMAL; and NotFound() also resets the type to NONEXISTENT. - Use test methods rather than .type() == A_PROPERTY_TYPE. Review URL: https://chromiumcodereview.appspot.com/10626004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@11899 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/lithium-codegen-arm.cc | 4 ++-- src/arm/stub-cache-arm.cc | 4 ++-- src/bootstrapper.cc | 6 +++--- src/hydrogen.cc | 20 +++++++----------- src/ia32/lithium-codegen-ia32.cc | 7 +++---- src/ia32/stub-cache-ia32.cc | 4 ++-- src/ic.cc | 21 ++++++++----------- src/mips/lithium-codegen-mips.cc | 4 ++-- src/mips/stub-cache-mips.cc | 4 ++-- src/objects.cc | 28 +++++++++++++------------ src/property.h | 45 +++++++++++++++++++++++++++++++++++----- src/runtime.cc | 33 ++++++++++++++--------------- src/x64/lithium-codegen-x64.cc | 7 +++---- src/x64/stub-cache-x64.cc | 4 ++-- 14 files changed, 108 insertions(+), 83 deletions(-) diff --git a/src/arm/lithium-codegen-arm.cc b/src/arm/lithium-codegen-arm.cc index 43d7f9d..8cef74d 100644 --- a/src/arm/lithium-codegen-arm.cc +++ b/src/arm/lithium-codegen-arm.cc @@ -2579,7 +2579,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, LookupResult lookup(isolate()); type->LookupInDescriptors(NULL, *name, &lookup); ASSERT(lookup.IsFound() || lookup.IsCacheable()); - if (lookup.IsFound() && lookup.type() == FIELD) { + if (lookup.IsField()) { int index = lookup.GetLocalFieldIndexFromMap(*type); int offset = index * kPointerSize; if (index < 0) { @@ -2591,7 +2591,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, __ ldr(result, FieldMemOperand(object, JSObject::kPropertiesOffset)); __ ldr(result, FieldMemOperand(result, offset + FixedArray::kHeaderSize)); } - } else if (lookup.IsFound() && lookup.type() == CONSTANT_FUNCTION) { + } else if (lookup.IsConstantFunction()) { Handle function(lookup.GetConstantFunctionFromMap(*type)); __ LoadHeapObject(result, function); } else { diff --git a/src/arm/stub-cache-arm.cc b/src/arm/stub-cache-arm.cc index dd9de23..7fc8138 100644 --- a/src/arm/stub-cache-arm.cc +++ b/src/arm/stub-cache-arm.cc @@ -1303,7 +1303,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, // later. bool compile_followup_inline = false; if (lookup->IsFound() && lookup->IsCacheable()) { - if (lookup->type() == FIELD) { + if (lookup->IsField()) { compile_followup_inline = true; } else if (lookup->type() == CALLBACKS && lookup->GetCallbackObject()->IsAccessorInfo()) { @@ -1377,7 +1377,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, miss); } - if (lookup->type() == FIELD) { + if (lookup->IsField()) { // We found FIELD property in prototype chain of interceptor's holder. // Retrieve a field from field's holder. GenerateFastPropertyLoad(masm(), r0, holder_reg, diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 33cbb81..b67deae 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -1080,11 +1080,11 @@ bool Genesis::InitializeGlobal(Handle inner_global, #ifdef DEBUG LookupResult lookup(isolate); result->LocalLookup(heap->callee_symbol(), &lookup); - ASSERT(lookup.IsFound() && (lookup.type() == FIELD)); + ASSERT(lookup.IsField()); ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsCalleeIndex); result->LocalLookup(heap->length_symbol(), &lookup); - ASSERT(lookup.IsFound() && (lookup.type() == FIELD)); + ASSERT(lookup.IsField()); ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex); ASSERT(result->map()->inobject_properties() > Heap::kArgumentsCalleeIndex); @@ -1178,7 +1178,7 @@ bool Genesis::InitializeGlobal(Handle inner_global, #ifdef DEBUG LookupResult lookup(isolate); result->LocalLookup(heap->length_symbol(), &lookup); - ASSERT(lookup.IsFound() && (lookup.type() == FIELD)); + ASSERT(lookup.IsField()); ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex); ASSERT(result->map()->inobject_properties() > Heap::kArgumentsLengthIndex); diff --git a/src/hydrogen.cc b/src/hydrogen.cc index a25c6db..e91965e 100644 --- a/src/hydrogen.cc +++ b/src/hydrogen.cc @@ -4536,8 +4536,7 @@ HGraphBuilder::GlobalPropertyAccess HGraphBuilder::LookupGlobalProperty( } Handle global(info()->global_object()); global->Lookup(*var->name(), lookup); - if (!lookup->IsFound() || - lookup->type() != NORMAL || + if (!lookup->IsNormal() || (is_store && lookup->IsReadOnly()) || lookup->holder() != *global) { return kUseGeneric; @@ -4916,9 +4915,8 @@ static bool ComputeLoadStoreField(Handle type, LookupResult* lookup, bool is_store) { type->LookupInDescriptors(NULL, *name, lookup); - if (!lookup->IsFound()) return false; - if (lookup->type() == FIELD) return true; - return is_store && (lookup->type() == MAP_TRANSITION) && + if (lookup->IsField()) return true; + return is_store && lookup->IsMapTransition() && (type->unused_property_fields() > 0); } @@ -4926,8 +4924,8 @@ static bool ComputeLoadStoreField(Handle type, static int ComputeLoadStoreFieldIndex(Handle type, Handle name, LookupResult* lookup) { - ASSERT(lookup->type() == FIELD || lookup->type() == MAP_TRANSITION); - if (lookup->type() == FIELD) { + ASSERT(lookup->IsField() || lookup->type() == MAP_TRANSITION); + if (lookup->IsField()) { return lookup->GetLocalFieldIndexFromMap(*type); } else { Map* transition = lookup->GetTransitionMapFromMap(*type); @@ -5626,13 +5624,13 @@ HInstruction* HGraphBuilder::BuildLoadNamed(HValue* obj, Handle name) { LookupResult lookup(isolate()); map->LookupInDescriptors(NULL, *name, &lookup); - if (lookup.IsFound() && lookup.type() == FIELD) { + if (lookup.IsField()) { return BuildLoadNamedField(obj, expr, map, &lookup, true); - } else if (lookup.IsFound() && lookup.type() == CONSTANT_FUNCTION) { + } else if (lookup.IsConstantFunction()) { AddInstruction(new(zone()) HCheckNonSmi(obj)); AddInstruction(HCheckMaps::NewWithTransitions(obj, map, zone())); Handle function(lookup.GetConstantFunctionFromMap(*map)); @@ -8116,9 +8114,7 @@ void HGraphBuilder::VisitCompareOperation(CompareOperation* expr) { Handle global(info()->global_object()); LookupResult lookup(isolate()); global->Lookup(*name, &lookup); - if (lookup.IsFound() && - lookup.type() == NORMAL && - lookup.GetValue()->IsJSFunction()) { + if (lookup.IsNormal() && lookup.GetValue()->IsJSFunction()) { Handle candidate(JSFunction::cast(lookup.GetValue())); // If the function is in new space we assume it's more likely to // change and thus prefer the general IC code. diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc index 33f02b6..8dd58b4 100644 --- a/src/ia32/lithium-codegen-ia32.cc +++ b/src/ia32/lithium-codegen-ia32.cc @@ -2412,7 +2412,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, LookupResult lookup(isolate()); type->LookupInDescriptors(NULL, *name, &lookup); ASSERT(lookup.IsFound() || lookup.IsCacheable()); - if (lookup.IsFound() && lookup.type() == FIELD) { + if (lookup.IsField()) { int index = lookup.GetLocalFieldIndexFromMap(*type); int offset = index * kPointerSize; if (index < 0) { @@ -2424,7 +2424,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, __ mov(result, FieldOperand(object, JSObject::kPropertiesOffset)); __ mov(result, FieldOperand(result, offset + FixedArray::kHeaderSize)); } - } else if (lookup.IsFound() && lookup.type() == CONSTANT_FUNCTION) { + } else if (lookup.IsConstantFunction()) { Handle function(lookup.GetConstantFunctionFromMap(*type)); __ LoadHeapObject(result, function); } else { @@ -2469,8 +2469,7 @@ static bool CompactEmit( LookupResult lookup(isolate); Handle map = list->at(i); map->LookupInDescriptors(NULL, *name, &lookup); - return lookup.IsFound() && - (lookup.type() == FIELD || lookup.type() == CONSTANT_FUNCTION); + return lookup.IsField() || lookup.IsConstantFunction(); } diff --git a/src/ia32/stub-cache-ia32.cc b/src/ia32/stub-cache-ia32.cc index 0e4ce20..6ab5bf3 100644 --- a/src/ia32/stub-cache-ia32.cc +++ b/src/ia32/stub-cache-ia32.cc @@ -1157,7 +1157,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, // later. bool compile_followup_inline = false; if (lookup->IsFound() && lookup->IsCacheable()) { - if (lookup->type() == FIELD) { + if (lookup->IsField()) { compile_followup_inline = true; } else if (lookup->type() == CALLBACKS && lookup->GetCallbackObject()->IsAccessorInfo()) { @@ -1242,7 +1242,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, miss); } - if (lookup->type() == FIELD) { + if (lookup->IsField()) { // We found FIELD property in prototype chain of interceptor's holder. // Retrieve a field from field's holder. GenerateFastPropertyLoad(masm(), eax, holder_reg, diff --git a/src/ic.cc b/src/ic.cc index 47a72b4..bebdcee 100644 --- a/src/ic.cc +++ b/src/ic.cc @@ -435,9 +435,7 @@ static void LookupForRead(Handle object, // Besides normal conditions (property not found or it's not // an interceptor), bail out if lookup is not cacheable: we won't // be able to IC it anyway and regular lookup should work fine. - if (!lookup->IsFound() - || (lookup->type() != INTERCEPTOR) - || !lookup->IsCacheable()) { + if (!lookup->IsInterceptor() || !lookup->IsCacheable()) { return; } @@ -448,7 +446,7 @@ static void LookupForRead(Handle object, holder->LocalLookupRealNamedProperty(*name, lookup); if (lookup->IsProperty()) { - ASSERT(lookup->type() != INTERCEPTOR); + ASSERT(!lookup->IsInterceptor()); return; } @@ -554,7 +552,7 @@ MaybeObject* CallICBase::LoadFunction(State state, Object::GetProperty(object, object, &lookup, name, &attr); RETURN_IF_EMPTY_HANDLE(isolate(), result); - if (lookup.type() == INTERCEPTOR && attr == ABSENT) { + if (lookup.IsInterceptor() && attr == ABSENT) { // If the object does not have the requested property, check which // exception we need to throw. return IsContextual(object) @@ -915,8 +913,7 @@ MaybeObject* LoadIC::Load(State state, } PropertyAttributes attr; - if (lookup.IsFound() && - (lookup.type() == INTERCEPTOR || lookup.type() == HANDLER)) { + if (lookup.IsInterceptor() || lookup.IsHandler()) { // Get the property. Handle result = Object::GetProperty(object, object, &lookup, name, &attr); @@ -1177,7 +1174,7 @@ MaybeObject* KeyedLoadIC::Load(State state, } PropertyAttributes attr; - if (lookup.IsFound() && lookup.type() == INTERCEPTOR) { + if (lookup.IsInterceptor()) { // Get the property. Handle result = Object::GetProperty(object, object, &lookup, name, &attr); @@ -1321,7 +1318,7 @@ static bool LookupForWrite(Handle receiver, return false; } - if (lookup->type() == INTERCEPTOR && + if (lookup->IsInterceptor() && receiver->GetNamedInterceptor()->setter()->IsUndefined()) { receiver->LocalLookupRealNamedProperty(*name, lookup); return StoreICableLookup(lookup); @@ -1438,7 +1435,7 @@ void StoreIC::UpdateCaches(LookupResult* lookup, ASSERT(!receiver->IsJSGlobalProxy()); ASSERT(StoreICableLookup(lookup)); // These are not cacheable, so we never see such LookupResults here. - ASSERT(lookup->type() != HANDLER); + ASSERT(!lookup->IsHandler()); // We get only called for properties or transitions, see StoreICableLookup. ASSERT(lookup->type() != NULL_DESCRIPTOR); @@ -1940,7 +1937,7 @@ void KeyedStoreIC::UpdateCaches(LookupResult* lookup, ASSERT(!receiver->IsJSGlobalProxy()); ASSERT(StoreICableLookup(lookup)); // These are not cacheable, so we never see such LookupResults here. - ASSERT(lookup->type() != HANDLER); + ASSERT(!lookup->IsHandler()); // We get only called for properties or transitions, see StoreICableLookup. ASSERT(lookup->type() != NULL_DESCRIPTOR); @@ -2116,7 +2113,7 @@ RUNTIME_FUNCTION(MaybeObject*, StoreIC_ArrayLength) { // The length property has to be a writable callback property. LookupResult debug_lookup(isolate); receiver->LocalLookup(isolate->heap()->length_symbol(), &debug_lookup); - ASSERT(debug_lookup.type() == CALLBACKS && !debug_lookup.IsReadOnly()); + ASSERT(debug_lookup.IsCallbacks() && !debug_lookup.IsReadOnly()); #endif Object* result; diff --git a/src/mips/lithium-codegen-mips.cc b/src/mips/lithium-codegen-mips.cc index db88d59..584fd7a 100644 --- a/src/mips/lithium-codegen-mips.cc +++ b/src/mips/lithium-codegen-mips.cc @@ -2323,7 +2323,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, LookupResult lookup(isolate()); type->LookupInDescriptors(NULL, *name, &lookup); ASSERT(lookup.IsFound() || lookup.IsCacheable()); - if (lookup.IsFound() && lookup.type() == FIELD) { + if (lookup.IsField()) { int index = lookup.GetLocalFieldIndexFromMap(*type); int offset = index * kPointerSize; if (index < 0) { @@ -2335,7 +2335,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, __ lw(result, FieldMemOperand(object, JSObject::kPropertiesOffset)); __ lw(result, FieldMemOperand(result, offset + FixedArray::kHeaderSize)); } - } else if (lookup.IsFound() && lookup.type() == CONSTANT_FUNCTION) { + } else if (lookup.IsConstantFunction()) { Handle function(lookup.GetConstantFunctionFromMap(*type)); __ LoadHeapObject(result, function); } else { diff --git a/src/mips/stub-cache-mips.cc b/src/mips/stub-cache-mips.cc index 967ce4a..1cfa2bb 100644 --- a/src/mips/stub-cache-mips.cc +++ b/src/mips/stub-cache-mips.cc @@ -1318,7 +1318,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, // later. bool compile_followup_inline = false; if (lookup->IsFound() && lookup->IsCacheable()) { - if (lookup->type() == FIELD) { + if (lookup->IsField()) { compile_followup_inline = true; } else if (lookup->type() == CALLBACKS && lookup->GetCallbackObject()->IsAccessorInfo()) { @@ -1391,7 +1391,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, miss); } - if (lookup->type() == FIELD) { + if (lookup->IsField()) { // We found FIELD property in prototype chain of interceptor's holder. // Retrieve a field from field's holder. GenerateFastPropertyLoad(masm(), v0, holder_reg, diff --git a/src/objects.cc b/src/objects.cc index 9dbe849..1d2cd69 100644 --- a/src/objects.cc +++ b/src/objects.cc @@ -415,7 +415,10 @@ PropertyAttributes JSObject::GetPropertyAttributeWithFailedAccessCheck( break; } - default: + case HANDLER: + case MAP_TRANSITION: + case CONSTANT_TRANSITION: + case NONEXISTENT: UNREACHABLE(); } } @@ -2417,10 +2420,11 @@ void JSObject::LocalLookupRealNamedProperty(String* name, // We return all of these result types because // LocalLookupRealNamedProperty is used when setting properties // where map transitions and null descriptors are handled. - ASSERT(result->holder() == this && result->type() != NORMAL); + ASSERT(result->holder() == this && result->IsFastPropertyType()); // Disallow caching for uninitialized constants. These can only // occur as fields. - if (result->IsReadOnly() && result->type() == FIELD && + if (result->IsField() && + result->IsReadOnly() && FastPropertyAt(result->GetFieldIndex())->IsTheHole()) { result->DisallowCaching(); } @@ -2537,7 +2541,7 @@ MaybeObject* JSReceiver::SetProperty(LookupResult* result, PropertyAttributes attributes, StrictModeFlag strict_mode, JSReceiver::StoreFromKeyed store_mode) { - if (result->IsFound() && result->type() == HANDLER) { + if (result->IsHandler()) { return result->proxy()->SetPropertyWithHandler( this, key, value, attributes, strict_mode); } else { @@ -3908,7 +3912,7 @@ MaybeObject* JSObject::DeleteProperty(String* name, DeleteMode mode) { return isolate->heap()->false_value(); } // Check for interceptor. - if (result.type() == INTERCEPTOR) { + if (result.IsInterceptor()) { // Skip interceptor if forcing a deletion. if (mode == FORCE_DELETION) { return DeletePropertyPostInterceptor(name, mode); @@ -4267,7 +4271,7 @@ void JSObject::LookupCallback(String* name, LookupResult* result) { current != heap->null_value() && current->IsJSObject(); current = JSObject::cast(current)->GetPrototype()) { JSObject::cast(current)->LocalLookupRealNamedProperty(name, result); - if (result->IsFound() && result->type() == CALLBACKS) return; + if (result->IsCallbacks()) return; } result->NotFound(); } @@ -4370,7 +4374,7 @@ MaybeObject* JSObject::DefineElementAccessor(uint32_t index, MaybeObject* JSObject::CreateAccessorPairFor(String* name) { LookupResult result(GetHeap()->isolate()); LocalLookupRealNamedProperty(name, &result); - if (result.IsProperty() && result.type() == CALLBACKS) { + if (result.IsProperty() && result.IsCallbacks()) { // Note that the result can actually have IsDontDelete() == true when we // e.g. have to fall back to the slow case while adding a setter after // successfully reusing a map transition for a getter. Nevertheless, this is @@ -4840,7 +4844,7 @@ Object* JSObject::LookupAccessor(String* name, AccessorComponent component) { JSObject::cast(obj)->LocalLookup(name, &result); if (result.IsProperty()) { if (result.IsReadOnly()) return heap->undefined_value(); - if (result.type() == CALLBACKS) { + if (result.IsCallbacks()) { Object* obj = result.GetCallbackObject(); if (obj->IsAccessorPair()) { return AccessorPair::cast(obj)->GetComponent(component); @@ -7788,9 +7792,7 @@ bool SharedFunctionInfo::CanGenerateInlineConstructor(Object* prototype) { LookupResult result(heap->isolate()); String* name = GetThisPropertyAssignmentName(i); js_object->LocalLookupRealNamedProperty(name, &result); - if (result.IsFound() && result.type() == CALLBACKS) { - return false; - } + if (result.IsCallbacks()) return false; } } @@ -10385,7 +10387,7 @@ bool JSObject::HasRealNamedProperty(String* key) { LookupResult result(isolate); LocalLookupRealNamedProperty(key, &result); - return result.IsProperty() && (result.type() != INTERCEPTOR); + return result.IsProperty() && !result.IsInterceptor(); } @@ -10465,7 +10467,7 @@ bool JSObject::HasRealNamedCallbackProperty(String* key) { LookupResult result(isolate); LocalLookupRealNamedProperty(key, &result); - return result.IsFound() && (result.type() == CALLBACKS); + return result.IsCallbacks(); } diff --git a/src/property.h b/src/property.h index aa851f1..55c72ba 100644 --- a/src/property.h +++ b/src/property.h @@ -189,7 +189,7 @@ class LookupResult BASE_EMBEDDED { lookup_type_(NOT_FOUND), holder_(NULL), cacheable_(true), - details_(NONE, NORMAL) { + details_(NONE, NONEXISTENT) { isolate->SetTopLookupResult(this); } @@ -237,6 +237,7 @@ class LookupResult BASE_EMBEDDED { void NotFound() { lookup_type_ = NOT_FOUND; + details_ = PropertyDetails(NONE, NONEXISTENT); holder_ = NULL; } @@ -264,12 +265,47 @@ class LookupResult BASE_EMBEDDED { return details_; } - bool IsReadOnly() { return details_.IsReadOnly(); } + bool IsFastPropertyType() { + ASSERT(IsFound()); + return type() != NORMAL; + } + + bool IsReadOnly() { + ASSERT(IsFound()); + return details_.IsReadOnly(); + } + + bool IsCallbacks() { + ASSERT(!(details_.type() == CALLBACKS && !IsFound())); + return details_.type() == CALLBACKS; + } + + bool IsField() { + ASSERT(!(details_.type() == FIELD && !IsFound())); + return details_.type() == FIELD; + } + + bool IsNormal() { + ASSERT(!(details_.type() == NORMAL && !IsFound())); + return details_.type() == NORMAL; + } + + bool IsConstantFunction() { + ASSERT(!(details_.type() == CONSTANT_FUNCTION && !IsFound())); + return details_.type() == CONSTANT_FUNCTION; + } + + bool IsMapTransition() { + ASSERT(!(details_.type() == MAP_TRANSITION && !IsFound())); + return details_.type() == MAP_TRANSITION; + } + bool IsDontDelete() { return details_.IsDontDelete(); } bool IsDontEnum() { return details_.IsDontEnum(); } bool IsDeleted() { return details_.IsDeleted(); } bool IsFound() { return lookup_type_ != NOT_FOUND; } bool IsHandler() { return lookup_type_ == HANDLER_TYPE; } + bool IsInterceptor() { return lookup_type_ == INTERCEPTOR_TYPE; } // Is the result is a property excluding transitions and the null descriptor? bool IsProperty() { @@ -298,7 +334,6 @@ class LookupResult BASE_EMBEDDED { } } - Map* GetTransitionMap() { ASSERT(lookup_type_ == DESCRIPTOR_TYPE); ASSERT(type() == MAP_TRANSITION || @@ -314,13 +349,13 @@ class LookupResult BASE_EMBEDDED { int GetFieldIndex() { ASSERT(lookup_type_ == DESCRIPTOR_TYPE); - ASSERT(type() == FIELD); + ASSERT(IsField()); return Descriptor::IndexFromValue(GetValue()); } int GetLocalFieldIndexFromMap(Map* map) { ASSERT(lookup_type_ == DESCRIPTOR_TYPE); - ASSERT(type() == FIELD); + ASSERT(IsField()); return Descriptor::IndexFromValue( map->instance_descriptors()->GetValue(number_)) - map->inobject_properties(); diff --git a/src/runtime.cc b/src/runtime.cc index fadb511..df8e8d7 100644 --- a/src/runtime.cc +++ b/src/runtime.cc @@ -1115,7 +1115,7 @@ static MaybeObject* GetOwnProperty(Isolate* isolate, elms->set(ENUMERABLE_INDEX, heap->ToBoolean(!result.IsDontEnum())); elms->set(CONFIGURABLE_INDEX, heap->ToBoolean(!result.IsDontDelete())); - bool is_js_accessor = (result.type() == CALLBACKS) && + bool is_js_accessor = result.IsCallbacks() && (result.GetCallbackObject()->IsAccessorPair()); if (is_js_accessor) { @@ -1328,7 +1328,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { if (lookup.IsProperty()) { // We found an existing property. Unless it was an interceptor // that claims the property is absent, skip this declaration. - if (lookup.type() != INTERCEPTOR) continue; + if (!lookup.IsInterceptor()) continue; PropertyAttributes attributes = global->GetPropertyAttribute(*name); if (attributes != ABSENT) continue; // Fall-through and introduce the absent property by using @@ -1366,7 +1366,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareGlobals) { // as required for function declarations. if (lookup.IsProperty() && lookup.IsDontDelete()) { if (lookup.IsReadOnly() || lookup.IsDontEnum() || - lookup.type() == CALLBACKS) { + lookup.IsCallbacks()) { return ThrowRedeclarationError( isolate, is_function ? "function" : "module", name); } @@ -1475,7 +1475,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DeclareContextSlot) { !object->IsJSContextExtensionObject()) { LookupResult lookup(isolate); object->Lookup(*name, &lookup); - if (lookup.IsFound() && (lookup.type() == CALLBACKS)) { + if (lookup.IsCallbacks()) { return ThrowRedeclarationError(isolate, "const", name); } } @@ -1528,7 +1528,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeVarGlobal) { JSObject::cast(object)->map()->is_hidden_prototype()) { JSObject* raw_holder = JSObject::cast(object); raw_holder->LocalLookup(*name, &lookup); - if (lookup.IsFound() && lookup.type() == INTERCEPTOR) { + if (lookup.IsInterceptor()) { HandleScope handle_scope(isolate); Handle holder(raw_holder); PropertyAttributes intercepted = holder->GetPropertyAttribute(*name); @@ -1606,14 +1606,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { // constant. For now, we determine this by checking if the // current value is the hole. // Strict mode handling not needed (const is disallowed in strict mode). - PropertyType type = lookup.type(); - if (type == FIELD) { + if (lookup.IsField()) { FixedArray* properties = global->properties(); int index = lookup.GetFieldIndex(); if (properties->get(index)->IsTheHole() || !lookup.IsReadOnly()) { properties->set(index, *value); } - } else if (type == NORMAL) { + } else if (lookup.IsNormal()) { if (global->GetNormalizedProperty(&lookup)->IsTheHole() || !lookup.IsReadOnly()) { global->SetNormalizedProperty(&lookup, *value); @@ -1621,7 +1620,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstGlobal) { } else { // Ignore re-initialization of constants that have already been // assigned a function value. - ASSERT(lookup.IsReadOnly() && type == CONSTANT_FUNCTION); + ASSERT(lookup.IsReadOnly() && lookup.IsConstantFunction()); } // Use the set value as the result of the operation. @@ -1697,14 +1696,13 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_InitializeConstContextSlot) { ASSERT(lookup.IsFound()); // the property was declared ASSERT(lookup.IsReadOnly()); // and it was declared as read-only - PropertyType type = lookup.type(); - if (type == FIELD) { + if (lookup.IsField()) { FixedArray* properties = object->properties(); int index = lookup.GetFieldIndex(); if (properties->get(index)->IsTheHole()) { properties->set(index, *value); } - } else if (type == NORMAL) { + } else if (lookup.IsNormal()) { if (object->GetNormalizedProperty(&lookup)->IsTheHole()) { object->SetNormalizedProperty(&lookup, *value); } @@ -4373,7 +4371,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_KeyedGetProperty) { // appropriate. LookupResult result(isolate); receiver->LocalLookup(key, &result); - if (result.IsFound() && result.type() == FIELD) { + if (result.IsField()) { int offset = result.GetFieldIndex(); keyed_lookup_cache->Update(receiver_map, key, offset); return receiver->FastPropertyAt(offset); @@ -4485,7 +4483,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { js_object->LocalLookupRealNamedProperty(*name, &result); // Special case for callback properties. - if (result.IsFound() && result.type() == CALLBACKS) { + if (result.IsCallbacks()) { Object* callback = result.GetCallbackObject(); // To be compatible with Safari we do not change the value on API objects // in Object.defineProperty(). Firefox disagrees here, and actually changes @@ -4513,7 +4511,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DefineOrRedefineDataProperty) { // correctly in the case where a property is a field and is reset with // new attributes. if (result.IsProperty() && - (attr != result.GetAttributes() || result.type() == CALLBACKS)) { + (attr != result.GetAttributes() || result.IsCallbacks())) { // New attributes - normalize to avoid writing to instance descriptor if (js_object->IsJSGlobalProxy()) { // Since the result is a property, the prototype will exist so @@ -10365,9 +10363,8 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPropertyDetails) { // LookupResult is not GC safe as it holds raw object pointers. // GC can happen later in this code so put the required fields into // local variables using handles when required for later use. - PropertyType result_type = result.type(); Handle result_callback_obj; - if (result_type == CALLBACKS) { + if (result.IsCallbacks()) { result_callback_obj = Handle(result.GetCallbackObject(), isolate); } @@ -10385,7 +10382,7 @@ RUNTIME_FUNCTION(MaybeObject*, Runtime_DebugGetPropertyDetails) { // If the callback object is a fixed array then it contains JavaScript // getter and/or setter. - bool hasJavaScriptAccessors = result_type == CALLBACKS && + bool hasJavaScriptAccessors = result.IsCallbacks() && result_callback_obj->IsAccessorPair(); Handle details = isolate->factory()->NewFixedArray(hasJavaScriptAccessors ? 5 : 2); diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc index 5d4316a..06d0412 100644 --- a/src/x64/lithium-codegen-x64.cc +++ b/src/x64/lithium-codegen-x64.cc @@ -2286,7 +2286,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, LookupResult lookup(isolate()); type->LookupInDescriptors(NULL, *name, &lookup); ASSERT(lookup.IsFound() || lookup.IsCacheable()); - if (lookup.IsFound() && lookup.type() == FIELD) { + if (lookup.IsField()) { int index = lookup.GetLocalFieldIndexFromMap(*type); int offset = index * kPointerSize; if (index < 0) { @@ -2298,7 +2298,7 @@ void LCodeGen::EmitLoadFieldOrConstantFunction(Register result, __ movq(result, FieldOperand(object, JSObject::kPropertiesOffset)); __ movq(result, FieldOperand(result, offset + FixedArray::kHeaderSize)); } - } else if (lookup.IsFound() && lookup.type() == CONSTANT_FUNCTION) { + } else if (lookup.IsConstantFunction()) { Handle function(lookup.GetConstantFunctionFromMap(*type)); __ LoadHeapObject(result, function); } else { @@ -2326,8 +2326,7 @@ static bool CompactEmit( LookupResult lookup(isolate); Handle map = list->at(i); map->LookupInDescriptors(NULL, *name, &lookup); - return lookup.IsFound() && - (lookup.type() == FIELD || lookup.type() == CONSTANT_FUNCTION); + return lookup.IsField() || lookup.IsConstantFunction(); } diff --git a/src/x64/stub-cache-x64.cc b/src/x64/stub-cache-x64.cc index a6acd97..4040e95 100644 --- a/src/x64/stub-cache-x64.cc +++ b/src/x64/stub-cache-x64.cc @@ -1143,7 +1143,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, // later. bool compile_followup_inline = false; if (lookup->IsFound() && lookup->IsCacheable()) { - if (lookup->type() == FIELD) { + if (lookup->IsField()) { compile_followup_inline = true; } else if (lookup->type() == CALLBACKS && lookup->GetCallbackObject()->IsAccessorInfo()) { @@ -1221,7 +1221,7 @@ void StubCompiler::GenerateLoadInterceptor(Handle object, miss); } - if (lookup->type() == FIELD) { + if (lookup->IsField()) { // We found FIELD property in prototype chain of interceptor's holder. // Retrieve a field from field's holder. GenerateFastPropertyLoad(masm(), rax, holder_reg, -- 2.7.4