summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/runtime/PropertySlot.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/runtime/PropertySlot.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
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