diff options
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 |