diff options
Diffstat (limited to 'Source/JavaScriptCore/runtime/PropertyDescriptor.h')
| -rw-r--r-- | Source/JavaScriptCore/runtime/PropertyDescriptor.h | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/Source/JavaScriptCore/runtime/PropertyDescriptor.h b/Source/JavaScriptCore/runtime/PropertyDescriptor.h index 2cc95fb21..0345b4e4a 100644 --- a/Source/JavaScriptCore/runtime/PropertyDescriptor.h +++ b/Source/JavaScriptCore/runtime/PropertyDescriptor.h @@ -29,68 +29,72 @@ #include "JSCJSValue.h" namespace JSC { - class GetterSetter; - // See ES5.1 9.12 - bool sameValue(ExecState*, JSValue, JSValue); +class GetterSetter; - class PropertyDescriptor { - public: - PropertyDescriptor() - : m_attributes(defaultAttributes) - , m_seenAttributes(0) - { - } - PropertyDescriptor(JSValue value, unsigned attributes) - : m_value(value) - , m_attributes(attributes) - , m_seenAttributes(EnumerablePresent | ConfigurablePresent | WritablePresent) - { - ASSERT(m_value); - ASSERT(!m_value.isGetterSetter()); - } - JS_EXPORT_PRIVATE bool writable() const; - JS_EXPORT_PRIVATE bool enumerable() const; - JS_EXPORT_PRIVATE bool configurable() const; - JS_EXPORT_PRIVATE bool isDataDescriptor() const; - bool isGenericDescriptor() const; - JS_EXPORT_PRIVATE bool isAccessorDescriptor() const; - unsigned attributes() const { return m_attributes; } - JSValue value() const { return m_value; } - JS_EXPORT_PRIVATE JSValue getter() const; - JS_EXPORT_PRIVATE JSValue setter() const; - JSObject* getterObject() const; - JSObject* setterObject() const; - JS_EXPORT_PRIVATE void setUndefined(); - JS_EXPORT_PRIVATE void setDescriptor(JSValue value, unsigned attributes); - JS_EXPORT_PRIVATE void setAccessorDescriptor(GetterSetter* accessor, unsigned attributes); - JS_EXPORT_PRIVATE void setWritable(bool); - JS_EXPORT_PRIVATE void setEnumerable(bool); - JS_EXPORT_PRIVATE void setConfigurable(bool); - void setValue(JSValue value) { m_value = value; } - JS_EXPORT_PRIVATE void setSetter(JSValue); - JS_EXPORT_PRIVATE void setGetter(JSValue); - bool isEmpty() const { return !(m_value || m_getter || m_setter || m_seenAttributes); } - bool writablePresent() const { return m_seenAttributes & WritablePresent; } - bool enumerablePresent() const { return m_seenAttributes & EnumerablePresent; } - bool configurablePresent() const { return m_seenAttributes & ConfigurablePresent; } - bool setterPresent() const { return m_setter; } - bool getterPresent() const { return m_getter; } - bool equalTo(ExecState* exec, const PropertyDescriptor& other) const; - bool attributesEqual(const PropertyDescriptor& other) const; - unsigned attributesOverridingCurrent(const PropertyDescriptor& current) const; +// See ES5.1 9.12 +bool sameValue(ExecState*, JSValue, JSValue); + +class PropertyDescriptor { +public: + PropertyDescriptor() + : m_attributes(defaultAttributes) + , m_seenAttributes(0) + { + } + PropertyDescriptor(JSValue value, unsigned attributes) + : m_value(value) + , m_attributes(attributes) + , m_seenAttributes(EnumerablePresent | ConfigurablePresent | WritablePresent) + { + ASSERT(m_value); + ASSERT(!m_value.isGetterSetter()); + ASSERT(!m_value.isCustomGetterSetter()); + } + JS_EXPORT_PRIVATE bool writable() const; + JS_EXPORT_PRIVATE bool enumerable() const; + JS_EXPORT_PRIVATE bool configurable() const; + JS_EXPORT_PRIVATE bool isDataDescriptor() const; + bool isGenericDescriptor() const; + JS_EXPORT_PRIVATE bool isAccessorDescriptor() const; + unsigned attributes() const { return m_attributes; } + JSValue value() const { return m_value; } + JS_EXPORT_PRIVATE JSValue getter() const; + JS_EXPORT_PRIVATE JSValue setter() const; + JSObject* getterObject() const; + JSObject* setterObject() const; + JS_EXPORT_PRIVATE void setUndefined(); + JS_EXPORT_PRIVATE void setDescriptor(JSValue, unsigned attributes); + JS_EXPORT_PRIVATE void setCustomDescriptor(unsigned attributes); + JS_EXPORT_PRIVATE void setAccessorDescriptor(GetterSetter* accessor, unsigned attributes); + JS_EXPORT_PRIVATE void setWritable(bool); + JS_EXPORT_PRIVATE void setEnumerable(bool); + JS_EXPORT_PRIVATE void setConfigurable(bool); + void setValue(JSValue value) { m_value = value; } + JS_EXPORT_PRIVATE void setSetter(JSValue); + JS_EXPORT_PRIVATE void setGetter(JSValue); + bool isEmpty() const { return !(m_value || m_getter || m_setter || m_seenAttributes); } + bool writablePresent() const { return m_seenAttributes & WritablePresent; } + bool enumerablePresent() const { return m_seenAttributes & EnumerablePresent; } + bool configurablePresent() const { return m_seenAttributes & ConfigurablePresent; } + bool setterPresent() const { return !!m_setter; } + bool getterPresent() const { return !!m_getter; } + bool equalTo(ExecState*, const PropertyDescriptor& other) const; + bool attributesEqual(const PropertyDescriptor& other) const; + unsigned attributesOverridingCurrent(const PropertyDescriptor& current) const; + +private: + JS_EXPORTDATA static unsigned defaultAttributes; + bool operator==(const PropertyDescriptor&) { return false; } + enum { WritablePresent = 1, EnumerablePresent = 2, ConfigurablePresent = 4}; + // May be a getter/setter + JSValue m_value; + JSValue m_getter; + JSValue m_setter; + unsigned m_attributes; + unsigned m_seenAttributes; +}; - private: - JS_EXPORTDATA static unsigned defaultAttributes; - bool operator==(const PropertyDescriptor&){ return false; } - enum { WritablePresent = 1, EnumerablePresent = 2, ConfigurablePresent = 4}; - // May be a getter/setter - JSValue m_value; - JSValue m_getter; - JSValue m_setter; - unsigned m_attributes; - unsigned m_seenAttributes; - }; } #endif |
