diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/JavaScriptCore/runtime/PropertySlot.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/JavaScriptCore/runtime/PropertySlot.cpp')
-rw-r--r-- | Source/JavaScriptCore/runtime/PropertySlot.cpp | 33 |
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 |