implement eval

Signed-off-by: seonghyun kim <sh8281.kim@samsung.com>
This commit is contained in:
seonghyun kim 2016-12-12 14:34:31 +09:00
commit 35142d1c6a
17 changed files with 252 additions and 49 deletions

View file

@ -72,7 +72,7 @@ CodeBlock* ScriptParser::generateCodeBlockTreeFromAST(Context* ctx, StringView s
return generateCodeBlockTreeFromASTWalker(ctx, source, script, program->scopeContext(), nullptr);
}
ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, String* fileName)
ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, String* fileName, CodeBlock* parentCodeBlock)
{
Script* script = nullptr;
ScriptParseError* error = nullptr;
@ -80,7 +80,15 @@ ScriptParser::ScriptParserResult ScriptParser::parse(StringView scriptSource, St
ProgramNode* program = esprima::parseProgram(m_context, scriptSource, nullptr);
script = new Script(fileName);
CodeBlock* topCodeBlock = generateCodeBlockTreeFromAST(m_context, scriptSource, script, program);
CodeBlock* topCodeBlock;
if (parentCodeBlock) {
program->scopeContext()->m_hasEval = parentCodeBlock->hasEvalWithYield();
program->scopeContext()->m_hasWith = parentCodeBlock->hasEvalWithYield();
program->scopeContext()->m_hasYield = parentCodeBlock->hasEvalWithYield();
topCodeBlock = generateCodeBlockTreeFromASTWalker(m_context, scriptSource, script, program->scopeContext(), parentCodeBlock);
} else {
topCodeBlock = generateCodeBlockTreeFromAST(m_context, scriptSource, script, program);
}
topCodeBlock->m_cachedASTNode = program;
script->m_topCodeBlock = topCodeBlock;