X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/4e4e5a6f2694187498445a6ac6f1634ce8141119..14957cd040308e3eeec43d26bae5d76da13fcd85:/parser/Parser.cpp?ds=sidebyside diff --git a/parser/Parser.cpp b/parser/Parser.cpp index 039fc46..fc1e986 100644 --- a/parser/Parser.cpp +++ b/parser/Parser.cpp @@ -24,18 +24,14 @@ #include "Parser.h" #include "Debugger.h" +#include "JSParser.h" #include "Lexer.h" -#include -#include - -#ifndef yyparse -extern int jscyyparse(void*); -#endif namespace JSC { -void Parser::parse(JSGlobalData* globalData, int* errLine, UString* errMsg) +void Parser::parse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg) { + ASSERT(globalData); m_sourceElements = 0; int defaultErrLine; @@ -52,24 +48,25 @@ void Parser::parse(JSGlobalData* globalData, int* errLine, UString* errMsg) Lexer& lexer = *globalData->lexer; lexer.setCode(*m_source, m_arena); - int parseError = jscyyparse(globalData); - bool lexError = lexer.sawError(); + const char* parseError = jsParse(globalData, parameters, strictness, mode, m_source); int lineNumber = lexer.lineNumber(); + bool lexError = lexer.sawError(); lexer.clear(); if (parseError || lexError) { *errLine = lineNumber; - *errMsg = "Parse error"; + *errMsg = parseError ? parseError : "Parse error"; m_sourceElements = 0; } } void Parser::didFinishParsing(SourceElements* sourceElements, ParserArenaData* varStack, - ParserArenaData* funcStack, CodeFeatures features, int lastLine, int numConstants) + ParserArenaData* funcStack, CodeFeatures features, int lastLine, int numConstants, IdentifierSet& capturedVars) { m_sourceElements = sourceElements; m_varDeclarations = varStack; m_funcDeclarations = funcStack; + m_capturedVariables.swap(capturedVars); m_features = features; m_lastLine = lastLine; m_numConstants = numConstants;