OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_PREPARSER_H | 5 #ifndef V8_PREPARSER_H |
6 #define V8_PREPARSER_H | 6 #define V8_PREPARSER_H |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
60 template <typename Traits> | 60 template <typename Traits> |
61 class ParserBase : public Traits { | 61 class ParserBase : public Traits { |
62 public: | 62 public: |
63 // Shorten type names defined by Traits. | 63 // Shorten type names defined by Traits. |
64 typedef typename Traits::Type::Expression ExpressionT; | 64 typedef typename Traits::Type::Expression ExpressionT; |
65 typedef typename Traits::Type::Identifier IdentifierT; | 65 typedef typename Traits::Type::Identifier IdentifierT; |
66 typedef typename Traits::Type::FunctionLiteral FunctionLiteralT; | 66 typedef typename Traits::Type::FunctionLiteral FunctionLiteralT; |
67 typedef typename Traits::Type::Literal LiteralT; | 67 typedef typename Traits::Type::Literal LiteralT; |
68 typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT; | 68 typedef typename Traits::Type::ObjectLiteralProperty ObjectLiteralPropertyT; |
69 | 69 |
70 ParserBase(Isolate* isolate, Zone* zone, Scanner* scanner, | 70 ParserBase(Zone* zone, Scanner* scanner, uintptr_t stack_limit, |
71 uintptr_t stack_limit, v8::Extension* extension, | 71 v8::Extension* extension, AstValueFactory* ast_value_factory, |
72 AstValueFactory* ast_value_factory, ParserRecorder* log, | 72 ParserRecorder* log, typename Traits::Type::Parser this_object) |
73 typename Traits::Type::Parser this_object) | |
74 : Traits(this_object), | 73 : Traits(this_object), |
75 parenthesized_function_(false), | 74 parenthesized_function_(false), |
76 scope_(NULL), | 75 scope_(NULL), |
77 function_state_(NULL), | 76 function_state_(NULL), |
78 extension_(extension), | 77 extension_(extension), |
79 fni_(NULL), | 78 fni_(NULL), |
80 ast_value_factory_(ast_value_factory), | 79 ast_value_factory_(ast_value_factory), |
81 log_(log), | 80 log_(log), |
82 mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly. | 81 mode_(PARSE_EAGERLY), // Lazy mode must be set explicitly. |
83 stack_limit_(stack_limit), | 82 stack_limit_(stack_limit), |
84 isolate_(isolate), | |
85 zone_(zone), | 83 zone_(zone), |
86 scanner_(scanner), | 84 scanner_(scanner), |
87 stack_overflow_(false), | 85 stack_overflow_(false), |
88 allow_lazy_(false), | 86 allow_lazy_(false), |
89 allow_natives_(false), | 87 allow_natives_(false), |
90 allow_harmony_arrow_functions_(false), | 88 allow_harmony_arrow_functions_(false), |
91 allow_harmony_object_literals_(false), | 89 allow_harmony_object_literals_(false), |
92 allow_harmony_sloppy_(false), | 90 allow_harmony_sloppy_(false), |
93 allow_harmony_computed_property_names_(false), | 91 allow_harmony_computed_property_names_(false), |
94 allow_harmony_rest_params_(false), | 92 allow_harmony_rest_params_(false), |
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
311 DCHECK((scope_type == FUNCTION_SCOPE && IsValidFunctionKind(kind)) || | 309 DCHECK((scope_type == FUNCTION_SCOPE && IsValidFunctionKind(kind)) || |
312 kind == kNormalFunction); | 310 kind == kNormalFunction); |
313 Scope* result = | 311 Scope* result = |
314 new (zone()) Scope(zone(), parent, scope_type, ast_value_factory()); | 312 new (zone()) Scope(zone(), parent, scope_type, ast_value_factory()); |
315 bool uninitialized_this = | 313 bool uninitialized_this = |
316 FLAG_experimental_classes && IsSubclassConstructor(kind); | 314 FLAG_experimental_classes && IsSubclassConstructor(kind); |
317 result->Initialize(uninitialized_this); | 315 result->Initialize(uninitialized_this); |
318 return result; | 316 return result; |
319 } | 317 } |
320 | 318 |
321 Isolate* isolate() const { return isolate_; } | |
322 Scanner* scanner() const { return scanner_; } | 319 Scanner* scanner() const { return scanner_; } |
323 AstValueFactory* ast_value_factory() const { return ast_value_factory_; } | 320 AstValueFactory* ast_value_factory() const { return ast_value_factory_; } |
324 int position() { return scanner_->location().beg_pos; } | 321 int position() { return scanner_->location().beg_pos; } |
325 int peek_position() { return scanner_->peek_location().beg_pos; } | 322 int peek_position() { return scanner_->peek_location().beg_pos; } |
326 bool stack_overflow() const { return stack_overflow_; } | 323 bool stack_overflow() const { return stack_overflow_; } |
327 void set_stack_overflow() { stack_overflow_ = true; } | 324 void set_stack_overflow() { stack_overflow_ = true; } |
328 Mode mode() const { return mode_; } | 325 Mode mode() const { return mode_; } |
329 Zone* zone() const { return zone_; } | 326 Zone* zone() const { return zone_; } |
330 | 327 |
331 INLINE(Token::Value peek()) { | 328 INLINE(Token::Value peek()) { |
(...skipping 314 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 Scope* scope_; // Scope stack. | 643 Scope* scope_; // Scope stack. |
647 FunctionState* function_state_; // Function state stack. | 644 FunctionState* function_state_; // Function state stack. |
648 v8::Extension* extension_; | 645 v8::Extension* extension_; |
649 FuncNameInferrer* fni_; | 646 FuncNameInferrer* fni_; |
650 AstValueFactory* ast_value_factory_; // Not owned. | 647 AstValueFactory* ast_value_factory_; // Not owned. |
651 ParserRecorder* log_; | 648 ParserRecorder* log_; |
652 Mode mode_; | 649 Mode mode_; |
653 uintptr_t stack_limit_; | 650 uintptr_t stack_limit_; |
654 | 651 |
655 private: | 652 private: |
656 Isolate* isolate_; | |
657 Zone* zone_; | 653 Zone* zone_; |
658 | 654 |
659 Scanner* scanner_; | 655 Scanner* scanner_; |
660 bool stack_overflow_; | 656 bool stack_overflow_; |
661 | 657 |
662 bool allow_lazy_; | 658 bool allow_lazy_; |
663 bool allow_natives_; | 659 bool allow_natives_; |
664 bool allow_harmony_arrow_functions_; | 660 bool allow_harmony_arrow_functions_; |
665 bool allow_harmony_object_literals_; | 661 bool allow_harmony_object_literals_; |
666 bool allow_harmony_sloppy_; | 662 bool allow_harmony_sloppy_; |
(...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1500 public: | 1496 public: |
1501 typedef PreParserIdentifier Identifier; | 1497 typedef PreParserIdentifier Identifier; |
1502 typedef PreParserExpression Expression; | 1498 typedef PreParserExpression Expression; |
1503 typedef PreParserStatement Statement; | 1499 typedef PreParserStatement Statement; |
1504 | 1500 |
1505 enum PreParseResult { | 1501 enum PreParseResult { |
1506 kPreParseStackOverflow, | 1502 kPreParseStackOverflow, |
1507 kPreParseSuccess | 1503 kPreParseSuccess |
1508 }; | 1504 }; |
1509 | 1505 |
1510 PreParser(Isolate* isolate, Zone* zone, Scanner* scanner, | 1506 PreParser(Zone* zone, Scanner* scanner, AstValueFactory* ast_value_factory, |
1511 AstValueFactory* ast_value_factory, ParserRecorder* log, | 1507 ParserRecorder* log, uintptr_t stack_limit) |
1512 uintptr_t stack_limit) | 1508 : ParserBase<PreParserTraits>(zone, scanner, stack_limit, NULL, |
1513 : ParserBase<PreParserTraits>(isolate, zone, scanner, stack_limit, NULL, | |
1514 ast_value_factory, log, this) {} | 1509 ast_value_factory, log, this) {} |
1515 | 1510 |
1516 // Pre-parse the program from the character stream; returns true on | 1511 // Pre-parse the program from the character stream; returns true on |
1517 // success (even if parsing failed, the pre-parse data successfully | 1512 // success (even if parsing failed, the pre-parse data successfully |
1518 // captured the syntax error), and false if a stack-overflow happened | 1513 // captured the syntax error), and false if a stack-overflow happened |
1519 // during parsing. | 1514 // during parsing. |
1520 PreParseResult PreParseProgram(int* materialized_literals = 0) { | 1515 PreParseResult PreParseProgram(int* materialized_literals = 0) { |
1521 Scope* scope = NewScope(scope_, SCRIPT_SCOPE); | 1516 Scope* scope = NewScope(scope_, SCRIPT_SCOPE); |
1522 PreParserFactory factory(NULL); | 1517 PreParserFactory factory(NULL); |
1523 FunctionState top_scope(&function_state_, &scope_, scope, kNormalFunction, | 1518 FunctionState top_scope(&function_state_, &scope_, scope, kNormalFunction, |
(...skipping 1558 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3082 *ok = false; | 3077 *ok = false; |
3083 return; | 3078 return; |
3084 } | 3079 } |
3085 has_seen_constructor_ = true; | 3080 has_seen_constructor_ = true; |
3086 return; | 3081 return; |
3087 } | 3082 } |
3088 } | 3083 } |
3089 } } // v8::internal | 3084 } } // v8::internal |
3090 | 3085 |
3091 #endif // V8_PREPARSER_H | 3086 #endif // V8_PREPARSER_H |
OLD | NEW |