#include "CallFrameInlines.h"
#include "CodeBlock.h"
#include "Interpreter.h"
-#include "JSActivation.h"
+#include "JSLexicalEnvironment.h"
#include "JSCInlines.h"
#include "VMEntryScope.h"
#include <wtf/StringPrintStream.h>
return vm().entryScope->globalObject();
}
-JSActivation* CallFrame::activation() const
+CallFrame* CallFrame::callerFrame(VMEntryFrame*& currVMEntryFrame)
+{
+ if (callerFrameOrVMEntryFrame() == currVMEntryFrame) {
+ VMEntryRecord* currVMEntryRecord = vmEntryRecord(currVMEntryFrame);
+ currVMEntryFrame = currVMEntryRecord->prevTopVMEntryFrame();
+ return currVMEntryRecord->prevTopCallFrame();
+ }
+ return static_cast<CallFrame*>(callerFrameOrVMEntryFrame());
+}
+
+JSLexicalEnvironment* CallFrame::lexicalEnvironment() const
{
CodeBlock* codeBlock = this->codeBlock();
RELEASE_ASSERT(codeBlock->needsActivation());
VirtualRegister activationRegister = codeBlock->activationRegister();
- return registers()[activationRegister.offset()].Register::activation();
+ return registers()[activationRegister.offset()].Register::lexicalEnvironment();
}
-void CallFrame::setActivation(JSActivation* activation)
+JSLexicalEnvironment* CallFrame::lexicalEnvironmentOrNullptr() const
+{
+ CodeBlock* codeBlock = this->codeBlock();
+ return codeBlock->needsActivation() ? lexicalEnvironment() : nullptr;
+}
+
+void CallFrame::setActivation(JSLexicalEnvironment* lexicalEnvironment)
{
CodeBlock* codeBlock = this->codeBlock();
RELEASE_ASSERT(codeBlock->needsActivation());
VirtualRegister activationRegister = codeBlock->activationRegister();
- registers()[activationRegister.offset()] = activation;
+ registers()[activationRegister.offset()] = lexicalEnvironment;
}
void CallFrame::dump(PrintStream& out)