// Copyright 2012 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_PARSING_PREPARSER_H_ #define V8_PARSING_PREPARSER_H_ #include "src/ast/ast-value-factory.h" #include "src/ast/ast.h" #include "src/ast/scopes.h" #include "src/parsing/parse-info.h" #include "src/parsing/parser-base.h" #include "src/parsing/pending-compilation-error-handler.h" #include "src/parsing/preparser-logger.h" namespace v8 { namespace internal { // Whereas the Parser generates AST during the recursive descent, // the PreParser doesn't create a tree. Instead, it passes around minimal // data objects (PreParserExpression, PreParserIdentifier etc.) which contain // just enough data for the upper layer functions. PreParserFactory is // responsible for creating these dummy objects. It provides a similar kind of // interface as AstNodeFactory, so ParserBase doesn't need to care which one is // used. class PreparseDataBuilder; class PreParserIdentifier { … }; class PreParserExpression { … }; class PreParserStatement; class PreParserStatementList { … }; class PreParserScopedStatementList { … }; // The pre-parser doesn't need to build lists of expressions, identifiers, or // the like. If the PreParser is used in variable tracking mode, it needs to // build lists of variables though. class PreParserExpressionList { … }; class PreParserStatement { … }; // A PreParserBlock extends statement with a place to store the scope. // The scope is dropped as the block is returned as a statement. class PreParserBlock : public PreParserStatement { … }; class PreParserFactory { … }; class PreParser; class PreParserFormalParameters : public FormalParametersBase { … }; class PreParserFuncNameInferrer { … }; class PreParserSourceRange { … }; class PreParserSourceRangeScope { … }; class PreParserPropertyList { … }; template <> struct ParserTypes<PreParser> { … }; // Preparsing checks a JavaScript program and emits preparse-data that helps // a later parsing to be faster. // See preparse-data-format.h for the data format. // The PreParser checks that the syntax follows the grammar for JavaScript, // and collects some information about the program along the way. // The grammar check is only performed in order to understand the program // sufficiently to deduce some information about it, that can be used // to speed up later parsing. Finding errors is not the goal of pre-parsing, // rather it is to speed up properly written and correct programs. // That means that contextual checks (like a label being declared where // it is used) are generally omitted. class PreParser : public ParserBase<PreParser> { … }; } // namespace internal } // namespace v8 #endif // V8_PARSING_PREPARSER_H_