OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 // Features shared by parsing and pre-parsing scanners. | 5 // Features shared by parsing and pre-parsing scanners. |
6 | 6 |
7 #ifndef V8_SCANNER_H_ | 7 #ifndef V8_SCANNER_H_ |
8 #define V8_SCANNER_H_ | 8 #define V8_SCANNER_H_ |
9 | 9 |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
451 } | 451 } |
452 void SetHarmonyNumericLiterals(bool numeric_literals) { | 452 void SetHarmonyNumericLiterals(bool numeric_literals) { |
453 harmony_numeric_literals_ = numeric_literals; | 453 harmony_numeric_literals_ = numeric_literals; |
454 } | 454 } |
455 bool HarmonyClasses() const { | 455 bool HarmonyClasses() const { |
456 return harmony_classes_; | 456 return harmony_classes_; |
457 } | 457 } |
458 void SetHarmonyClasses(bool classes) { | 458 void SetHarmonyClasses(bool classes) { |
459 harmony_classes_ = classes; | 459 harmony_classes_ = classes; |
460 } | 460 } |
| 461 bool HarmonyUnicode() const { return harmony_unicode_; } |
| 462 void SetHarmonyUnicode(bool unicode) { harmony_unicode_ = unicode; } |
461 | 463 |
462 // Returns true if there was a line terminator before the peek'ed token, | 464 // Returns true if there was a line terminator before the peek'ed token, |
463 // possibly inside a multi-line comment. | 465 // possibly inside a multi-line comment. |
464 bool HasAnyLineTerminatorBeforeNext() const { | 466 bool HasAnyLineTerminatorBeforeNext() const { |
465 return has_line_terminator_before_next_ || | 467 return has_line_terminator_before_next_ || |
466 has_multiline_comment_before_next_; | 468 has_multiline_comment_before_next_; |
467 } | 469 } |
468 | 470 |
469 // Scans the input as a regular expression pattern, previous | 471 // Scans the input as a regular expression pattern, previous |
470 // character(s) must be /(=). Returns true if a pattern is scanned. | 472 // character(s) must be /(=). Returns true if a pattern is scanned. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 bool is_next_literal_one_byte() { | 606 bool is_next_literal_one_byte() { |
605 DCHECK_NOT_NULL(next_.literal_chars); | 607 DCHECK_NOT_NULL(next_.literal_chars); |
606 return next_.literal_chars->is_one_byte(); | 608 return next_.literal_chars->is_one_byte(); |
607 } | 609 } |
608 int next_literal_length() const { | 610 int next_literal_length() const { |
609 DCHECK_NOT_NULL(next_.literal_chars); | 611 DCHECK_NOT_NULL(next_.literal_chars); |
610 return next_.literal_chars->length(); | 612 return next_.literal_chars->length(); |
611 } | 613 } |
612 | 614 |
613 uc32 ScanHexNumber(int expected_length); | 615 uc32 ScanHexNumber(int expected_length); |
| 616 // Scan a number of any length but not bigger than max_value. For example, the |
| 617 // number can be 000000001, so it's very long in characters but its value is |
| 618 // small. |
| 619 uc32 ScanUnlimitedLengthHexNumber(int max_value); |
614 | 620 |
615 // Scans a single JavaScript token. | 621 // Scans a single JavaScript token. |
616 void Scan(); | 622 void Scan(); |
617 | 623 |
618 bool SkipWhiteSpace(); | 624 bool SkipWhiteSpace(); |
619 Token::Value SkipSingleLineComment(); | 625 Token::Value SkipSingleLineComment(); |
620 Token::Value SkipSourceURLComment(); | 626 Token::Value SkipSourceURLComment(); |
621 void TryToParseSourceURLComment(); | 627 void TryToParseSourceURLComment(); |
622 Token::Value SkipMultiLineComment(); | 628 Token::Value SkipMultiLineComment(); |
623 // Scans a possible HTML comment -- begins with '<!'. | 629 // Scans a possible HTML comment -- begins with '<!'. |
624 Token::Value ScanHtmlComment(); | 630 Token::Value ScanHtmlComment(); |
625 | 631 |
626 void ScanDecimalDigits(); | 632 void ScanDecimalDigits(); |
627 Token::Value ScanNumber(bool seen_period); | 633 Token::Value ScanNumber(bool seen_period); |
628 Token::Value ScanIdentifierOrKeyword(); | 634 Token::Value ScanIdentifierOrKeyword(); |
629 Token::Value ScanIdentifierSuffix(LiteralScope* literal); | 635 Token::Value ScanIdentifierSuffix(LiteralScope* literal); |
630 | 636 |
631 Token::Value ScanString(); | 637 Token::Value ScanString(); |
632 | 638 |
633 // Scans an escape-sequence which is part of a string and adds the | 639 // Scans an escape-sequence which is part of a string and adds the |
634 // decoded character to the current literal. Returns true if a pattern | 640 // decoded character to the current literal. Returns true if a pattern |
635 // is scanned. | 641 // is scanned. |
636 bool ScanEscape(); | 642 bool ScanEscape(); |
637 // Decodes a Unicode escape-sequence which is part of an identifier. | 643 // Decodes a Unicode escape-sequence which is part of an identifier. |
638 // If the escape sequence cannot be decoded the result is kBadChar. | 644 // If the escape sequence cannot be decoded the result is kBadChar. |
639 uc32 ScanIdentifierUnicodeEscape(); | 645 uc32 ScanIdentifierUnicodeEscape(); |
| 646 // Helper for the above functions. |
| 647 uc32 ScanUnicodeEscape(); |
640 | 648 |
641 // Return the current source position. | 649 // Return the current source position. |
642 int source_pos() { | 650 int source_pos() { |
643 return source_->pos() - kCharacterLookaheadBufferSize; | 651 return source_->pos() - kCharacterLookaheadBufferSize; |
644 } | 652 } |
645 | 653 |
646 UnicodeCache* unicode_cache_; | 654 UnicodeCache* unicode_cache_; |
647 | 655 |
648 // Buffers collecting literal strings, numbers, etc. | 656 // Buffers collecting literal strings, numbers, etc. |
649 LiteralBuffer literal_buffer1_; | 657 LiteralBuffer literal_buffer1_; |
(...skipping 24 matching lines...) Expand all Loading... |
674 // line-terminator after the current token, and before the next. | 682 // line-terminator after the current token, and before the next. |
675 bool has_multiline_comment_before_next_; | 683 bool has_multiline_comment_before_next_; |
676 // Whether we scan 'let' as a keyword for harmony block-scoped let bindings. | 684 // Whether we scan 'let' as a keyword for harmony block-scoped let bindings. |
677 bool harmony_scoping_; | 685 bool harmony_scoping_; |
678 // Whether we scan 'module', 'import', 'export' as keywords. | 686 // Whether we scan 'module', 'import', 'export' as keywords. |
679 bool harmony_modules_; | 687 bool harmony_modules_; |
680 // Whether we scan 0o777 and 0b111 as numbers. | 688 // Whether we scan 0o777 and 0b111 as numbers. |
681 bool harmony_numeric_literals_; | 689 bool harmony_numeric_literals_; |
682 // Whether we scan 'class', 'extends', 'static' and 'super' as keywords. | 690 // Whether we scan 'class', 'extends', 'static' and 'super' as keywords. |
683 bool harmony_classes_; | 691 bool harmony_classes_; |
| 692 // Whether we allow \u{xxxxx}. |
| 693 bool harmony_unicode_; |
684 }; | 694 }; |
685 | 695 |
686 } } // namespace v8::internal | 696 } } // namespace v8::internal |
687 | 697 |
688 #endif // V8_SCANNER_H_ | 698 #endif // V8_SCANNER_H_ |
OLD | NEW |