1/*
2 *  Copyright (C) 1999-2001 Harri Porten (porten@kde.org)
3 *  Copyright (C) 2001 Peter Kelly (pmk@post.com)
4 *  Copyright (C) 2003, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
5 *
6 *  This library is free software; you can redistribute it and/or
7 *  modify it under the terms of the GNU Library General Public
8 *  License as published by the Free Software Foundation; either
9 *  version 2 of the License, or (at your option) any later version.
10 *
11 *  This library is distributed in the hope that it will be useful,
12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 *  Library General Public License for more details.
15 *
16 *  You should have received a copy of the GNU Library General Public License
17 *  along with this library; see the file COPYING.LIB.  If not, write to
18 *  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 *  Boston, MA 02110-1301, USA.
20 *
21 */
22
23#include "config.h"
24#include "Parser.h"
25
26#include "Debugger.h"
27#include "JSParser.h"
28#include "Lexer.h"
29
30namespace JSC {
31
32void Parser::parse(JSGlobalData* globalData, FunctionParameters* parameters, JSParserStrictness strictness, JSParserMode mode, int* errLine, UString* errMsg)
33{
34    ASSERT(globalData);
35    m_sourceElements = 0;
36
37    int defaultErrLine;
38    UString defaultErrMsg;
39
40    if (!errLine)
41        errLine = &defaultErrLine;
42    if (!errMsg)
43        errMsg = &defaultErrMsg;
44
45    *errLine = -1;
46    *errMsg = UString();
47
48    Lexer& lexer = *globalData->lexer;
49    lexer.setCode(*m_source, m_arena);
50
51    const char* parseError = jsParse(globalData, parameters, strictness, mode, m_source);
52    int lineNumber = lexer.lineNumber();
53    bool lexError = lexer.sawError();
54    lexer.clear();
55
56    if (parseError || lexError) {
57        *errLine = lineNumber;
58        *errMsg = parseError ? parseError : "Parse error";
59        m_sourceElements = 0;
60    }
61}
62
63void Parser::didFinishParsing(SourceElements* sourceElements, ParserArenaData<DeclarationStacks::VarStack>* varStack,
64                              ParserArenaData<DeclarationStacks::FunctionStack>* funcStack, CodeFeatures features, int lastLine, int numConstants, IdentifierSet& capturedVars)
65{
66    m_sourceElements = sourceElements;
67    m_varDeclarations = varStack;
68    m_funcDeclarations = funcStack;
69    m_capturedVariables.swap(capturedVars);
70    m_features = features;
71    m_lastLine = lastLine;
72    m_numConstants = numConstants;
73}
74
75} // namespace JSC
76