summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/PropertySlot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/runtime/PropertySlot.cpp')
-rw-r--r--Source/JavaScriptCore/runtime/PropertySlot.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/runtime/PropertySlot.cpp b/Source/JavaScriptCore/runtime/PropertySlot.cpp
index c949f4bd2..e900a68bd 100644
--- a/Source/JavaScriptCore/runtime/PropertySlot.cpp
+++ b/Source/JavaScriptCore/runtime/PropertySlot.cpp
@@ -23,6 +23,7 @@
#include "GetterSetter.h"
#include "JSCJSValueInlines.h"
+#include "JSObject.h"
namespace JSC {
@@ -32,4 +33,36 @@ JSValue PropertySlot::functionGetter(ExecState* exec) const
return callGetter(exec, m_thisValue, m_data.getter.getterSetter);
}
+JSValue PropertySlot::customGetter(ExecState* exec, PropertyName propertyName) const
+{
+ // FIXME: Remove this differences in custom values and custom accessors.
+ // https://bugs.webkit.org/show_bug.cgi?id=158014
+ JSValue thisValue = m_attributes & CustomAccessor ? m_thisValue : JSValue(slotBase());
+ return JSValue::decode(m_data.custom.getValue(exec, JSValue::encode(thisValue), propertyName));
+}
+
+JSValue PropertySlot::customAccessorGetter(ExecState* exec, PropertyName propertyName) const
+{
+ if (!m_data.customAccessor.getterSetter->getter())
+ return jsUndefined();
+ return JSValue::decode(m_data.customAccessor.getterSetter->getter()(exec, JSValue::encode(m_thisValue), propertyName));
+}
+
+JSValue PropertySlot::getPureResult() const
+{
+ JSValue result;
+ if (isTaintedByOpaqueObject())
+ result = jsNull();
+ else if (isCacheableValue())
+ result = JSValue::decode(m_data.value);
+ else if (isCacheableGetter())
+ result = getterSetter();
+ else if (isUnset())
+ result = jsUndefined();
+ else
+ result = jsNull();
+
+ return result;
+}
+
} // namespace JSC