Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index 55685a124a249f6cbf8546823ec3070e3818591b..f62630e4852d5b4b12ac48c89208aebcbc6d17dc 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -38,7 +38,46 @@ |
namespace v8 { |
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> |
class ParserBase : public Traits { |
public: |
@@ -652,11 +691,12 @@ class PreParser; |
class PreParserTraits { |
public: |
struct Type { |
+ // TODO(marja): To be removed. The Traits object should contain all the data |
+ // it needs. |
typedef PreParser* Parser; |
- // Types used by FunctionState and BlockState. |
+ // Used by FunctionState and BlockState. |
typedef PreParserScope Scope; |
- typedef PreParserFactory Factory; |
// PreParser doesn't need to store generator variables. |
typedef void GeneratorVariable; |
// No interaction with Zones. |
@@ -670,6 +710,9 @@ class PreParserTraits { |
typedef PreParserExpression Literal; |
typedef PreParserExpressionList ExpressionList; |
typedef PreParserExpressionList PropertyList; |
+ |
+ // For constructing objects returned by the traversing functions. |
+ typedef PreParserFactory Factory; |
}; |
explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} |