| 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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 // typedef Factory; | 76 // typedef Factory; |
| 77 // }; | 77 // }; |
| 78 // // ... | 78 // // ... |
| 79 // }; | 79 // }; |
| 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 ParserBase(Scanner* scanner, uintptr_t stack_limit, | 84 ParserBase(Scanner* scanner, uintptr_t stack_limit, |
| 85 v8::Extension* extension, | 85 v8::Extension* extension, |
| 86 ParserRecorder* log, |
| 86 typename Traits::Type::Zone* zone, | 87 typename Traits::Type::Zone* zone, |
| 87 typename Traits::Type::Parser this_object) | 88 typename Traits::Type::Parser this_object) |
| 88 : Traits(this_object), | 89 : Traits(this_object), |
| 89 parenthesized_function_(false), | 90 parenthesized_function_(false), |
| 90 scope_(NULL), | 91 scope_(NULL), |
| 91 function_state_(NULL), | 92 function_state_(NULL), |
| 92 extension_(extension), | 93 extension_(extension), |
| 93 fni_(NULL), | 94 fni_(NULL), |
| 95 log_(log), |
| 94 scanner_(scanner), | 96 scanner_(scanner), |
| 95 stack_limit_(stack_limit), | 97 stack_limit_(stack_limit), |
| 96 stack_overflow_(false), | 98 stack_overflow_(false), |
| 97 allow_lazy_(false), | 99 allow_lazy_(false), |
| 98 allow_natives_syntax_(false), | 100 allow_natives_syntax_(false), |
| 99 allow_generators_(false), | 101 allow_generators_(false), |
| 100 allow_for_of_(false), | 102 allow_for_of_(false), |
| 101 zone_(zone) { } | 103 zone_(zone) { } |
| 102 | 104 |
| 103 // Getters that indicate whether certain syntactical constructs are | 105 // Getters that indicate whether certain syntactical constructs are |
| (...skipping 347 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 451 // If true, the next (and immediately following) function literal is | 453 // If true, the next (and immediately following) function literal is |
| 452 // preceded by a parenthesis. | 454 // preceded by a parenthesis. |
| 453 // Heuristically that means that the function will be called immediately, | 455 // Heuristically that means that the function will be called immediately, |
| 454 // so never lazily compile it. | 456 // so never lazily compile it. |
| 455 bool parenthesized_function_; | 457 bool parenthesized_function_; |
| 456 | 458 |
| 457 typename Traits::Type::Scope* scope_; // Scope stack. | 459 typename Traits::Type::Scope* scope_; // Scope stack. |
| 458 FunctionState* function_state_; // Function state stack. | 460 FunctionState* function_state_; // Function state stack. |
| 459 v8::Extension* extension_; | 461 v8::Extension* extension_; |
| 460 FuncNameInferrer* fni_; | 462 FuncNameInferrer* fni_; |
| 463 ParserRecorder* log_; |
| 461 | 464 |
| 462 private: | 465 private: |
| 463 Scanner* scanner_; | 466 Scanner* scanner_; |
| 464 uintptr_t stack_limit_; | 467 uintptr_t stack_limit_; |
| 465 bool stack_overflow_; | 468 bool stack_overflow_; |
| 466 | 469 |
| 467 bool allow_lazy_; | 470 bool allow_lazy_; |
| 468 bool allow_natives_syntax_; | 471 bool allow_natives_syntax_; |
| 469 bool allow_generators_; | 472 bool allow_generators_; |
| 470 bool allow_for_of_; | 473 bool allow_for_of_; |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 class PreParser : public ParserBase<PreParserTraits> { | 945 class PreParser : public ParserBase<PreParserTraits> { |
| 943 public: | 946 public: |
| 944 typedef PreParserIdentifier Identifier; | 947 typedef PreParserIdentifier Identifier; |
| 945 typedef PreParserExpression Expression; | 948 typedef PreParserExpression Expression; |
| 946 | 949 |
| 947 enum PreParseResult { | 950 enum PreParseResult { |
| 948 kPreParseStackOverflow, | 951 kPreParseStackOverflow, |
| 949 kPreParseSuccess | 952 kPreParseSuccess |
| 950 }; | 953 }; |
| 951 | 954 |
| 952 PreParser(Scanner* scanner, | 955 PreParser(Scanner* scanner, ParserRecorder* log, uintptr_t stack_limit) |
| 953 ParserRecorder* log, | 956 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, log, NULL, |
| 954 uintptr_t stack_limit) | 957 this) {} |
| 955 : ParserBase<PreParserTraits>(scanner, stack_limit, NULL, NULL, this), | |
| 956 log_(log) {} | |
| 957 | 958 |
| 958 // Pre-parse the program from the character stream; returns true on | 959 // Pre-parse the program from the character stream; returns true on |
| 959 // success (even if parsing failed, the pre-parse data successfully | 960 // success (even if parsing failed, the pre-parse data successfully |
| 960 // captured the syntax error), and false if a stack-overflow happened | 961 // captured the syntax error), and false if a stack-overflow happened |
| 961 // during parsing. | 962 // during parsing. |
| 962 PreParseResult PreParseProgram() { | 963 PreParseResult PreParseProgram() { |
| 963 PreParserScope scope(scope_, GLOBAL_SCOPE); | 964 PreParserScope scope(scope_, GLOBAL_SCOPE); |
| 964 FunctionState top_scope(&function_state_, &scope_, &scope, NULL); | 965 FunctionState top_scope(&function_state_, &scope_, &scope, NULL); |
| 965 bool ok = true; | 966 bool ok = true; |
| 966 int start_position = scanner()->peek_location().beg_pos; | 967 int start_position = scanner()->peek_location().beg_pos; |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1105 FunctionLiteral::FunctionType function_type, | 1106 FunctionLiteral::FunctionType function_type, |
| 1106 bool* ok); | 1107 bool* ok); |
| 1107 void ParseLazyFunctionLiteralBody(bool* ok); | 1108 void ParseLazyFunctionLiteralBody(bool* ok); |
| 1108 | 1109 |
| 1109 // Logs the currently parsed literal as a symbol in the preparser data. | 1110 // Logs the currently parsed literal as a symbol in the preparser data. |
| 1110 void LogSymbol(); | 1111 void LogSymbol(); |
| 1111 // Log the currently parsed string literal. | 1112 // Log the currently parsed string literal. |
| 1112 Expression GetStringSymbol(); | 1113 Expression GetStringSymbol(); |
| 1113 | 1114 |
| 1114 bool CheckInOrOf(bool accept_OF); | 1115 bool CheckInOrOf(bool accept_OF); |
| 1115 | |
| 1116 ParserRecorder* log_; | |
| 1117 }; | 1116 }; |
| 1118 | 1117 |
| 1119 | |
| 1120 template<class Traits> | 1118 template<class Traits> |
| 1121 ParserBase<Traits>::FunctionState::FunctionState( | 1119 ParserBase<Traits>::FunctionState::FunctionState( |
| 1122 FunctionState** function_state_stack, | 1120 FunctionState** function_state_stack, |
| 1123 typename Traits::Type::Scope** scope_stack, | 1121 typename Traits::Type::Scope** scope_stack, |
| 1124 typename Traits::Type::Scope* scope, | 1122 typename Traits::Type::Scope* scope, |
| 1125 typename Traits::Type::Zone* extra_param) | 1123 typename Traits::Type::Zone* extra_param) |
| 1126 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), | 1124 : next_materialized_literal_index_(JSFunction::kLiteralsPrefixSize), |
| 1127 next_handler_index_(0), | 1125 next_handler_index_(0), |
| 1128 expected_property_count_(0), | 1126 expected_property_count_(0), |
| 1129 is_generator_(false), | 1127 is_generator_(false), |
| (...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1827 "accessor_get_set"); | 1825 "accessor_get_set"); |
| 1828 } | 1826 } |
| 1829 *ok = false; | 1827 *ok = false; |
| 1830 } | 1828 } |
| 1831 } | 1829 } |
| 1832 | 1830 |
| 1833 | 1831 |
| 1834 } } // v8::internal | 1832 } } // v8::internal |
| 1835 | 1833 |
| 1836 #endif // V8_PREPARSER_H | 1834 #endif // V8_PREPARSER_H |
| OLD | NEW |