]>
git.saurik.com Git - apple/javascriptcore.git/blob - parser/Parser.cpp
   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. 
   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. 
  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. 
  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. 
  28 #include <wtf/HashSet.h> 
  29 #include <wtf/Vector.h> 
  35 extern int jscyyparse(void*); 
  40 void Parser::parse(JSGlobalData
* globalData
, int* errLine
, UString
* errMsg
) 
  45     UString defaultErrMsg
; 
  48         errLine 
= &defaultErrLine
; 
  50         errMsg 
= &defaultErrMsg
; 
  55     Lexer
& lexer 
= *globalData
->lexer
; 
  56     lexer
.setCode(*m_source
); 
  58     int parseError 
= jscyyparse(globalData
); 
  59     bool lexError 
= lexer
.sawError(); 
  60     int lineNumber 
= lexer
.lineNumber(); 
  63     if (parseError 
|| lexError
) { 
  64         *errLine 
= lineNumber
; 
  65         *errMsg 
= "Parse error"; 
  70 void Parser::reparseInPlace(JSGlobalData
* globalData
, FunctionBodyNode
* functionBodyNode
) 
  72     ASSERT(!functionBodyNode
->data()); 
  74     m_source 
= &functionBodyNode
->source(); 
  75     globalData
->lexer
->setIsReparsing(); 
  76     parse(globalData
, 0, 0); 
  77     ASSERT(m_sourceElements
); 
  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     bool usesArguments 
= functionBodyNode
->usesArguments(); 
  85     functionBodyNode
->setFeatures(m_features
); 
  86     if (usesArguments 
&& !functionBodyNode
->usesArguments()) 
  87         functionBodyNode
->setUsesArguments(); 
  89     ASSERT(globalData
->parser
->arena().isEmpty()); 
  93     m_varDeclarations 
= 0; 
  94     m_funcDeclarations 
= 0; 
  97 void Parser::didFinishParsing(SourceElements
* sourceElements
, ParserArenaData
<DeclarationStacks::VarStack
>* varStack
,  
  98                               ParserArenaData
<DeclarationStacks::FunctionStack
>* funcStack
, CodeFeatures features
, int lastLine
, int numConstants
) 
 100     m_sourceElements 
= sourceElements
; 
 101     m_varDeclarations 
= varStack
; 
 102     m_funcDeclarations 
= funcStack
; 
 103     m_features 
= features
; 
 104     m_lastLine 
= lastLine
; 
 105     m_numConstants 
= numConstants
;