| 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 kAllowEvalOrArguments, | 80 kAllowEvalOrArguments, |
| 81 kDontAllowEvalOrArguments | 81 kDontAllowEvalOrArguments |
| 82 }; | 82 }; |
| 83 | 83 |
| 84 Scanner* scanner() const { return scanner_; } | 84 Scanner* scanner() const { return scanner_; } |
| 85 int position() { return scanner_->location().beg_pos; } | 85 int position() { return scanner_->location().beg_pos; } |
| 86 int peek_position() { return scanner_->peek_location().beg_pos; } | 86 int peek_position() { return scanner_->peek_location().beg_pos; } |
| 87 bool stack_overflow() const { return stack_overflow_; } | 87 bool stack_overflow() const { return stack_overflow_; } |
| 88 void set_stack_overflow() { stack_overflow_ = true; } | 88 void set_stack_overflow() { stack_overflow_ = true; } |
| 89 | 89 |
| 90 virtual bool is_classic_mode() = 0; |
| 91 |
| 90 INLINE(Token::Value peek()) { | 92 INLINE(Token::Value peek()) { |
| 91 if (stack_overflow_) return Token::ILLEGAL; | 93 if (stack_overflow_) return Token::ILLEGAL; |
| 92 return scanner()->peek(); | 94 return scanner()->peek(); |
| 93 } | 95 } |
| 94 | 96 |
| 95 INLINE(Token::Value Next()) { | 97 INLINE(Token::Value Next()) { |
| 96 if (stack_overflow_) return Token::ILLEGAL; | 98 if (stack_overflow_) return Token::ILLEGAL; |
| 97 { | 99 { |
| 98 int marker; | 100 int marker; |
| 99 if (reinterpret_cast<uintptr_t>(&marker) < stack_limit_) { | 101 if (reinterpret_cast<uintptr_t>(&marker) < stack_limit_) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 135 bool CheckContextualKeyword(Vector<const char> keyword); | 137 bool CheckContextualKeyword(Vector<const char> keyword); |
| 136 void ExpectContextualKeyword(Vector<const char> keyword, bool* ok); | 138 void ExpectContextualKeyword(Vector<const char> keyword, bool* ok); |
| 137 | 139 |
| 138 // Strict mode octal literal validation. | 140 // Strict mode octal literal validation. |
| 139 void CheckOctalLiteral(int beg_pos, int end_pos, bool* ok); | 141 void CheckOctalLiteral(int beg_pos, int end_pos, bool* ok); |
| 140 | 142 |
| 141 // Determine precedence of given token. | 143 // Determine precedence of given token. |
| 142 static int Precedence(Token::Value token, bool accept_IN); | 144 static int Precedence(Token::Value token, bool accept_IN); |
| 143 | 145 |
| 144 // Report syntax errors. | 146 // Report syntax errors. |
| 145 virtual void ReportUnexpectedToken(Token::Value token) = 0; | 147 void ReportUnexpectedToken(Token::Value token); |
| 146 virtual void ReportMessageAt(Scanner::Location loc, const char* type) = 0; | 148 void ReportMessageAt(Scanner::Location location, const char* type) { |
| 149 ReportMessageAt(location, type, Vector<const char*>::empty()); |
| 150 } |
| 151 virtual void ReportMessageAt(Scanner::Location source_location, |
| 152 const char* message, |
| 153 Vector<const char*> args) = 0; |
| 147 | 154 |
| 148 // Used to detect duplicates in object literals. Each of the values | 155 // Used to detect duplicates in object literals. Each of the values |
| 149 // kGetterProperty, kSetterProperty and kValueProperty represents | 156 // kGetterProperty, kSetterProperty and kValueProperty represents |
| 150 // a type of object literal property. When parsing a property, its | 157 // a type of object literal property. When parsing a property, its |
| 151 // type value is stored in the DuplicateFinder for the property name. | 158 // type value is stored in the DuplicateFinder for the property name. |
| 152 // Values are chosen so that having intersection bits means the there is | 159 // Values are chosen so that having intersection bits means the there is |
| 153 // an incompatibility. | 160 // an incompatibility. |
| 154 // I.e., you can add a getter to a property that already has a setter, since | 161 // I.e., you can add a getter to a property that already has a setter, since |
| 155 // kGetterProperty and kSetterProperty doesn't intersect, but not if it | 162 // kGetterProperty and kSetterProperty doesn't intersect, but not if it |
| 156 // already has a getter or a value. Adding the getter to an existing | 163 // already has a getter or a value. Adding the getter to an existing |
| (...skipping 378 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 Scope* const prev_; | 542 Scope* const prev_; |
| 536 const ScopeType type_; | 543 const ScopeType type_; |
| 537 int materialized_literal_count_; | 544 int materialized_literal_count_; |
| 538 int expected_properties_; | 545 int expected_properties_; |
| 539 int with_nesting_count_; | 546 int with_nesting_count_; |
| 540 LanguageMode language_mode_; | 547 LanguageMode language_mode_; |
| 541 bool is_generator_; | 548 bool is_generator_; |
| 542 }; | 549 }; |
| 543 | 550 |
| 544 // Report syntax error | 551 // Report syntax error |
| 545 void ReportUnexpectedToken(Token::Value token); | 552 void ReportMessageAt(Scanner::Location location, |
| 546 void ReportMessageAt(Scanner::Location location, const char* type) { | 553 const char* message, |
| 547 ReportMessageAt(location, type, NULL); | 554 Vector<const char*> args) { |
| 555 ReportMessageAt(location.beg_pos, |
| 556 location.end_pos, |
| 557 message, |
| 558 args.length() > 0 ? args[0] : NULL); |
| 548 } | 559 } |
| 549 void ReportMessageAt(Scanner::Location location, | 560 void ReportMessageAt(Scanner::Location location, |
| 550 const char* type, | 561 const char* type, |
| 551 const char* name_opt) { | 562 const char* name_opt) { |
| 552 log_->LogMessage(location.beg_pos, location.end_pos, type, name_opt); | 563 log_->LogMessage(location.beg_pos, location.end_pos, type, name_opt); |
| 553 } | 564 } |
| 554 void ReportMessageAt(int start_pos, | 565 void ReportMessageAt(int start_pos, |
| 555 int end_pos, | 566 int end_pos, |
| 556 const char* type, | 567 const char* type, |
| 557 const char* name_opt) { | 568 const char* name_opt) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 618 void LogSymbol(); | 629 void LogSymbol(); |
| 619 // Log the currently parsed identifier. | 630 // Log the currently parsed identifier. |
| 620 Identifier GetIdentifierSymbol(); | 631 Identifier GetIdentifierSymbol(); |
| 621 // Log the currently parsed string literal. | 632 // Log the currently parsed string literal. |
| 622 Expression GetStringSymbol(); | 633 Expression GetStringSymbol(); |
| 623 | 634 |
| 624 void set_language_mode(LanguageMode language_mode) { | 635 void set_language_mode(LanguageMode language_mode) { |
| 625 scope_->set_language_mode(language_mode); | 636 scope_->set_language_mode(language_mode); |
| 626 } | 637 } |
| 627 | 638 |
| 628 bool is_classic_mode() { | 639 virtual bool is_classic_mode() { |
| 629 return scope_->language_mode() == CLASSIC_MODE; | 640 return scope_->language_mode() == CLASSIC_MODE; |
| 630 } | 641 } |
| 631 | 642 |
| 632 bool is_extended_mode() { | 643 bool is_extended_mode() { |
| 633 return scope_->language_mode() == EXTENDED_MODE; | 644 return scope_->language_mode() == EXTENDED_MODE; |
| 634 } | 645 } |
| 635 | 646 |
| 636 LanguageMode language_mode() { return scope_->language_mode(); } | 647 LanguageMode language_mode() { return scope_->language_mode(); } |
| 637 | 648 |
| 638 bool CheckInOrOf(bool accept_OF); | 649 bool CheckInOrOf(bool accept_OF); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 650 ParserRecorder* log_; | 661 ParserRecorder* log_; |
| 651 Scope* scope_; | 662 Scope* scope_; |
| 652 Scanner::Location strict_mode_violation_location_; | 663 Scanner::Location strict_mode_violation_location_; |
| 653 const char* strict_mode_violation_type_; | 664 const char* strict_mode_violation_type_; |
| 654 bool parenthesized_function_; | 665 bool parenthesized_function_; |
| 655 }; | 666 }; |
| 656 | 667 |
| 657 } } // v8::internal | 668 } } // v8::internal |
| 658 | 669 |
| 659 #endif // V8_PREPARSER_H | 670 #endif // V8_PREPARSER_H |
| OLD | NEW |