| Index: src/parser.h
|
| diff --git a/src/parser.h b/src/parser.h
|
| index 2b0995ace283838ea5a324a41f1c212d865f629d..64513d3569aed421f374a128078aa62e440b1ccb 100644
|
| --- a/src/parser.h
|
| +++ b/src/parser.h
|
| @@ -404,10 +404,44 @@ class RegExpParser BASE_EMBEDDED {
|
| // ----------------------------------------------------------------------------
|
| // JAVASCRIPT PARSING
|
|
|
| -// Forward declaration.
|
| +class Parser;
|
| class SingletonLogger;
|
|
|
| -class Parser : public ParserBase {
|
| +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> {
|
| public:
|
| explicit Parser(CompilationInfo* info);
|
| ~Parser() {
|
| @@ -427,6 +461,8 @@ class Parser : public ParserBase {
|
| bool Parse();
|
|
|
| private:
|
| + friend class ParserTraits;
|
| +
|
| static const int kMaxNumFunctionLocals = 131071; // 2^17-1
|
|
|
| enum Mode {
|
| @@ -521,10 +557,6 @@ class Parser : public ParserBase {
|
| Mode old_mode_;
|
| };
|
|
|
| - virtual bool is_classic_mode() {
|
| - return top_scope_->is_classic_mode();
|
| - }
|
| -
|
| // Returns NULL if parsing failed.
|
| FunctionLiteral* ParseProgram();
|
|
|
| @@ -541,17 +573,6 @@ class Parser : public ParserBase {
|
|
|
| // 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;
|
| @@ -571,9 +592,6 @@ class Parser : public ParserBase {
|
| ? 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
|
| @@ -660,8 +678,6 @@ class Parser : public ParserBase {
|
| // 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) {
|
| @@ -684,20 +700,10 @@ class Parser : public ParserBase {
|
| }
|
| }
|
|
|
| - 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.
|
|
|