Parser / PreParser unification: Add docs.
R=rossberg@chromium.org, rossberg BUG=v8:3126 LOG=N Review URL: https://codereview.chromium.org/196953004 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19861 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
2a9df4c822
commit
df5ac19412
@ -408,11 +408,12 @@ class SingletonLogger;
|
|||||||
class ParserTraits {
|
class ParserTraits {
|
||||||
public:
|
public:
|
||||||
struct Type {
|
struct Type {
|
||||||
|
// TODO(marja): To be removed. The Traits object should contain all the data
|
||||||
|
// it needs.
|
||||||
typedef v8::internal::Parser* Parser;
|
typedef v8::internal::Parser* Parser;
|
||||||
|
|
||||||
// Types used by FunctionState and BlockState.
|
// Used by FunctionState and BlockState.
|
||||||
typedef v8::internal::Scope Scope;
|
typedef v8::internal::Scope Scope;
|
||||||
typedef AstNodeFactory<AstConstructionVisitor> Factory;
|
|
||||||
typedef Variable GeneratorVariable;
|
typedef Variable GeneratorVariable;
|
||||||
typedef v8::internal::Zone Zone;
|
typedef v8::internal::Zone Zone;
|
||||||
|
|
||||||
@ -424,6 +425,9 @@ class ParserTraits {
|
|||||||
typedef ObjectLiteral::Property* ObjectLiteralProperty;
|
typedef ObjectLiteral::Property* ObjectLiteralProperty;
|
||||||
typedef ZoneList<v8::internal::Expression*>* ExpressionList;
|
typedef ZoneList<v8::internal::Expression*>* ExpressionList;
|
||||||
typedef ZoneList<ObjectLiteral::Property*>* PropertyList;
|
typedef ZoneList<ObjectLiteral::Property*>* PropertyList;
|
||||||
|
|
||||||
|
// For constructing objects returned by the traversing functions.
|
||||||
|
typedef AstNodeFactory<AstConstructionVisitor> Factory;
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit ParserTraits(Parser* parser) : parser_(parser) {}
|
explicit ParserTraits(Parser* parser) : parser_(parser) {}
|
||||||
|
@ -38,7 +38,46 @@
|
|||||||
namespace v8 {
|
namespace v8 {
|
||||||
namespace internal {
|
namespace internal {
|
||||||
|
|
||||||
// Common base class shared between parser and pre-parser.
|
// Common base class shared between parser and pre-parser. Traits encapsulate
|
||||||
|
// the differences between Parser and PreParser:
|
||||||
|
|
||||||
|
// - Return types: For example, Parser functions return Expression* and
|
||||||
|
// PreParser functions return PreParserExpression.
|
||||||
|
|
||||||
|
// - Creating parse tree nodes: Parser generates an AST during the recursive
|
||||||
|
// descent. 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.
|
||||||
|
|
||||||
|
// - Miscellanous other tasks interleaved with the recursive descent. For
|
||||||
|
// example, Parser keeps track of which function literals should be marked as
|
||||||
|
// pretenured, and PreParser doesn't care.
|
||||||
|
|
||||||
|
// The traits are expected to contain the following typedefs:
|
||||||
|
// struct Traits {
|
||||||
|
// // In particular...
|
||||||
|
// struct Type {
|
||||||
|
// // Used by FunctionState and BlockState.
|
||||||
|
// typedef Scope;
|
||||||
|
// typedef GeneratorVariable;
|
||||||
|
// typedef Zone;
|
||||||
|
// // Return types for traversing functions.
|
||||||
|
// typedef Identifier;
|
||||||
|
// typedef Expression;
|
||||||
|
// typedef FunctionLiteral;
|
||||||
|
// typedef ObjectLiteralProperty;
|
||||||
|
// typedef Literal;
|
||||||
|
// typedef ExpressionList;
|
||||||
|
// typedef PropertyList;
|
||||||
|
// // For constructing objects returned by the traversing functions.
|
||||||
|
// typedef Factory;
|
||||||
|
// };
|
||||||
|
// // ...
|
||||||
|
// };
|
||||||
|
|
||||||
template <typename Traits>
|
template <typename Traits>
|
||||||
class ParserBase : public Traits {
|
class ParserBase : public Traits {
|
||||||
public:
|
public:
|
||||||
@ -652,11 +691,12 @@ class PreParser;
|
|||||||
class PreParserTraits {
|
class PreParserTraits {
|
||||||
public:
|
public:
|
||||||
struct Type {
|
struct Type {
|
||||||
|
// TODO(marja): To be removed. The Traits object should contain all the data
|
||||||
|
// it needs.
|
||||||
typedef PreParser* Parser;
|
typedef PreParser* Parser;
|
||||||
|
|
||||||
// Types used by FunctionState and BlockState.
|
// Used by FunctionState and BlockState.
|
||||||
typedef PreParserScope Scope;
|
typedef PreParserScope Scope;
|
||||||
typedef PreParserFactory Factory;
|
|
||||||
// PreParser doesn't need to store generator variables.
|
// PreParser doesn't need to store generator variables.
|
||||||
typedef void GeneratorVariable;
|
typedef void GeneratorVariable;
|
||||||
// No interaction with Zones.
|
// No interaction with Zones.
|
||||||
@ -670,6 +710,9 @@ class PreParserTraits {
|
|||||||
typedef PreParserExpression Literal;
|
typedef PreParserExpression Literal;
|
||||||
typedef PreParserExpressionList ExpressionList;
|
typedef PreParserExpressionList ExpressionList;
|
||||||
typedef PreParserExpressionList PropertyList;
|
typedef PreParserExpressionList PropertyList;
|
||||||
|
|
||||||
|
// For constructing objects returned by the traversing functions.
|
||||||
|
typedef PreParserFactory Factory;
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
|
explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {}
|
||||||
|
Loading…
Reference in New Issue
Block a user