From ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 24 Feb 2012 16:36:50 +0100 Subject: Imported WebKit commit bb52bf3c0119e8a128cd93afe5572413a8617de9 (http://svn.webkit.org/repository/webkit/trunk@108790) --- Source/JavaScriptCore/interpreter/CallFrame.h | 36 ++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) (limited to 'Source/JavaScriptCore/interpreter/CallFrame.h') diff --git a/Source/JavaScriptCore/interpreter/CallFrame.h b/Source/JavaScriptCore/interpreter/CallFrame.h index 4fadfab28..5bf2b9488 100644 --- a/Source/JavaScriptCore/interpreter/CallFrame.h +++ b/Source/JavaScriptCore/interpreter/CallFrame.h @@ -104,13 +104,30 @@ namespace JSC { CallFrame* callerFrame() const { return this[RegisterFile::CallerFrame].callFrame(); } #if ENABLE(JIT) ReturnAddressPtr returnPC() const { return ReturnAddressPtr(this[RegisterFile::ReturnPC].vPC()); } + bool hasReturnPC() const { return !!this[RegisterFile::ReturnPC].vPC(); } + void clearReturnPC() { registers()[RegisterFile::ReturnPC] = static_cast(0); } #endif AbstractPC abstractReturnPC(JSGlobalData& globalData) { return AbstractPC(globalData, this); } - unsigned bytecodeOffsetForBaselineJIT() { return this[RegisterFile::ArgumentCount].tag(); } +#if USE(JSVALUE32_64) + unsigned bytecodeOffsetForNonDFGCode() const; + void setBytecodeOffsetForNonDFGCode(unsigned offset); +#else + unsigned bytecodeOffsetForNonDFGCode() const + { + ASSERT(codeBlock()); + return this[RegisterFile::ArgumentCount].tag(); + } + + void setBytecodeOffsetForNonDFGCode(unsigned offset) + { + ASSERT(codeBlock()); + this[RegisterFile::ArgumentCount].tag() = static_cast(offset); + } +#endif #if ENABLE(DFG_JIT) InlineCallFrame* inlineCallFrame() const { return this[RegisterFile::ReturnPC].asInlineCallFrame(); } - unsigned codeOriginIndexForDFGWithInlining() const { return this[RegisterFile::ArgumentCount].tag(); } + unsigned codeOriginIndexForDFG() const { return this[RegisterFile::ArgumentCount].tag(); } #else // This will never be called if !ENABLE(DFG_JIT) since all calls should be guarded by // isInlineCallFrame(). But to make it easier to write code without having a bunch of @@ -121,9 +138,22 @@ namespace JSC { return 0; } #endif -#if ENABLE(INTERPRETER) +#if ENABLE(CLASSIC_INTERPRETER) Instruction* returnVPC() const { return this[RegisterFile::ReturnPC].vPC(); } #endif +#if USE(JSVALUE32_64) + Instruction* currentVPC() const + { + return bitwise_cast(this[RegisterFile::ArgumentCount].tag()); + } + void setCurrentVPC(Instruction* vpc) + { + this[RegisterFile::ArgumentCount].tag() = bitwise_cast(vpc); + } +#else + Instruction* currentVPC() const; + void setCurrentVPC(Instruction* vpc); +#endif void setCallerFrame(CallFrame* callerFrame) { static_cast(this)[RegisterFile::CallerFrame] = callerFrame; } void setScopeChain(ScopeChainNode* scopeChain) { static_cast(this)[RegisterFile::ScopeChain] = scopeChain; } -- cgit v1.2.1