53
55
Lexer& lexer = *globalData->lexer;
54
lexer.setCode(*m_source);
56
lexer.setCode(*m_source, m_arena);
56
58
int parseError = jscyyparse(globalData);
57
59
bool lexError = lexer.sawError();
60
int lineNumber = lexer.lineNumber();
60
ParserRefCounted::deleteNewObjects(globalData);
62
63
if (parseError || lexError) {
63
*errLine = lexer.lineNo();
64
*errLine = lineNumber;
64
65
*errMsg = "Parse error";
65
m_sourceElements.clear();
69
void Parser::reparseInPlace(JSGlobalData* globalData, FunctionBodyNode* functionBodyNode)
71
ASSERT(!functionBodyNode->data());
73
m_source = &functionBodyNode->source();
74
globalData->lexer->setIsReparsing();
75
parse(globalData, 0, 0);
76
ASSERT(m_sourceElements);
78
functionBodyNode->adoptData(std::auto_ptr<ScopeNodeData>(new ScopeNodeData(m_sourceElements.get(),
79
m_varDeclarations ? &m_varDeclarations->data : 0,
80
m_funcDeclarations ? &m_funcDeclarations->data : 0,
82
bool usesArguments = functionBodyNode->usesArguments();
83
functionBodyNode->setFeatures(m_features);
84
if (usesArguments && !functionBodyNode->usesArguments())
85
functionBodyNode->setUsesArguments();
89
m_varDeclarations = 0;
90
m_funcDeclarations = 0;
93
void Parser::didFinishParsing(SourceElements* sourceElements, ParserRefCountedData<DeclarationStacks::VarStack>* varStack,
94
ParserRefCountedData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants)
70
void Parser::didFinishParsing(SourceElements* sourceElements, ParserArenaData<DeclarationStacks::VarStack>* varStack,
71
ParserArenaData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants)
96
73
m_sourceElements = sourceElements;
97
74
m_varDeclarations = varStack;