| OLD | NEW | 
|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. | 
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without | 
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are | 
| 4 // met: | 4 // met: | 
| 5 // | 5 // | 
| 6 //     * Redistributions of source code must retain the above copyright | 6 //     * Redistributions of source code must retain the above copyright | 
| 7 //       notice, this list of conditions and the following disclaimer. | 7 //       notice, this list of conditions and the following disclaimer. | 
| 8 //     * Redistributions in binary form must reproduce the above | 8 //     * Redistributions in binary form must reproduce the above | 
| 9 //       copyright notice, this list of conditions and the following | 9 //       copyright notice, this list of conditions and the following | 
| 10 //       disclaimer in the documentation and/or other materials provided | 10 //       disclaimer in the documentation and/or other materials provided | 
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 80 | 80 | 
| 81 template <typename Traits> | 81 template <typename Traits> | 
| 82 class ParserBase : public Traits { | 82 class ParserBase : public Traits { | 
| 83  public: | 83  public: | 
| 84   // Shorten type names defined by Traits. | 84   // Shorten type names defined by Traits. | 
| 85   typedef typename Traits::Type::Expression ExpressionT; | 85   typedef typename Traits::Type::Expression ExpressionT; | 
| 86   typedef typename Traits::Type::Identifier IdentifierT; | 86   typedef typename Traits::Type::Identifier IdentifierT; | 
| 87 | 87 | 
| 88   ParserBase(Scanner* scanner, uintptr_t stack_limit, | 88   ParserBase(Scanner* scanner, uintptr_t stack_limit, | 
| 89              v8::Extension* extension, | 89              v8::Extension* extension, | 
|  | 90              ParserRecorder* log, | 
| 90              typename Traits::Type::Zone* zone, | 91              typename Traits::Type::Zone* zone, | 
| 91              typename Traits::Type::Parser this_object) | 92              typename Traits::Type::Parser this_object) | 
| 92       : Traits(this_object), | 93       : Traits(this_object), | 
| 93         parenthesized_function_(false), | 94         parenthesized_function_(false), | 
| 94         scope_(NULL), | 95         scope_(NULL), | 
| 95         function_state_(NULL), | 96         function_state_(NULL), | 
| 96         extension_(extension), | 97         extension_(extension), | 
| 97         fni_(NULL), | 98         fni_(NULL), | 
|  | 99         log_(log), | 
| 98         scanner_(scanner), | 100         scanner_(scanner), | 
| 99         stack_limit_(stack_limit), | 101         stack_limit_(stack_limit), | 
| 100         stack_overflow_(false), | 102         stack_overflow_(false), | 
| 101         allow_lazy_(false), | 103         allow_lazy_(false), | 
| 102         allow_natives_syntax_(false), | 104         allow_natives_syntax_(false), | 
| 103         allow_generators_(false), | 105         allow_generators_(false), | 
| 104         allow_for_of_(false), | 106         allow_for_of_(false), | 
| 105         zone_(zone) { } | 107         zone_(zone) { } | 
| 106 | 108 | 
| 107   // Getters that indicate whether certain syntactical constructs are | 109   // Getters that indicate whether certain syntactical constructs are | 
| (...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 450   // If true, the next (and immediately following) function literal is | 452   // If true, the next (and immediately following) function literal is | 
| 451   // preceded by a parenthesis. | 453   // preceded by a parenthesis. | 
| 452   // Heuristically that means that the function will be called immediately, | 454   // Heuristically that means that the function will be called immediately, | 
| 453   // so never lazily compile it. | 455   // so never lazily compile it. | 
| 454   bool parenthesized_function_; | 456   bool parenthesized_function_; | 
| 455 | 457 | 
| 456   typename Traits::Type::Scope* scope_;  // Scope stack. | 458   typename Traits::Type::Scope* scope_;  // Scope stack. | 
| 457   FunctionState* function_state_;  // Function state stack. | 459   FunctionState* function_state_;  // Function state stack. | 
| 458   v8::Extension* extension_; | 460   v8::Extension* extension_; | 
| 459   FuncNameInferrer* fni_; | 461   FuncNameInferrer* fni_; | 
|  | 462   ParserRecorder* log_; | 
| 460 | 463 | 
| 461  private: | 464  private: | 
| 462   Scanner* scanner_; | 465   Scanner* scanner_; | 
| 463   uintptr_t stack_limit_; | 466   uintptr_t stack_limit_; | 
| 464   bool stack_overflow_; | 467   bool stack_overflow_; | 
| 465 | 468 | 
| 466   bool allow_lazy_; | 469   bool allow_lazy_; | 
| 467   bool allow_natives_syntax_; | 470   bool allow_natives_syntax_; | 
| 468   bool allow_generators_; | 471   bool allow_generators_; | 
| 469   bool allow_for_of_; | 472   bool allow_for_of_; | 
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 941 class PreParser : public ParserBase<PreParserTraits> { | 944 class PreParser : public ParserBase<PreParserTraits> { | 
| 942  public: | 945  public: | 
| 943   typedef PreParserIdentifier Identifier; | 946   typedef PreParserIdentifier Identifier; | 
| 944   typedef PreParserExpression Expression; | 947   typedef PreParserExpression Expression; | 
| 945 | 948 | 
| 946   enum PreParseResult { | 949   enum PreParseResult { | 
| 947     kPreParseStackOverflow, | 950     kPreParseStackOverflow, | 
| 948     kPreParseSuccess | 951     kPreParseSuccess | 
| 949   }; | 952   }; | 
| 950 | 953 | 
| 951   PreParser(Scanner* scanner, | 954   PreParser(Scanner* scanner, ParserRecorder* log, uintptr_t stack_limit) | 
| 952             ParserRecorder* log, | 955       : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL, | 
| 953             uintptr_t stack_limit) | 956                                     this) {} | 
| 954       : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, NULL, this), |  | 
| 955         log_(log) {} |  | 
| 956 | 957 | 
| 957   // Pre-parse the program from the character stream; returns true on | 958   // Pre-parse the program from the character stream; returns true on | 
| 958   // success (even if parsing failed, the pre-parse data successfully | 959   // success (even if parsing failed, the pre-parse data successfully | 
| 959   // captured the syntax error), and false if a stack-overflow happened | 960   // captured the syntax error), and false if a stack-overflow happened | 
| 960   // during parsing. | 961   // during parsing. | 
| 961   PreParseResult PreParseProgram() { | 962   PreParseResult PreParseProgram() { | 
| 962     PreParserScope scope(scope_, GLOBAL_SCOPE); | 963     PreParserScope scope(scope_, GLOBAL_SCOPE); | 
| 963     FunctionState top_scope(&function_state_, &scope_, &scope, NULL); | 964     FunctionState top_scope(&function_state_, &scope_, &scope, NULL); | 
| 964     bool ok = true; | 965     bool ok = true; | 
| 965     int start_position = scanner()->peek_location().beg_pos; | 966     int start_position = scanner()->peek_location().beg_pos; | 
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1104       FunctionLiteral::FunctionType function_type, | 1105       FunctionLiteral::FunctionType function_type, | 
| 1105       bool* ok); | 1106       bool* ok); | 
| 1106   void ParseLazyFunctionLiteralBody(bool* ok); | 1107   void ParseLazyFunctionLiteralBody(bool* ok); | 
| 1107 | 1108 | 
| 1108   // Logs the currently parsed literal as a symbol in the preparser data. | 1109   // Logs the currently parsed literal as a symbol in the preparser data. | 
| 1109   void LogSymbol(); | 1110   void LogSymbol(); | 
| 1110   // Log the currently parsed string literal. | 1111   // Log the currently parsed string literal. | 
| 1111   Expression GetStringSymbol(); | 1112   Expression GetStringSymbol(); | 
| 1112 | 1113 | 
| 1113   bool CheckInOrOf(bool accept_OF); | 1114   bool CheckInOrOf(bool accept_OF); | 
| 1114 |  | 
| 1115   ParserRecorder* log_; |  | 
| 1116 }; | 1115 }; | 
| 1117 | 1116 | 
| 1118 |  | 
| 1119 template<class Traits> | 1117 template<class Traits> | 
| 1120 ParserBase<Traits>::FunctionState::FunctionState( | 1118 ParserBase<Traits>::FunctionState::FunctionState( | 
| 1121     FunctionState** function_state_stack, | 1119     FunctionState** function_state_stack, | 
| 1122     typename Traits::Type::Scope** scope_stack, | 1120     typename Traits::Type::Scope** scope_stack, | 
| 1123     typename Traits::Type::Scope* scope, | 1121     typename Traits::Type::Scope* scope, | 
| 1124     typename Traits::Type::Zone* extra_param) | 1122     typename Traits::Type::Zone* extra_param) | 
| 1125     : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), | 1123     : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), | 
| 1126       next_handler_index_(0), | 1124       next_handler_index_(0), | 
| 1127       expected_property_count_(0), | 1125       expected_property_count_(0), | 
| 1128       is_generator_(false), | 1126       is_generator_(false), | 
| (...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1813                                "accessor_get_set"); | 1811                                "accessor_get_set"); | 
| 1814     } | 1812     } | 
| 1815     *ok = false; | 1813     *ok = false; | 
| 1816   } | 1814   } | 
| 1817 } | 1815 } | 
| 1818 | 1816 | 
| 1819 | 1817 | 
| 1820 } }  // v8::internal | 1818 } }  // v8::internal | 
| 1821 | 1819 | 
| 1822 #endif  // V8_PREPARSER_H | 1820 #endif  // V8_PREPARSER_H | 
| OLD | NEW | 
|---|