diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:06:43 (GMT) |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2009-06-15 09:31:31 (GMT) |
commit | c411f16870f112c3407c28c22b617f613a82cff4 (patch) | |
tree | 29a1bcd590c8b31af2aab445bfe8a978dc5bf582 /src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h | |
parent | 3d77b56b32a0c53ec0bbfaa07236fedb900ff336 (diff) | |
download | Qt-c411f16870f112c3407c28c22b617f613a82cff4.zip Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.gz Qt-c411f16870f112c3407c28c22b617f613a82cff4.tar.bz2 |
Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit-4.6-snapshot-15062009 ( 65232bf00dc494ebfd978f998c88f58d18ecce1e )
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h | 67 |
1 files changed, 51 insertions, 16 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h b/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h index 6a43737..b27e515 100644 --- a/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h +++ b/src/3rdparty/webkit/JavaScriptCore/runtime/JSFunction.h @@ -39,29 +39,30 @@ namespace JSC { class JSFunction : public InternalFunction { friend class JIT; - friend class Interpreter; + friend class VPtrSet; typedef InternalFunction Base; JSFunction(PassRefPtr<Structure> structure) : InternalFunction(structure) - , m_scopeChain(NoScopeChain()) { + clearScopeChain(); } public: + JSFunction(ExecState*, PassRefPtr<Structure>, int length, const Identifier&, NativeFunction); JSFunction(ExecState*, const Identifier&, FunctionBodyNode*, ScopeChainNode*); ~JSFunction(); virtual bool getOwnPropertySlot(ExecState*, const Identifier&, PropertySlot&); - virtual void put(ExecState*, const Identifier& propertyName, JSValuePtr, PutPropertySlot&); + virtual void put(ExecState*, const Identifier& propertyName, JSValue, PutPropertySlot&); virtual bool deleteProperty(ExecState*, const Identifier& propertyName); JSObject* construct(ExecState*, const ArgList&); - JSValuePtr call(ExecState*, JSValuePtr thisValue, const ArgList&); + JSValue call(ExecState*, JSValue thisValue, const ArgList&); - void setScope(const ScopeChain& scopeChain) { m_scopeChain = scopeChain; } - ScopeChain& scope() { return m_scopeChain; } + void setScope(const ScopeChain& scopeChain) { setScopeChain(scopeChain); } + ScopeChain& scope() { return scopeChain(); } void setBody(FunctionBodyNode* body) { m_body = body; } void setBody(PassRefPtr<FunctionBodyNode> body) { m_body = body; } @@ -69,30 +70,64 @@ namespace JSC { virtual void mark(); - static const ClassInfo info; + static JS_EXPORTDATA const ClassInfo info; - static PassRefPtr<Structure> createStructure(JSValuePtr prototype) + static PassRefPtr<Structure> createStructure(JSValue prototype) { return Structure::create(prototype, TypeInfo(ObjectType, ImplementsHasInstance)); } - private: - virtual const ClassInfo* classInfo() const { return &info; } +#if ENABLE(JIT) + bool isHostFunction() const { return m_body && m_body->isHostFunction(); } +#else + bool isHostFunction() const { return false; } +#endif + NativeFunction nativeFunction() + { + return *reinterpret_cast<NativeFunction*>(m_data); + } virtual ConstructType getConstructData(ConstructData&); virtual CallType getCallData(CallData&); - static JSValuePtr argumentsGetter(ExecState*, const Identifier&, const PropertySlot&); - static JSValuePtr callerGetter(ExecState*, const Identifier&, const PropertySlot&); - static JSValuePtr lengthGetter(ExecState*, const Identifier&, const PropertySlot&); + private: + virtual const ClassInfo* classInfo() const { return &info; } + + static JSValue argumentsGetter(ExecState*, const Identifier&, const PropertySlot&); + static JSValue callerGetter(ExecState*, const Identifier&, const PropertySlot&); + static JSValue lengthGetter(ExecState*, const Identifier&, const PropertySlot&); RefPtr<FunctionBodyNode> m_body; - ScopeChain m_scopeChain; + ScopeChain& scopeChain() + { + ASSERT(!isHostFunction()); + return *reinterpret_cast<ScopeChain*>(m_data); + } + void clearScopeChain() + { + ASSERT(!isHostFunction()); + new (m_data) ScopeChain(NoScopeChain()); + } + void setScopeChain(ScopeChainNode* sc) + { + ASSERT(!isHostFunction()); + new (m_data) ScopeChain(sc); + } + void setScopeChain(const ScopeChain& sc) + { + ASSERT(!isHostFunction()); + *reinterpret_cast<ScopeChain*>(m_data) = sc; + } + void setNativeFunction(NativeFunction func) + { + *reinterpret_cast<NativeFunction*>(m_data) = func; + } + unsigned char m_data[sizeof(void*)]; }; - JSFunction* asFunction(JSValuePtr); + JSFunction* asFunction(JSValue); - inline JSFunction* asFunction(JSValuePtr value) + inline JSFunction* asFunction(JSValue value) { ASSERT(asObject(value)->inherits(&JSFunction::info)); return static_cast<JSFunction*>(asObject(value)); |