Index: src/parser.h |
diff --git a/src/parser.h b/src/parser.h |
index 64513d3569aed421f374a128078aa62e440b1ccb..2b0995ace283838ea5a324a41f1c212d865f629d 100644 |
--- a/src/parser.h |
+++ b/src/parser.h |
@@ -404,44 +404,10 @@ class RegExpParser BASE_EMBEDDED { |
// ---------------------------------------------------------------------------- |
// JAVASCRIPT PARSING |
-class Parser; |
+// Forward declaration. |
class SingletonLogger; |
-class ParserTraits { |
- public: |
- typedef Parser* ParserType; |
- // Return types for traversing functions. |
- typedef Handle<String> IdentifierType; |
- |
- explicit ParserTraits(Parser* parser) : parser_(parser) {} |
- |
- // Helper functions for recursive descent. |
- bool is_classic_mode() const; |
- bool is_generator() const; |
- bool IsEvalOrArguments(Handle<String> identifier) const; |
- |
- // Reporting errors. |
- void ReportMessageAt(Scanner::Location source_location, |
- const char* message, |
- Vector<const char*> args); |
- void ReportMessage(const char* message, Vector<Handle<String> > args); |
- void ReportMessageAt(Scanner::Location source_location, |
- const char* message, |
- Vector<Handle<String> > args); |
- |
- // Identifiers: |
- static IdentifierType EmptyIdentifier() { |
- return Handle<String>(); |
- } |
- |
- IdentifierType GetSymbol(); |
- |
- private: |
- Parser* parser_; |
-}; |
- |
- |
-class Parser : public ParserBase<ParserTraits> { |
+class Parser : public ParserBase { |
public: |
explicit Parser(CompilationInfo* info); |
~Parser() { |
@@ -461,8 +427,6 @@ class Parser : public ParserBase<ParserTraits> { |
bool Parse(); |
private: |
- friend class ParserTraits; |
- |
static const int kMaxNumFunctionLocals = 131071; // 2^17-1 |
enum Mode { |
@@ -557,6 +521,10 @@ class Parser : public ParserBase<ParserTraits> { |
Mode old_mode_; |
}; |
+ virtual bool is_classic_mode() { |
+ return top_scope_->is_classic_mode(); |
+ } |
+ |
// Returns NULL if parsing failed. |
FunctionLiteral* ParseProgram(); |
@@ -573,6 +541,17 @@ class Parser : public ParserBase<ParserTraits> { |
// Report syntax error |
void ReportInvalidPreparseData(Handle<String> name, bool* ok); |
+ void ReportMessage(const char* message, Vector<const char*> args); |
+ void ReportMessage(const char* message, Vector<Handle<String> > args); |
+ void ReportMessageAt(Scanner::Location location, const char* type) { |
+ ReportMessageAt(location, type, Vector<const char*>::empty()); |
+ } |
+ void ReportMessageAt(Scanner::Location loc, |
+ const char* message, |
+ Vector<const char*> args); |
+ void ReportMessageAt(Scanner::Location loc, |
+ const char* message, |
+ Vector<Handle<String> > args); |
void set_pre_parse_data(ScriptDataImpl *data) { |
pre_parse_data_ = data; |
@@ -592,6 +571,9 @@ class Parser : public ParserBase<ParserTraits> { |
? top_scope_ : top_scope_->DeclarationScope(); |
} |
+ // Check if the given string is 'eval' or 'arguments'. |
+ bool IsEvalOrArguments(Handle<String> string); |
+ |
// All ParseXXX functions take as the last argument an *ok parameter |
// which is set to false if parsing failed; it is unchanged otherwise. |
// By making the 'exception handling' explicit, we are forced to check |
@@ -678,6 +660,8 @@ class Parser : public ParserBase<ParserTraits> { |
// Magical syntax support. |
Expression* ParseV8Intrinsic(bool* ok); |
+ bool is_generator() const { return current_function_state_->is_generator(); } |
+ |
bool CheckInOrOf(bool accept_OF, ForEachStatement::VisitMode* visit_mode); |
Handle<String> LiteralString(PretenureFlag tenured) { |
@@ -700,10 +684,20 @@ class Parser : public ParserBase<ParserTraits> { |
} |
} |
+ Handle<String> GetSymbol(); |
+ |
// Get odd-ball literals. |
Literal* GetLiteralUndefined(int position); |
Literal* GetLiteralTheHole(int position); |
+ Handle<String> ParseIdentifier(AllowEvalOrArgumentsAsIdentifier, bool* ok); |
+ Handle<String> ParseIdentifierOrStrictReservedWord( |
+ bool* is_strict_reserved, bool* ok); |
+ Handle<String> ParseIdentifierName(bool* ok); |
+ Handle<String> ParseIdentifierNameOrGetOrSet(bool* is_get, |
+ bool* is_set, |
+ bool* ok); |
+ |
// Determine if the expression is a variable proxy and mark it as being used |
// in an assignment or with a increment/decrement operator. This is currently |
// used on for the statically checking assignments to harmony const bindings. |