diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-07-09 07:28:56 (GMT) |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-07-09 07:28:56 (GMT) |
commit | f2e0f336183e8001f946da5b7aa45b9367ed68ba (patch) | |
tree | 87cf5ab1b6e33fae823c52e9da11831a04375f47 /src/3rdparty/webkit/JavaScriptCore/interpreter | |
parent | a4e0ae8af7b550117d1e9d9dbb90564d50985fe3 (diff) | |
download | Qt-f2e0f336183e8001f946da5b7aa45b9367ed68ba.zip Qt-f2e0f336183e8001f946da5b7aa45b9367ed68ba.tar.gz Qt-f2e0f336183e8001f946da5b7aa45b9367ed68ba.tar.bz2 |
store frame's callee as a normal JSObject
It's possible for any JSObject to be a callee; all it needs to
do is implement getCallData().
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/interpreter')
3 files changed, 14 insertions, 15 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h b/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h index b1e6c4d..a8a677e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/CallFrame.h @@ -37,7 +37,7 @@ namespace JSC { // Passed as the first argument to most functions. class ExecState : private Register { public: - InternalFunction* callee() const { return this[RegisterFile::Callee].function(); } + JSObject* callee() const { return this[RegisterFile::Callee].object(); } CodeBlock* codeBlock() const { return this[RegisterFile::CodeBlock].Register::codeBlock(); } ScopeChainNode* scopeChain() const { return this[RegisterFile::ScopeChain].Register::scopeChain(); } int argumentCount() const { return this[RegisterFile::ArgumentCount].i(); } @@ -110,7 +110,7 @@ namespace JSC { void setScopeChain(ScopeChainNode* scopeChain) { this[RegisterFile::ScopeChain] = scopeChain; } ALWAYS_INLINE void init(CodeBlock* codeBlock, Instruction* vPC, ScopeChainNode* scopeChain, - CallFrame* callerFrame, int returnValueRegister, int argc, InternalFunction* function) + CallFrame* callerFrame, int returnValueRegister, int argc, JSObject* callee) { ASSERT(callerFrame); // Use noCaller() rather than 0 for the outer host call frame caller. @@ -120,7 +120,7 @@ namespace JSC { this[RegisterFile::ReturnPC] = vPC; // This is either an Instruction* or a pointer into JIT generated code stored as an Instruction*. this[RegisterFile::ReturnValueRegister] = returnValueRegister; setArgumentCount(argc); // original argument count (for the sake of the "arguments" object) - setCallee(function); + setCallee(callee); setCalleeArguments(0); } @@ -134,7 +134,7 @@ namespace JSC { int returnValueRegister() const { return this[RegisterFile::ReturnValueRegister].i(); } void setArgumentCount(int count) { this[RegisterFile::ArgumentCount] = count; } - void setCallee(InternalFunction* callee) { this[RegisterFile::Callee] = callee; } + void setCallee(JSObject* callee) { this[RegisterFile::Callee] = callee; } void setCodeBlock(CodeBlock* codeBlock) { this[RegisterFile::CodeBlock] = codeBlock; } static const intptr_t HostCallFrameFlag = 1; diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp index 2328f97..f8a3746 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/Interpreter.cpp @@ -3076,7 +3076,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi if (callType == CallTypeHost) { ScopeChainNode* scopeChain = callFrame->scopeChain(); CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset); - newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asInternalFunction(v)); + newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asObject(v)); Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; ArgList args(thisRegister + 1, argCount - 1); @@ -3230,7 +3230,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi if (callType == CallTypeHost) { ScopeChainNode* scopeChain = callFrame->scopeChain(); CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset); - newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asInternalFunction(v)); + newCallFrame->init(0, vPC + 5, scopeChain, callFrame, dst, argCount, asObject(v)); Register* thisRegister = newCallFrame->registers() - RegisterFile::CallFrameHeaderSize - argCount; ArgList args(thisRegister + 1, argCount - 1); @@ -3496,7 +3496,7 @@ JSValue Interpreter::privateExecute(ExecutionFlag flag, RegisterFile* registerFi ScopeChainNode* scopeChain = callFrame->scopeChain(); CallFrame* newCallFrame = CallFrame::create(callFrame->registers() + registerOffset); - newCallFrame->init(0, vPC + 7, scopeChain, callFrame, dst, argCount, asInternalFunction(v)); + newCallFrame->init(0, vPC + 7, scopeChain, callFrame, dst, argCount, asObject(v)); JSValue returnValue; { diff --git a/src/3rdparty/webkit/JavaScriptCore/interpreter/Register.h b/src/3rdparty/webkit/JavaScriptCore/interpreter/Register.h index e0dbc34..18cfbb0 100644 --- a/src/3rdparty/webkit/JavaScriptCore/interpreter/Register.h +++ b/src/3rdparty/webkit/JavaScriptCore/interpreter/Register.h @@ -40,7 +40,6 @@ namespace JSC { class CodeBlock; class ExecState; class JSActivation; - class InternalFunction; class JSPropertyNameIterator; class ScopeChainNode; @@ -73,7 +72,7 @@ namespace JSC { Register(JSActivation*); Register(CallFrame*); Register(CodeBlock*); - Register(InternalFunction*); + Register(JSObject*); Register(JSPropertyNameIterator*); Register(ScopeChainNode*); Register(Instruction*); @@ -82,7 +81,7 @@ namespace JSC { Arguments* arguments() const; CallFrame* callFrame() const; CodeBlock* codeBlock() const; - InternalFunction* function() const; + JSObject* object() const; JSPropertyNameIterator* propertyNameIterator() const; ScopeChainNode* scopeChain() const; Instruction* vPC() const; @@ -96,7 +95,7 @@ namespace JSC { Arguments* arguments; CallFrame* callFrame; CodeBlock* codeBlock; - InternalFunction* function; + JSObject* object; JSPropertyNameIterator* propertyNameIterator; ScopeChainNode* scopeChain; Instruction* vPC; @@ -152,9 +151,9 @@ namespace JSC { u.codeBlock = codeBlock; } - ALWAYS_INLINE Register::Register(InternalFunction* function) + ALWAYS_INLINE Register::Register(JSObject* object) { - u.function = function; + u.object = object; } ALWAYS_INLINE Register::Register(Instruction* vPC) @@ -211,9 +210,9 @@ namespace JSC { return u.codeBlock; } - ALWAYS_INLINE InternalFunction* Register::function() const + ALWAYS_INLINE JSObject* Register::object() const { - return u.function; + return u.object; } ALWAYS_INLINE JSPropertyNameIterator* Register::propertyNameIterator() const |