55
55
Lexer& lexer = *globalData->lexer;
56
lexer.setCode(*m_source);
56
lexer.setCode(*m_source, m_arena);
58
58
int parseError = jscyyparse(globalData);
59
59
bool lexError = lexer.sawError();
60
int lineNumber = lexer.lineNumber();
62
ParserRefCounted::deleteNewObjects(globalData);
64
63
if (parseError || lexError) {
65
*errLine = lexer.lineNo();
64
*errLine = lineNumber;
66
65
*errMsg = "Parse error";
67
m_sourceElements.clear();
77
76
parse(globalData, 0, 0);
78
77
ASSERT(m_sourceElements);
80
functionBodyNode->adoptData(std::auto_ptr<ScopeNodeData>(new ScopeNodeData(m_sourceElements.get(),
81
m_varDeclarations ? &m_varDeclarations->data : 0,
82
m_funcDeclarations ? &m_funcDeclarations->data : 0,
79
functionBodyNode->adoptData(std::auto_ptr<ScopeNodeData>(new ScopeNodeData(globalData->parser->arena(),
81
m_varDeclarations ? &m_varDeclarations->data : 0,
82
m_funcDeclarations ? &m_funcDeclarations->data : 0,
84
84
bool usesArguments = functionBodyNode->usesArguments();
85
85
functionBodyNode->setFeatures(m_features);
86
86
if (usesArguments && !functionBodyNode->usesArguments())
87
87
functionBodyNode->setUsesArguments();
89
ASSERT(globalData->parser->arena().isEmpty());
90
92
m_sourceElements = 0;
91
93
m_varDeclarations = 0;
92
94
m_funcDeclarations = 0;
95
void Parser::didFinishParsing(SourceElements* sourceElements, ParserRefCountedData<DeclarationStacks::VarStack>* varStack,
96
ParserRefCountedData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants)
97
void Parser::didFinishParsing(SourceElements* sourceElements, ParserArenaData<DeclarationStacks::VarStack>* varStack,
98
ParserArenaData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants)
98
100
m_sourceElements = sourceElements;
99
101
m_varDeclarations = varStack;