diff --git a/src/objects-inl.h b/src/objects-inl.h index 176be9b6ed..bc6217ba5e 100644 --- a/src/objects-inl.h +++ b/src/objects-inl.h @@ -1988,8 +1988,7 @@ AccessorDescriptor* DescriptorArray::GetCallbacks(int descriptor_number) { bool DescriptorArray::IsProperty(int descriptor_number) { - Entry entry(this, descriptor_number); - return IsPropertyDescriptor(&entry); + return IsRealProperty(GetType(descriptor_number)); } diff --git a/src/objects.h b/src/objects.h index 4e02d6f19f..be75faba65 100644 --- a/src/objects.h +++ b/src/objects.h @@ -2589,20 +2589,6 @@ class DescriptorArray: public FixedArray { static const int kMaxNumberOfDescriptors = 1024 + 512; private: - // An entry in a DescriptorArray, represented as an (array, index) pair. - class Entry { - public: - inline explicit Entry(DescriptorArray* descs, int index) : - descs_(descs), index_(index) { } - - inline PropertyType type() { return descs_->GetType(index_); } - inline Object* GetCallbackObject() { return descs_->GetValue(index_); } - - private: - DescriptorArray* descs_; - int index_; - }; - // Conversion from descriptor number to array indices. static int ToKeyIndex(int descriptor_number) { return descriptor_number+kFirstIndex; @@ -7933,10 +7919,6 @@ class AccessorPair: public Struct { } } - bool ContainsAccessor() { - return IsJSAccessor(getter()) || IsJSAccessor(setter()); - } - #ifdef OBJECT_PRINT void AccessorPairPrint(FILE* out = stdout); #endif @@ -7949,15 +7931,6 @@ class AccessorPair: public Struct { static const int kSize = kSetterOffset + kPointerSize; private: - // Strangely enough, in addition to functions and harmony proxies, the spec - // requires us to consider undefined as a kind of accessor, too: - // var obj = {}; - // Object.defineProperty(obj, "foo", {get: undefined}); - // assertTrue("foo" in obj); - bool IsJSAccessor(Object* obj) { - return obj->IsSpecFunction() || obj->IsUndefined(); - } - DISALLOW_IMPLICIT_CONSTRUCTORS(AccessorPair); }; diff --git a/src/property-details.h b/src/property-details.h index c79aa969d3..81f521a627 100644 --- a/src/property-details.h +++ b/src/property-details.h @@ -73,6 +73,26 @@ enum PropertyType { }; +inline bool IsRealProperty(PropertyType type) { + switch (type) { + case NORMAL: + case FIELD: + case CONSTANT_FUNCTION: + case CALLBACKS: + case HANDLER: + case INTERCEPTOR: + return true; + case MAP_TRANSITION: + case ELEMENTS_TRANSITION: + case CONSTANT_TRANSITION: + case NULL_DESCRIPTOR: + return false; + } + UNREACHABLE(); // keep the compiler happy + return false; +} + + // PropertyDetails captures type and attributes for a property. // They are used both in property dictionaries and instance descriptors. class PropertyDetails BASE_EMBEDDED { diff --git a/src/property.h b/src/property.h index 9235c3287d..d5efb7f351 100644 --- a/src/property.h +++ b/src/property.h @@ -164,35 +164,6 @@ class CallbacksDescriptor: public Descriptor { }; -template -bool IsPropertyDescriptor(T* desc) { - switch (desc->type()) { - case NORMAL: - case FIELD: - case CONSTANT_FUNCTION: - case HANDLER: - case INTERCEPTOR: - return true; - case CALLBACKS: { - Object* callback_object = desc->GetCallbackObject(); - // Non-JavaScript (i.e. native) accessors are always a property, otherwise - // either the getter or the setter must be an accessor. Put another way: - // If we only see map transitions and holes in a pair, this is not a - // property. - return (!callback_object->IsAccessorPair() || - AccessorPair::cast(callback_object)->ContainsAccessor()); - } - case MAP_TRANSITION: - case ELEMENTS_TRANSITION: - case CONSTANT_TRANSITION: - case NULL_DESCRIPTOR: - return false; - } - UNREACHABLE(); // keep the compiler happy - return false; -} - - class LookupResult BASE_EMBEDDED { public: explicit LookupResult(Isolate* isolate) @@ -290,9 +261,10 @@ class LookupResult BASE_EMBEDDED { bool IsFound() { return lookup_type_ != NOT_FOUND; } bool IsHandler() { return lookup_type_ == HANDLER_TYPE; } - // Is the result is a property excluding transitions and the null descriptor? + // Is the result is a property excluding transitions and the null + // descriptor? bool IsProperty() { - return IsFound() && IsPropertyDescriptor(this); + return IsFound() && IsRealProperty(GetPropertyDetails().type()); } bool IsCacheable() { return cacheable_; }