Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index ce8df77e7a8586b55b7016cd7713e4aa93faf7f9..e22a32e9284c724a30d0c8791bf058f3f539a3b0 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -687,6 +687,67 @@ class PreParserExpressionList { |
}; |
+class PreParserStatement { |
+ public: |
+ static PreParserStatement Default() { |
+ return PreParserStatement(kUnknownStatement); |
+ } |
+ |
+ static PreParserStatement FunctionDeclaration() { |
+ return PreParserStatement(kFunctionDeclaration); |
+ } |
+ |
+ // Creates expression statement from expression. |
+ // Preserves being an unparenthesized string literal, possibly |
+ // "use strict". |
+ static PreParserStatement ExpressionStatement( |
+ PreParserExpression expression) { |
+ if (expression.IsUseStrictLiteral()) { |
+ return PreParserStatement(kUseStrictExpressionStatement); |
+ } |
+ if (expression.IsStringLiteral()) { |
+ return PreParserStatement(kStringLiteralExpressionStatement); |
+ } |
+ return Default(); |
+ } |
+ |
+ bool IsStringLiteral() { |
+ return code_ == kStringLiteralExpressionStatement; |
+ } |
+ |
+ bool IsUseStrictLiteral() { |
+ return code_ == kUseStrictExpressionStatement; |
+ } |
+ |
+ bool IsFunctionDeclaration() { |
+ return code_ == kFunctionDeclaration; |
+ } |
+ |
+ private: |
+ enum Type { |
+ kUnknownStatement, |
+ kStringLiteralExpressionStatement, |
+ kUseStrictExpressionStatement, |
+ kFunctionDeclaration |
+ }; |
+ |
+ explicit PreParserStatement(Type code) : code_(code) {} |
+ Type code_; |
+}; |
+ |
+ |
+ |
+// PreParserStatementList doesn't actually store the statements because |
+// the PreParser does not need them. |
+class PreParserStatementList { |
+ public: |
+ // These functions make list->Add(some_expression) work as no-ops. |
+ PreParserStatementList() {} |
+ PreParserStatementList* operator->() { return this; } |
+ void Add(PreParserStatement, void*) {} |
+}; |
+ |
+ |
class PreParserScope { |
public: |
explicit PreParserScope(PreParserScope* outer_scope, ScopeType scope_type) |
@@ -830,6 +891,7 @@ class PreParserTraits { |
typedef PreParserExpression Literal; |
typedef PreParserExpressionList ExpressionList; |
typedef PreParserExpressionList PropertyList; |
+ typedef PreParserStatementList StatementList; |
// For constructing objects returned by the traversing functions. |
typedef PreParserFactory Factory; |
@@ -993,6 +1055,10 @@ class PreParserTraits { |
return PreParserExpressionList(); |
} |
+ static PreParserStatementList NewStatementList(int size, void* zone) { |
+ return PreParserStatementList(); |
+ } |
+ |
static PreParserExpressionList NewPropertyList(int size, void* zone) { |
return PreParserExpressionList(); |
} |
@@ -1029,6 +1095,7 @@ class PreParser : public ParserBase<PreParserTraits> { |
public: |
typedef PreParserIdentifier Identifier; |
typedef PreParserExpression Expression; |
+ typedef PreParserStatement Statement; |
enum PreParseResult { |
kPreParseStackOverflow, |
@@ -1090,52 +1157,6 @@ class PreParser : public ParserBase<PreParserTraits> { |
kHasNoInitializers |
}; |
- class Statement { |
- public: |
- static Statement Default() { |
- return Statement(kUnknownStatement); |
- } |
- |
- static Statement FunctionDeclaration() { |
- return Statement(kFunctionDeclaration); |
- } |
- |
- // Creates expression statement from expression. |
- // Preserves being an unparenthesized string literal, possibly |
- // "use strict". |
- static Statement ExpressionStatement(Expression expression) { |
- if (expression.IsUseStrictLiteral()) { |
- return Statement(kUseStrictExpressionStatement); |
- } |
- if (expression.IsStringLiteral()) { |
- return Statement(kStringLiteralExpressionStatement); |
- } |
- return Default(); |
- } |
- |
- bool IsStringLiteral() { |
- return code_ == kStringLiteralExpressionStatement; |
- } |
- |
- bool IsUseStrictLiteral() { |
- return code_ == kUseStrictExpressionStatement; |
- } |
- |
- bool IsFunctionDeclaration() { |
- return code_ == kFunctionDeclaration; |
- } |
- |
- private: |
- enum Type { |
- kUnknownStatement, |
- kStringLiteralExpressionStatement, |
- kUseStrictExpressionStatement, |
- kFunctionDeclaration |
- }; |
- |
- explicit Statement(Type code) : code_(code) {} |
- Type code_; |
- }; |
enum SourceElements { |
kUnknownSourceElements |