https://bugs.webkit.org/show_bug.cgi?id=120052
[WebKit-https.git] / Source / JavaScriptCore / runtime / PropertyDescriptor.h
index 98af02e..7a9bd28 100644 (file)
@@ -26,7 +26,7 @@
 #ifndef PropertyDescriptor_h
 #define PropertyDescriptor_h
 
-#include "JSValue.h"
+#include "JSCJSValue.h"
 
 namespace JSC {
     class GetterSetter;
@@ -55,7 +55,7 @@ namespace JSC {
         JSObject* setterObject() const;
         JS_EXPORT_PRIVATE void setUndefined();
         JS_EXPORT_PRIVATE void setDescriptor(JSValue value, unsigned attributes);
-        void setAccessorDescriptor(GetterSetter* accessor, 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);
@@ -70,7 +70,6 @@ namespace JSC {
         bool getterPresent() const { return m_getter; }
         bool equalTo(ExecState* exec, const PropertyDescriptor& other) const;
         bool attributesEqual(const PropertyDescriptor& other) const;
-        unsigned attributesWithOverride(const PropertyDescriptor& other) const;
         unsigned attributesOverridingCurrent(const PropertyDescriptor& current) const;
 
     private:
@@ -86,4 +85,20 @@ namespace JSC {
     };
 }
 
+#define GET_OWN_PROPERTY_DESCRIPTOR_IMPL(ClassName) \
+bool ClassName::getOwnPropertyDescriptor(JSC::JSObject* object, JSC::ExecState* exec, JSC::PropertyName propertyName, JSC::PropertyDescriptor& descriptor) \
+{ \
+    JSC::PropertySlot slot(object); \
+    if (!getOwnPropertySlot(object, exec, propertyName, slot)) \
+        return false; \
+    /* Workaround, JSDOMWindow::getOwnPropertySlot searches the prototype chain. :-( */ \
+    if (slot.slotBase() != object && slot.slotBase() && slot.slotBase()->methodTable()->toThis(slot.slotBase(), exec, NotStrictMode) != object) \
+        return false; \
+    if (slot.isGetter()) \
+        descriptor.setAccessorDescriptor(slot.getterSetter(), slot.attributes()); \
+    else \
+        descriptor.setDescriptor(slot.getValue(exec, propertyName), slot.attributes()); \
+    return true; \
+}
+
 #endif