summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp')
-rw-r--r--src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp36
1 files changed, 22 insertions, 14 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp
index 4ddf13a..ba6e1e0 100644
--- a/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp
+++ b/src/3rdparty/webkit/JavaScriptCore/parser/Nodes.cpp
@@ -1186,8 +1186,10 @@ RegisterID* ReadModifyBracketNode::emitBytecode(BytecodeGenerator& generator, Re
RegisterID* CommaNode::emitBytecode(BytecodeGenerator& generator, RegisterID* dst)
{
- generator.emitNode(generator.ignoredResult(), m_expr1);
- return generator.emitNode(dst, m_expr2);
+ ASSERT(m_expressions.size() > 1);
+ for (size_t i = 0; i < m_expressions.size() - 1; i++)
+ generator.emitNode(generator.ignoredResult(), m_expressions[i]);
+ return generator.emitNode(dst, m_expressions.last());
}
// ------------------------------ ConstDeclNode ------------------------------------
@@ -1889,8 +1891,8 @@ void ProgramNode::generateBytecode(ScopeChainNode* scopeChainNode)
m_code.set(new ProgramCodeBlock(this, GlobalCode, globalObject, source().provider()));
- BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get());
- generator.generate();
+ OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &globalObject->symbolTable(), m_code.get()));
+ generator->generate();
destroyData();
}
@@ -1944,8 +1946,8 @@ void EvalNode::generateBytecode(ScopeChainNode* scopeChainNode)
m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth()));
- BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());
- generator.generate();
+ OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));
+ generator->generate();
// Eval code needs to hang on to its declaration stacks to keep declaration info alive until Interpreter::execute time,
// so the entire ScopeNodeData cannot be destoyed.
@@ -1961,9 +1963,9 @@ EvalCodeBlock& EvalNode::bytecodeForExceptionInfoReparse(ScopeChainNode* scopeCh
m_code.set(new EvalCodeBlock(this, globalObject, source().provider(), scopeChain.localDepth()));
- BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());
- generator.setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);
- generator.generate();
+ OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));
+ generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);
+ generator->generate();
return *m_code;
}
@@ -2037,11 +2039,17 @@ PassRefPtr<FunctionBodyNode> FunctionBodyNode::createNativeThunk(JSGlobalData* g
{
RefPtr<FunctionBodyNode> body = new FunctionBodyNode(globalData);
globalData->parser->arena().reset();
+ body->m_code.set(new CodeBlock(body.get()));
body->m_jitCode = JITCode(JITCode::HostFunction(globalData->jitStubs.ctiNativeCallThunk()));
return body.release();
}
#endif
+bool FunctionBodyNode::isHostFunction() const
+{
+ return m_code && m_code->codeType() == NativeCode;
+}
+
FunctionBodyNode* FunctionBodyNode::create(JSGlobalData* globalData)
{
return new FunctionBodyNode(globalData);
@@ -2071,8 +2079,8 @@ void FunctionBodyNode::generateBytecode(ScopeChainNode* scopeChainNode)
m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset()));
- BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());
- generator.generate();
+ OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));
+ generator->generate();
destroyData();
}
@@ -2097,9 +2105,9 @@ CodeBlock& FunctionBodyNode::bytecodeForExceptionInfoReparse(ScopeChainNode* sco
m_code.set(new CodeBlock(this, FunctionCode, source().provider(), source().startOffset()));
- BytecodeGenerator generator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get());
- generator.setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);
- generator.generate();
+ OwnPtr<BytecodeGenerator> generator(new BytecodeGenerator(this, globalObject->debugger(), scopeChain, &m_code->symbolTable(), m_code.get()));
+ generator->setRegeneratingForExceptionInfo(codeBlockBeingRegeneratedFrom);
+ generator->generate();
return *m_code;
}