#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());
- 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 value, 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* 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