+class GlobalFuncProtoGetterFunctor {
+public:
+ GlobalFuncProtoGetterFunctor(JSObject* thisObject)
+ : m_hasSkippedFirstFrame(false)
+ , m_thisObject(thisObject)
+ , m_result(JSValue::encode(jsUndefined()))
+ {
+ }
+
+ EncodedJSValue result() { return m_result; }
+
+ StackVisitor::Status operator()(StackVisitor& visitor)
+ {
+ if (!m_hasSkippedFirstFrame) {
+ m_hasSkippedFirstFrame = true;
+ return StackVisitor::Continue;
+ }
+
+ if (m_thisObject->allowsAccessFrom(visitor->callFrame()))
+ m_result = JSValue::encode(m_thisObject->prototype());
+
+ return StackVisitor::Done;
+ }
+
+private:
+ bool m_hasSkippedFirstFrame;
+ JSObject* m_thisObject;
+ EncodedJSValue m_result;
+};
+