Revert "Handle CALLBACKS correctly in IsProperty functions."
This reverts r10847. Review URL: https://chromiumcodereview.appspot.com/9536010 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10868 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
a6963cdf7e
commit
ea62dca70e
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
@ -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);
|
||||
};
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -164,35 +164,6 @@ class CallbacksDescriptor: public Descriptor {
|
||||
};
|
||||
|
||||
|
||||
template <class T>
|
||||
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_; }
|
||||
|
Loading…
Reference in New Issue
Block a user