mirror of
https://github.com/Samsung/escargot.git
synced 2026-06-22 10:01:50 +00:00
1. re-implement arguments binding, CallBoundFunction logic for reduce interpreter loop size
2. optimize FunctionObject::call 3. remove ResetExecutionResult opcode 4. give stack limit of scriptParser correctly Signed-off-by: seonghyun kim <sh8281.kim@samsung.com>
This commit is contained in:
parent
e060ee1cef
commit
013f0e5d16
25 changed files with 225 additions and 345 deletions
|
|
@ -106,21 +106,6 @@ CodeBlock* ScriptParser::generateCodeBlockTreeFromASTWalker(Context* ctx, String
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < b->functionParameters().size(); i++) {
|
||||
if (UNLIKELY(b->functionParameters()[i] == arguments)) {
|
||||
b->m_hasArgumentsBindingInParameterOrChildFD = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < b->childBlocks().size(); i++) {
|
||||
CodeBlock* cb = b->childBlocks()[i];
|
||||
if (cb->isFunctionDeclaration() && cb->functionName() == arguments) {
|
||||
b->m_hasArgumentsBindingInParameterOrChildFD = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (!codeBlock->hasName(uname)) {
|
||||
CodeBlock* c = codeBlock->parentCodeBlock();
|
||||
|
|
@ -176,12 +161,12 @@ void ScriptParser::generateCodeBlockTreeFromASTWalkerPostProcess(CodeBlock* cb)
|
|||
}
|
||||
}
|
||||
|
||||
ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, String* fileName, CodeBlock* parentCodeBlock, bool strictFromOutside)
|
||||
ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, String* fileName, CodeBlock* parentCodeBlock, bool strictFromOutside, bool isEvalCodeInFunction, size_t stackSizeRemain)
|
||||
{
|
||||
Script* script = nullptr;
|
||||
ScriptParseError* error = nullptr;
|
||||
try {
|
||||
ProgramNode* program = esprima::parseProgram(m_context, scriptSource, nullptr, strictFromOutside);
|
||||
ProgramNode* program = esprima::parseProgram(m_context, scriptSource, nullptr, strictFromOutside, stackSizeRemain);
|
||||
|
||||
script = new Script(fileName, new StringView(scriptSource));
|
||||
CodeBlock* topCodeBlock;
|
||||
|
|
@ -191,10 +176,13 @@ ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, St
|
|||
program->scopeContext()->m_hasCatch = parentCodeBlock->hasCatch();
|
||||
program->scopeContext()->m_hasYield = parentCodeBlock->hasYield();
|
||||
topCodeBlock = generateCodeBlockTreeFromASTWalker(m_context, scriptSource, script, program->scopeContext(), parentCodeBlock);
|
||||
topCodeBlock->m_isEvalCodeInFunction = true;
|
||||
} else {
|
||||
topCodeBlock = generateCodeBlockTreeFromAST(m_context, scriptSource, script, program);
|
||||
}
|
||||
|
||||
topCodeBlock->m_isEvalCodeInFunction = isEvalCodeInFunction;
|
||||
|
||||
generateCodeBlockTreeFromASTWalkerPostProcess(topCodeBlock);
|
||||
|
||||
topCodeBlock->m_cachedASTNode = program;
|
||||
|
|
@ -261,10 +249,10 @@ ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, St
|
|||
return result;
|
||||
}
|
||||
|
||||
std::pair<Node*, ASTScopeContext*> ScriptParser::parseFunction(CodeBlock* codeBlock)
|
||||
std::pair<Node*, ASTScopeContext*> ScriptParser::parseFunction(CodeBlock* codeBlock, size_t stackSizeRemain)
|
||||
{
|
||||
try {
|
||||
std::pair<Node*, ASTScopeContext*> body = esprima::parseSingleFunction(m_context, codeBlock);
|
||||
std::pair<Node*, ASTScopeContext*> body = esprima::parseSingleFunction(m_context, codeBlock, stackSizeRemain);
|
||||
return body;
|
||||
} catch (esprima::Error* orgError) {
|
||||
puts(orgError->message->toUTF8StringData().data());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue