| 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_PARSING_PREPARSER_H | 5 #ifndef V8_PARSING_PREPARSER_H |
| 6 #define V8_PARSING_PREPARSER_H | 6 #define V8_PARSING_PREPARSER_H |
| 7 | 7 |
| 8 #include "src/ast/scopes.h" | 8 #include "src/ast/scopes.h" |
| 9 #include "src/bailout-reason.h" | 9 #include "src/bailout-reason.h" |
| 10 #include "src/base/hashmap.h" | 10 #include "src/base/hashmap.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 bool IsArguments() const { return type_ == kArgumentsIdentifier; } | 68 bool IsArguments() const { return type_ == kArgumentsIdentifier; } |
| 69 bool IsEvalOrArguments() const { return IsEval() || IsArguments(); } | 69 bool IsEvalOrArguments() const { return IsEval() || IsArguments(); } |
| 70 bool IsUndefined() const { return type_ == kUndefinedIdentifier; } | 70 bool IsUndefined() const { return type_ == kUndefinedIdentifier; } |
| 71 bool IsLet() const { return type_ == kLetIdentifier; } | 71 bool IsLet() const { return type_ == kLetIdentifier; } |
| 72 bool IsStatic() const { return type_ == kStaticIdentifier; } | 72 bool IsStatic() const { return type_ == kStaticIdentifier; } |
| 73 bool IsYield() const { return type_ == kYieldIdentifier; } | 73 bool IsYield() const { return type_ == kYieldIdentifier; } |
| 74 bool IsPrototype() const { return type_ == kPrototypeIdentifier; } | 74 bool IsPrototype() const { return type_ == kPrototypeIdentifier; } |
| 75 bool IsConstructor() const { return type_ == kConstructorIdentifier; } | 75 bool IsConstructor() const { return type_ == kConstructorIdentifier; } |
| 76 bool IsEnum() const { return type_ == kEnumIdentifier; } | 76 bool IsEnum() const { return type_ == kEnumIdentifier; } |
| 77 bool IsAwait() const { return type_ == kAwaitIdentifier; } | 77 bool IsAwait() const { return type_ == kAwaitIdentifier; } |
| 78 bool IsAsync() const { return type_ == kAsyncIdentifier; } | |
| 79 bool IsFutureStrictReserved() const { | 78 bool IsFutureStrictReserved() const { |
| 80 return type_ == kFutureStrictReservedIdentifier || | 79 return type_ == kFutureStrictReservedIdentifier || |
| 81 type_ == kLetIdentifier || type_ == kStaticIdentifier || | 80 type_ == kLetIdentifier || type_ == kStaticIdentifier || |
| 82 type_ == kYieldIdentifier; | 81 type_ == kYieldIdentifier; |
| 83 } | 82 } |
| 84 | 83 |
| 85 // Allow identifier->name()[->length()] to work. The preparser | 84 // Allow identifier->name()[->length()] to work. The preparser |
| 86 // does not need the actual positions/lengths of the identifiers. | 85 // does not need the actual positions/lengths of the identifiers. |
| 87 const PreParserIdentifier* operator->() const { return this; } | 86 const PreParserIdentifier* operator->() const { return this; } |
| 88 const PreParserIdentifier raw_name() const { return *this; } | 87 const PreParserIdentifier raw_name() const { return *this; } |
| (...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 615 typedef PreParserFormalParameters FormalParameters; | 614 typedef PreParserFormalParameters FormalParameters; |
| 616 typedef PreParserStatementList StatementList; | 615 typedef PreParserStatementList StatementList; |
| 617 | 616 |
| 618 // For constructing objects returned by the traversing functions. | 617 // For constructing objects returned by the traversing functions. |
| 619 typedef PreParserFactory Factory; | 618 typedef PreParserFactory Factory; |
| 620 }; | 619 }; |
| 621 | 620 |
| 622 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} | 621 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} |
| 623 | 622 |
| 624 // Helper functions for recursive descent. | 623 // Helper functions for recursive descent. |
| 625 static bool IsEval(PreParserIdentifier identifier) { | 624 bool IsEval(PreParserIdentifier identifier) const { |
| 626 return identifier.IsEval(); | 625 return identifier.IsEval(); |
| 627 } | 626 } |
| 628 | 627 |
| 629 static bool IsArguments(PreParserIdentifier identifier) { | 628 bool IsArguments(PreParserIdentifier identifier) const { |
| 630 return identifier.IsArguments(); | 629 return identifier.IsArguments(); |
| 631 } | 630 } |
| 632 | 631 |
| 633 static bool IsAwait(PreParserIdentifier identifier) { | 632 bool IsAwait(PreParserIdentifier identifier) const { |
| 634 return identifier.IsAwait(); | 633 return identifier.IsAwait(); |
| 635 } | 634 } |
| 636 | 635 |
| 637 static bool IsAsync(PreParserIdentifier identifier) { | 636 bool IsEvalOrArguments(PreParserIdentifier identifier) const { |
| 638 return identifier.IsAsync(); | |
| 639 } | |
| 640 | |
| 641 static bool IsEvalOrArguments(PreParserIdentifier identifier) { | |
| 642 return identifier.IsEvalOrArguments(); | 637 return identifier.IsEvalOrArguments(); |
| 643 } | 638 } |
| 644 | 639 |
| 645 static bool IsUndefined(PreParserIdentifier identifier) { | 640 bool IsUndefined(PreParserIdentifier identifier) const { |
| 646 return identifier.IsUndefined(); | 641 return identifier.IsUndefined(); |
| 647 } | 642 } |
| 648 | 643 |
| 649 static bool IsPrototype(PreParserIdentifier identifier) { | 644 bool IsPrototype(PreParserIdentifier identifier) const { |
| 650 return identifier.IsPrototype(); | 645 return identifier.IsPrototype(); |
| 651 } | 646 } |
| 652 | 647 |
| 653 static bool IsConstructor(PreParserIdentifier identifier) { | 648 bool IsConstructor(PreParserIdentifier identifier) const { |
| 654 return identifier.IsConstructor(); | 649 return identifier.IsConstructor(); |
| 655 } | 650 } |
| 656 | 651 |
| 657 // Returns true if the expression is of type "this.foo". | 652 // Returns true if the expression is of type "this.foo". |
| 658 static bool IsThisProperty(PreParserExpression expression) { | 653 static bool IsThisProperty(PreParserExpression expression) { |
| 659 return expression.IsThisProperty(); | 654 return expression.IsThisProperty(); |
| 660 } | 655 } |
| 661 | 656 |
| 662 static bool IsIdentifier(PreParserExpression expression) { | 657 static bool IsIdentifier(PreParserExpression expression) { |
| 663 return expression.IsIdentifier(); | 658 return expression.IsIdentifier(); |
| 664 } | 659 } |
| 665 | 660 |
| 666 static PreParserIdentifier AsIdentifier(PreParserExpression expression) { | 661 static PreParserIdentifier AsIdentifier(PreParserExpression expression) { |
| 667 return expression.AsIdentifier(); | 662 return expression.AsIdentifier(); |
| 668 } | 663 } |
| 669 | 664 |
| 670 static bool IsEvalIdentifier(PreParserExpression expression) { | 665 bool IsDirectEvalCall(PreParserExpression expression) const { |
| 671 return IsIdentifier(expression) && IsEval(AsIdentifier(expression)); | |
| 672 } | |
| 673 | |
| 674 static bool IsDirectEvalCall(PreParserExpression expression) { | |
| 675 return expression.IsDirectEvalCall(); | 666 return expression.IsDirectEvalCall(); |
| 676 } | 667 } |
| 677 | 668 |
| 678 static bool IsFutureStrictReserved(PreParserIdentifier identifier) { | 669 bool IsFutureStrictReserved(PreParserIdentifier identifier) const { |
| 679 return identifier.IsFutureStrictReserved(); | 670 return identifier.IsFutureStrictReserved(); |
| 680 } | 671 } |
| 681 | 672 |
| 682 static bool IsBoilerplateProperty(PreParserExpression property) { | 673 static bool IsBoilerplateProperty(PreParserExpression property) { |
| 683 // PreParser doesn't count boilerplate properties. | 674 // PreParser doesn't count boilerplate properties. |
| 684 return false; | 675 return false; |
| 685 } | 676 } |
| 686 | 677 |
| 687 static bool IsArrayIndex(PreParserIdentifier string, uint32_t* index) { | 678 static bool IsArrayIndex(PreParserIdentifier string, uint32_t* index) { |
| 688 return false; | 679 return false; |
| 689 } | 680 } |
| 690 | 681 |
| 691 static PreParserExpression GetPropertyValue(PreParserExpression property) { | 682 static PreParserExpression GetPropertyValue(PreParserExpression property) { |
| 692 return PreParserExpression::Default(); | 683 return PreParserExpression::Default(); |
| 693 } | 684 } |
| 694 | 685 |
| 695 // Functions for encapsulating the differences between parsing and preparsing; | 686 // Functions for encapsulating the differences between parsing and preparsing; |
| 696 // operations interleaved with the recursive descent. | 687 // operations interleaved with the recursive descent. |
| 697 static void PushLiteralName(FuncNameInferrer* fni, PreParserIdentifier id) { | 688 static void PushLiteralName(FuncNameInferrer* fni, PreParserIdentifier id) { |
| 698 // PreParser should not use FuncNameInferrer. | 689 // PreParser should not use FuncNameInferrer. |
| 699 UNREACHABLE(); | 690 UNREACHABLE(); |
| 700 } | 691 } |
| 701 | 692 |
| 702 static void PushPropertyName(FuncNameInferrer* fni, | 693 void PushPropertyName(FuncNameInferrer* fni, PreParserExpression expression) { |
| 703 PreParserExpression expression) { | |
| 704 // PreParser should not use FuncNameInferrer. | 694 // PreParser should not use FuncNameInferrer. |
| 705 UNREACHABLE(); | 695 UNREACHABLE(); |
| 706 } | 696 } |
| 707 | 697 |
| 708 static void InferFunctionName(FuncNameInferrer* fni, | 698 static void InferFunctionName(FuncNameInferrer* fni, |
| 709 PreParserExpression expression) { | 699 PreParserExpression expression) { |
| 710 // PreParser should not use FuncNameInferrer. | 700 // PreParser should not use FuncNameInferrer. |
| 711 UNREACHABLE(); | 701 UNREACHABLE(); |
| 712 } | 702 } |
| 713 | 703 |
| 714 static void CheckAssigningFunctionLiteralToProperty( | 704 static void CheckAssigningFunctionLiteralToProperty( |
| 715 PreParserExpression left, PreParserExpression right) {} | 705 PreParserExpression left, PreParserExpression right) {} |
| 716 | 706 |
| 717 static PreParserExpression MarkExpressionAsAssigned( | 707 static PreParserExpression MarkExpressionAsAssigned( |
| 718 PreParserExpression expression) { | 708 PreParserExpression expression) { |
| 719 // TODO(marja): To be able to produce the same errors, the preparser needs | 709 // TODO(marja): To be able to produce the same errors, the preparser needs |
| 720 // to start tracking which expressions are variables and which are assigned. | 710 // to start tracking which expressions are variables and which are assigned. |
| 721 return expression; | 711 return expression; |
| 722 } | 712 } |
| 723 | 713 |
| 724 bool ShortcutNumericLiteralBinaryExpression(PreParserExpression* x, | 714 bool ShortcutNumericLiteralBinaryExpression(PreParserExpression* x, |
| 725 PreParserExpression y, | 715 PreParserExpression y, |
| 726 Token::Value op, | 716 Token::Value op, int pos, |
| 727 int pos, | |
| 728 PreParserFactory* factory) { | 717 PreParserFactory* factory) { |
| 729 return false; | 718 return false; |
| 730 } | 719 } |
| 731 | 720 |
| 732 PreParserExpression BuildUnaryExpression(PreParserExpression expression, | 721 PreParserExpression BuildUnaryExpression(PreParserExpression expression, |
| 733 Token::Value op, int pos, | 722 Token::Value op, int pos, |
| 734 PreParserFactory* factory) { | 723 PreParserFactory* factory) { |
| 735 return PreParserExpression::Default(); | 724 return PreParserExpression::Default(); |
| 736 } | 725 } |
| 737 | 726 |
| 738 PreParserExpression BuildIteratorResult(PreParserExpression value, | 727 PreParserExpression BuildIteratorResult(PreParserExpression value, |
| 739 bool done) { | 728 bool done) { |
| 740 return PreParserExpression::Default(); | 729 return PreParserExpression::Default(); |
| 741 } | 730 } |
| 731 |
| 742 PreParserExpression NewThrowReferenceError(MessageTemplate::Template message, | 732 PreParserExpression NewThrowReferenceError(MessageTemplate::Template message, |
| 743 int pos) { | 733 int pos) { |
| 744 return PreParserExpression::Default(); | 734 return PreParserExpression::Default(); |
| 745 } | 735 } |
| 736 |
| 746 PreParserExpression NewThrowSyntaxError(MessageTemplate::Template message, | 737 PreParserExpression NewThrowSyntaxError(MessageTemplate::Template message, |
| 747 Handle<Object> arg, int pos) { | 738 PreParserIdentifier arg, int pos) { |
| 748 return PreParserExpression::Default(); | |
| 749 } | |
| 750 PreParserExpression NewThrowTypeError(MessageTemplate::Template message, | |
| 751 Handle<Object> arg, int pos) { | |
| 752 return PreParserExpression::Default(); | 739 return PreParserExpression::Default(); |
| 753 } | 740 } |
| 754 | 741 |
| 742 PreParserExpression NewThrowTypeError(MessageTemplate::Template message, |
| 743 PreParserIdentifier arg, int pos) { |
| 744 return PreParserExpression::Default(); |
| 745 } |
| 746 |
| 755 // Reporting errors. | 747 // Reporting errors. |
| 756 void ReportMessageAt(Scanner::Location location, | 748 void ReportMessageAt(Scanner::Location location, |
| 757 MessageTemplate::Template message, | 749 MessageTemplate::Template message, |
| 758 const char* arg = NULL, | 750 const char* arg = NULL, |
| 759 ParseErrorType error_type = kSyntaxError); | 751 ParseErrorType error_type = kSyntaxError); |
| 760 void ReportMessageAt(int start_pos, int end_pos, | 752 void ReportMessageAt(Scanner::Location location, |
| 761 MessageTemplate::Template message, | 753 MessageTemplate::Template message, |
| 762 const char* arg = NULL, | 754 const AstRawString* arg, |
| 763 ParseErrorType error_type = kSyntaxError); | 755 ParseErrorType error_type = kSyntaxError); |
| 764 | 756 |
| 765 // A dummy function, just useful as an argument to CHECK_OK_CUSTOM. | 757 // A dummy function, just useful as an argument to CHECK_OK_CUSTOM. |
| 766 static void Void() {} | 758 static void Void() {} |
| 767 | 759 |
| 768 // "null" return type creators. | 760 // "null" return type creators. |
| 769 static PreParserIdentifier EmptyIdentifier() { | 761 static PreParserIdentifier EmptyIdentifier() { |
| 770 return PreParserIdentifier::Default(); | 762 return PreParserIdentifier::Default(); |
| 771 } | 763 } |
| 772 static PreParserIdentifier EmptyIdentifierString() { | 764 static PreParserIdentifier EmptyIdentifierString() { |
| 773 return PreParserIdentifier::Default(); | 765 return PreParserIdentifier::Default(); |
| 774 } | 766 } |
| 775 static PreParserExpression EmptyExpression() { | 767 static PreParserExpression EmptyExpression() { |
| 776 return PreParserExpression::Default(); | 768 return PreParserExpression::Default(); |
| 777 } | 769 } |
| 778 static PreParserExpression EmptyLiteral() { | 770 static PreParserExpression EmptyLiteral() { |
| 779 return PreParserExpression::Default(); | 771 return PreParserExpression::Default(); |
| 780 } | 772 } |
| 781 static PreParserExpression EmptyObjectLiteralProperty() { | 773 static PreParserExpression EmptyObjectLiteralProperty() { |
| 782 return PreParserExpression::Default(); | 774 return PreParserExpression::Default(); |
| 783 } | 775 } |
| 784 static PreParserExpression EmptyFunctionLiteral() { | 776 static PreParserExpression EmptyFunctionLiteral() { |
| 785 return PreParserExpression::Default(); | 777 return PreParserExpression::Default(); |
| 786 } | 778 } |
| 787 static PreParserExpressionList NullExpressionList() { | 779 static PreParserExpressionList NullExpressionList() { |
| 788 return PreParserExpressionList(); | 780 return PreParserExpressionList(); |
| 789 } | 781 } |
| 790 | 782 |
| 791 // Odd-ball literal creators. | 783 // Odd-ball literal creators. |
| 792 static PreParserExpression GetLiteralTheHole(int position, | 784 PreParserExpression GetLiteralTheHole(int position, |
| 793 PreParserFactory* factory) { | 785 PreParserFactory* factory) const { |
| 794 return PreParserExpression::Default(); | 786 return PreParserExpression::Default(); |
| 795 } | 787 } |
| 796 | 788 |
| 797 // Producing data during the recursive descent. | 789 // Producing data during the recursive descent. |
| 798 PreParserIdentifier GetSymbol(Scanner* scanner); | 790 PreParserIdentifier GetSymbol(Scanner* scanner); |
| 799 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner); | 791 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner) { |
| 800 | |
| 801 static PreParserIdentifier GetNextSymbol(Scanner* scanner) { | |
| 802 return PreParserIdentifier::Default(); | 792 return PreParserIdentifier::Default(); |
| 803 } | 793 } |
| 804 | 794 |
| 805 static PreParserExpression ThisExpression(int pos) { | 795 PreParserIdentifier GetNextSymbol(Scanner* scanner) const { |
| 796 return PreParserIdentifier::Default(); |
| 797 } |
| 798 |
| 799 PreParserExpression ThisExpression(int pos = kNoSourcePosition) const { |
| 806 return PreParserExpression::This(); | 800 return PreParserExpression::This(); |
| 807 } | 801 } |
| 808 | 802 |
| 809 static PreParserExpression NewSuperPropertyReference( | 803 PreParserExpression NewSuperPropertyReference(PreParserFactory* factory, |
| 810 PreParserFactory* factory, int pos) { | 804 int pos) const { |
| 811 return PreParserExpression::Default(); | 805 return PreParserExpression::Default(); |
| 812 } | 806 } |
| 813 | 807 |
| 814 static PreParserExpression NewSuperCallReference(PreParserFactory* factory, | 808 PreParserExpression NewSuperCallReference(PreParserFactory* factory, |
| 815 int pos) { | 809 int pos) const { |
| 816 return PreParserExpression::SuperCallReference(); | 810 return PreParserExpression::SuperCallReference(); |
| 817 } | 811 } |
| 818 | 812 |
| 819 static PreParserExpression NewTargetExpression(int pos) { | 813 PreParserExpression NewTargetExpression(int pos) const { |
| 820 return PreParserExpression::Default(); | 814 return PreParserExpression::Default(); |
| 821 } | 815 } |
| 822 | 816 |
| 823 static PreParserExpression FunctionSentExpression(PreParserFactory* factory, | 817 PreParserExpression FunctionSentExpression(PreParserFactory* factory, |
| 824 int pos) { | 818 int pos) const { |
| 825 return PreParserExpression::Default(); | 819 return PreParserExpression::Default(); |
| 826 } | 820 } |
| 827 | 821 |
| 828 static PreParserExpression ExpressionFromLiteral( | 822 PreParserExpression ExpressionFromLiteral(Token::Value token, int pos, |
| 829 Token::Value token, int pos, Scanner* scanner, | 823 Scanner* scanner, |
| 830 PreParserFactory* factory) { | 824 PreParserFactory* factory) const { |
| 831 return PreParserExpression::Default(); | 825 return PreParserExpression::Default(); |
| 832 } | 826 } |
| 833 | 827 |
| 834 static PreParserExpression ExpressionFromIdentifier( | 828 PreParserExpression ExpressionFromIdentifier( |
| 835 PreParserIdentifier name, int start_position, int end_position, | 829 PreParserIdentifier name, int start_position, int end_position, |
| 836 InferName = InferName::kYes) { | 830 InferName = InferName::kYes) const { |
| 837 return PreParserExpression::FromIdentifier(name); | 831 return PreParserExpression::FromIdentifier(name); |
| 838 } | 832 } |
| 839 | 833 |
| 840 PreParserExpression ExpressionFromString(int pos, | 834 PreParserExpression ExpressionFromString(int pos, Scanner* scanner, |
| 841 Scanner* scanner, | 835 PreParserFactory* factory); |
| 842 PreParserFactory* factory = NULL); | |
| 843 | 836 |
| 844 PreParserExpression GetIterator(PreParserExpression iterable, | 837 PreParserExpression GetIterator(PreParserExpression iterable, |
| 845 PreParserFactory* factory, int pos) { | 838 PreParserFactory* factory, int pos) { |
| 846 return PreParserExpression::Default(); | 839 return PreParserExpression::Default(); |
| 847 } | 840 } |
| 848 | 841 |
| 849 static PreParserExpressionList NewExpressionList(int size, Zone* zone) { | 842 PreParserExpressionList NewExpressionList(int size, Zone* zone) const { |
| 850 return PreParserExpressionList(); | 843 return PreParserExpressionList(); |
| 851 } | 844 } |
| 852 | 845 |
| 853 static PreParserStatementList NewStatementList(int size, Zone* zone) { | 846 PreParserStatementList NewStatementList(int size, Zone* zone) const { |
| 854 return PreParserStatementList(); | 847 return PreParserStatementList(); |
| 855 } | 848 } |
| 856 | 849 |
| 857 static PreParserExpressionList NewPropertyList(int size, Zone* zone) { | 850 PreParserExpressionList NewPropertyList(int size, Zone* zone) const { |
| 858 return PreParserExpressionList(); | 851 return PreParserExpressionList(); |
| 859 } | 852 } |
| 860 | 853 |
| 861 static void AddParameterInitializationBlock( | 854 void AddParameterInitializationBlock( |
| 862 const PreParserFormalParameters& parameters, PreParserStatementList list, | 855 const PreParserFormalParameters& parameters, PreParserStatementList list, |
| 863 bool is_async, bool* ok) {} | 856 bool is_async, bool* ok) const {} |
| 864 | 857 |
| 865 V8_INLINE void SkipLazyFunctionBody(int* materialized_literal_count, | 858 V8_INLINE void SkipLazyFunctionBody( |
| 866 int* expected_property_count, bool* ok) { | 859 int* materialized_literal_count, int* expected_property_count, bool* ok, |
| 860 Scanner::BookmarkScope* bookmark = nullptr) { |
| 867 UNREACHABLE(); | 861 UNREACHABLE(); |
| 868 } | 862 } |
| 869 | 863 |
| 870 V8_INLINE PreParserStatementList ParseEagerFunctionBody( | 864 V8_INLINE PreParserStatementList ParseEagerFunctionBody( |
| 871 PreParserIdentifier function_name, int pos, | 865 PreParserIdentifier name, int pos, |
| 872 const PreParserFormalParameters& parameters, FunctionKind kind, | 866 const PreParserFormalParameters& parameters, FunctionKind kind, |
| 873 FunctionLiteral::FunctionType function_type, bool* ok); | 867 FunctionLiteral::FunctionType function_type, bool* ok); |
| 874 | 868 |
| 875 V8_INLINE void ParseArrowFunctionFormalParameterList( | 869 V8_INLINE void ParseArrowFunctionFormalParameterList( |
| 876 PreParserFormalParameters* parameters, PreParserExpression expression, | 870 PreParserFormalParameters* parameters, PreParserExpression expression, |
| 877 const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, | 871 const Scanner::Location& params_loc, Scanner::Location* duplicate_loc, |
| 878 const Scope::Snapshot& scope_snapshot, bool* ok); | 872 const Scope::Snapshot& scope_snapshot, bool* ok); |
| 879 | 873 |
| 880 void ParseAsyncArrowSingleExpressionBody( | 874 void ParseAsyncArrowSingleExpressionBody( |
| 881 PreParserStatementList body, bool accept_IN, | 875 PreParserStatementList body, bool accept_IN, |
| 882 Type::ExpressionClassifier* classifier, int pos, bool* ok); | 876 Type::ExpressionClassifier* classifier, int pos, bool* ok); |
| 883 | 877 |
| 884 V8_INLINE PreParserExpression ParseAsyncFunctionExpression(bool* ok); | 878 V8_INLINE PreParserExpression ParseAsyncFunctionExpression(bool* ok); |
| 885 | 879 |
| 886 void ReindexLiterals(const PreParserFormalParameters& paramaters) {} | 880 void ReindexLiterals(const PreParserFormalParameters& parameters) {} |
| 887 | 881 |
| 888 struct TemplateLiteralState {}; | 882 struct TemplateLiteralState {}; |
| 889 | 883 |
| 890 TemplateLiteralState OpenTemplateLiteral(int pos) { | 884 TemplateLiteralState OpenTemplateLiteral(int pos) { |
| 891 return TemplateLiteralState(); | 885 return TemplateLiteralState(); |
| 892 } | 886 } |
| 893 void AddTemplateSpan(TemplateLiteralState*, bool) {} | 887 void AddTemplateSpan(TemplateLiteralState* state, bool tail) {} |
| 894 void AddTemplateExpression(TemplateLiteralState*, PreParserExpression) {} | 888 void AddTemplateExpression(TemplateLiteralState* state, |
| 895 PreParserExpression CloseTemplateLiteral(TemplateLiteralState*, int, | 889 PreParserExpression expression) {} |
| 896 PreParserExpression tag) { | 890 V8_INLINE PreParserExpression CloseTemplateLiteral( |
| 897 if (IsTaggedTemplate(tag)) { | 891 TemplateLiteralState* state, int start, PreParserExpression tag); |
| 898 // Emulate generation of array literals for tag callsite | |
| 899 // 1st is array of cooked strings, second is array of raw strings | |
| 900 MaterializeTemplateCallsiteLiterals(); | |
| 901 } | |
| 902 return EmptyExpression(); | |
| 903 } | |
| 904 inline void MaterializeTemplateCallsiteLiterals(); | |
| 905 PreParserExpression NoTemplateTag() { | 892 PreParserExpression NoTemplateTag() { |
| 906 return PreParserExpression::NoTemplateTag(); | 893 return PreParserExpression::NoTemplateTag(); |
| 907 } | 894 } |
| 908 static bool IsTaggedTemplate(const PreParserExpression tag) { | 895 static bool IsTaggedTemplate(const PreParserExpression tag) { |
| 909 return !tag.IsNoTemplateTag(); | 896 return !tag.IsNoTemplateTag(); |
| 910 } | 897 } |
| 911 | 898 |
| 912 void AddFormalParameter(PreParserFormalParameters* parameters, | 899 void AddFormalParameter(PreParserFormalParameters* parameters, |
| 913 PreParserExpression pattern, | 900 PreParserExpression pattern, |
| 914 PreParserExpression initializer, | 901 PreParserExpression initializer, |
| (...skipping 19 matching lines...) Expand all Loading... |
| 934 int function_token_position, FunctionLiteral::FunctionType type, | 921 int function_token_position, FunctionLiteral::FunctionType type, |
| 935 LanguageMode language_mode, bool* ok); | 922 LanguageMode language_mode, bool* ok); |
| 936 | 923 |
| 937 PreParserExpression ParseClassLiteral(Type::ExpressionClassifier* classifier, | 924 PreParserExpression ParseClassLiteral(Type::ExpressionClassifier* classifier, |
| 938 PreParserIdentifier name, | 925 PreParserIdentifier name, |
| 939 Scanner::Location class_name_location, | 926 Scanner::Location class_name_location, |
| 940 bool name_is_strict_reserved, int pos, | 927 bool name_is_strict_reserved, int pos, |
| 941 bool* ok); | 928 bool* ok); |
| 942 | 929 |
| 943 V8_INLINE void MarkCollectedTailCallExpressions() {} | 930 V8_INLINE void MarkCollectedTailCallExpressions() {} |
| 944 V8_INLINE void MarkTailPosition(PreParserExpression) {} | 931 V8_INLINE void MarkTailPosition(PreParserExpression expression) {} |
| 945 | 932 |
| 946 PreParserExpressionList PrepareSpreadArguments(PreParserExpressionList list) { | 933 PreParserExpressionList PrepareSpreadArguments(PreParserExpressionList list) { |
| 947 return list; | 934 return list; |
| 948 } | 935 } |
| 949 | 936 |
| 950 inline void MaterializeUnspreadArgumentsLiterals(int count); | 937 inline void MaterializeUnspreadArgumentsLiterals(int count); |
| 951 | 938 |
| 952 inline PreParserExpression SpreadCall(PreParserExpression function, | 939 inline PreParserExpression SpreadCall(PreParserExpression function, |
| 953 PreParserExpressionList args, int pos); | 940 PreParserExpressionList args, int pos); |
| 954 | 941 |
| (...skipping 11 matching lines...) Expand all Loading... |
| 966 inline PreParserExpression RewriteExponentiation(PreParserExpression left, | 953 inline PreParserExpression RewriteExponentiation(PreParserExpression left, |
| 967 PreParserExpression right, | 954 PreParserExpression right, |
| 968 int pos) { | 955 int pos) { |
| 969 return left; | 956 return left; |
| 970 } | 957 } |
| 971 inline PreParserExpression RewriteAssignExponentiation( | 958 inline PreParserExpression RewriteAssignExponentiation( |
| 972 PreParserExpression left, PreParserExpression right, int pos) { | 959 PreParserExpression left, PreParserExpression right, int pos) { |
| 973 return left; | 960 return left; |
| 974 } | 961 } |
| 975 | 962 |
| 976 inline void QueueDestructuringAssignmentForRewriting(PreParserExpression) {} | 963 inline void QueueDestructuringAssignmentForRewriting( |
| 977 inline void QueueNonPatternForRewriting(PreParserExpression, bool* ok) {} | 964 PreParserExpression assignment) {} |
| 965 inline void QueueNonPatternForRewriting(PreParserExpression expr, bool* ok) {} |
| 978 | 966 |
| 979 void SetFunctionNameFromPropertyName(PreParserExpression, | 967 void SetFunctionNameFromPropertyName(PreParserExpression property, |
| 980 PreParserIdentifier) {} | 968 PreParserIdentifier name) {} |
| 981 void SetFunctionNameFromIdentifierRef(PreParserExpression, | 969 void SetFunctionNameFromIdentifierRef(PreParserExpression value, |
| 982 PreParserExpression) {} | 970 PreParserExpression identifier) {} |
| 983 | 971 |
| 984 inline void RewriteNonPattern(Type::ExpressionClassifier* classifier, | 972 inline void RewriteNonPattern(Type::ExpressionClassifier* classifier, |
| 985 bool* ok); | 973 bool* ok); |
| 986 | 974 |
| 987 inline PreParserExpression RewriteAwaitExpression(PreParserExpression value, | 975 inline PreParserExpression RewriteAwaitExpression(PreParserExpression value, |
| 988 int pos); | 976 int pos); |
| 989 | 977 |
| 990 V8_INLINE ZoneList<typename Type::ExpressionClassifier::Error>* | 978 V8_INLINE ZoneList<typename Type::ExpressionClassifier::Error>* |
| 991 GetReportedErrorList() const; | 979 GetReportedErrorList() const; |
| 992 V8_INLINE Zone* zone() const; | 980 V8_INLINE Zone* zone() const; |
| 993 V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const; | 981 V8_INLINE ZoneList<PreParserExpression>* GetNonPatternList() const; |
| 994 | 982 |
| 995 inline PreParserExpression RewriteYieldStar( | 983 inline PreParserExpression RewriteYieldStar(PreParserExpression generator, |
| 996 PreParserExpression generator, PreParserExpression expr, int pos); | 984 PreParserExpression expression, |
| 985 int pos); |
| 997 | 986 |
| 998 private: | 987 private: |
| 999 PreParser* pre_parser_; | 988 PreParser* pre_parser_; |
| 1000 }; | 989 }; |
| 1001 | 990 |
| 1002 | 991 |
| 1003 // Preparsing checks a JavaScript program and emits preparse-data that helps | 992 // Preparsing checks a JavaScript program and emits preparse-data that helps |
| 1004 // a later parsing to be faster. | 993 // a later parsing to be faster. |
| 1005 // See preparse-data-format.h for the data format. | 994 // See preparse-data-format.h for the data format. |
| 1006 | 995 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1129 Statement ParseWhileStatement(bool* ok); | 1118 Statement ParseWhileStatement(bool* ok); |
| 1130 Statement ParseForStatement(bool* ok); | 1119 Statement ParseForStatement(bool* ok); |
| 1131 Statement ParseThrowStatement(bool* ok); | 1120 Statement ParseThrowStatement(bool* ok); |
| 1132 Statement ParseTryStatement(bool* ok); | 1121 Statement ParseTryStatement(bool* ok); |
| 1133 Statement ParseDebuggerStatement(bool* ok); | 1122 Statement ParseDebuggerStatement(bool* ok); |
| 1134 Expression ParseConditionalExpression(bool accept_IN, bool* ok); | 1123 Expression ParseConditionalExpression(bool accept_IN, bool* ok); |
| 1135 Expression ParseObjectLiteral(bool* ok); | 1124 Expression ParseObjectLiteral(bool* ok); |
| 1136 Expression ParseV8Intrinsic(bool* ok); | 1125 Expression ParseV8Intrinsic(bool* ok); |
| 1137 Expression ParseDoExpression(bool* ok); | 1126 Expression ParseDoExpression(bool* ok); |
| 1138 | 1127 |
| 1139 V8_INLINE void SkipLazyFunctionBody(int* materialized_literal_count, | |
| 1140 int* expected_property_count, bool* ok); | |
| 1141 V8_INLINE PreParserStatementList ParseEagerFunctionBody( | 1128 V8_INLINE PreParserStatementList ParseEagerFunctionBody( |
| 1142 PreParserIdentifier function_name, int pos, | 1129 PreParserIdentifier function_name, int pos, |
| 1143 const PreParserFormalParameters& parameters, FunctionKind kind, | 1130 const PreParserFormalParameters& parameters, FunctionKind kind, |
| 1144 FunctionLiteral::FunctionType function_type, bool* ok); | 1131 FunctionLiteral::FunctionType function_type, bool* ok); |
| 1145 | 1132 |
| 1146 Expression ParseFunctionLiteral( | 1133 Expression ParseFunctionLiteral( |
| 1147 Identifier name, Scanner::Location function_name_location, | 1134 Identifier name, Scanner::Location function_name_location, |
| 1148 FunctionNameValidity function_name_validity, FunctionKind kind, | 1135 FunctionNameValidity function_name_validity, FunctionKind kind, |
| 1149 int function_token_pos, FunctionLiteral::FunctionType function_type, | 1136 int function_token_pos, FunctionLiteral::FunctionType function_type, |
| 1150 LanguageMode language_mode, bool* ok); | 1137 LanguageMode language_mode, bool* ok); |
| 1151 void ParseLazyFunctionLiteralBody(bool* ok, | 1138 void ParseLazyFunctionLiteralBody(bool* ok, |
| 1152 Scanner::BookmarkScope* bookmark = nullptr); | 1139 Scanner::BookmarkScope* bookmark = nullptr); |
| 1153 | 1140 |
| 1154 PreParserExpression ParseClassLiteral(ExpressionClassifier* classifier, | 1141 PreParserExpression ParseClassLiteral(ExpressionClassifier* classifier, |
| 1155 PreParserIdentifier name, | 1142 PreParserIdentifier name, |
| 1156 Scanner::Location class_name_location, | 1143 Scanner::Location class_name_location, |
| 1157 bool name_is_strict_reserved, int pos, | 1144 bool name_is_strict_reserved, int pos, |
| 1158 bool* ok); | 1145 bool* ok); |
| 1159 | 1146 |
| 1160 int* use_counts_; | 1147 int* use_counts_; |
| 1161 }; | 1148 }; |
| 1162 | 1149 |
| 1163 | 1150 |
| 1164 void PreParserTraits::MaterializeTemplateCallsiteLiterals() { | |
| 1165 pre_parser_->function_state_->NextMaterializedLiteralIndex(); | |
| 1166 pre_parser_->function_state_->NextMaterializedLiteralIndex(); | |
| 1167 } | |
| 1168 | |
| 1169 | |
| 1170 void PreParserTraits::MaterializeUnspreadArgumentsLiterals(int count) { | 1151 void PreParserTraits::MaterializeUnspreadArgumentsLiterals(int count) { |
| 1171 for (int i = 0; i < count; ++i) { | 1152 for (int i = 0; i < count; ++i) { |
| 1172 pre_parser_->function_state_->NextMaterializedLiteralIndex(); | 1153 pre_parser_->function_state_->NextMaterializedLiteralIndex(); |
| 1173 } | 1154 } |
| 1174 } | 1155 } |
| 1175 | 1156 |
| 1176 | 1157 |
| 1177 PreParserExpression PreParserTraits::SpreadCall(PreParserExpression function, | 1158 PreParserExpression PreParserTraits::SpreadCall(PreParserExpression function, |
| 1178 PreParserExpressionList args, | 1159 PreParserExpressionList args, |
| 1179 int pos) { | 1160 int pos) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1255 | 1236 |
| 1256 | 1237 |
| 1257 PreParserStatementList PreParserTraits::ParseEagerFunctionBody( | 1238 PreParserStatementList PreParserTraits::ParseEagerFunctionBody( |
| 1258 PreParserIdentifier function_name, int pos, | 1239 PreParserIdentifier function_name, int pos, |
| 1259 const PreParserFormalParameters& parameters, FunctionKind kind, | 1240 const PreParserFormalParameters& parameters, FunctionKind kind, |
| 1260 FunctionLiteral::FunctionType function_type, bool* ok) { | 1241 FunctionLiteral::FunctionType function_type, bool* ok) { |
| 1261 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters, | 1242 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters, |
| 1262 kind, function_type, ok); | 1243 kind, function_type, ok); |
| 1263 } | 1244 } |
| 1264 | 1245 |
| 1246 PreParserExpression PreParserTraits::CloseTemplateLiteral( |
| 1247 TemplateLiteralState* state, int start, PreParserExpression tag) { |
| 1248 if (IsTaggedTemplate(tag)) { |
| 1249 // Emulate generation of array literals for tag callsite |
| 1250 // 1st is array of cooked strings, second is array of raw strings |
| 1251 pre_parser_->function_state_->NextMaterializedLiteralIndex(); |
| 1252 pre_parser_->function_state_->NextMaterializedLiteralIndex(); |
| 1253 } |
| 1254 return EmptyExpression(); |
| 1255 } |
| 1256 |
| 1265 } // namespace internal | 1257 } // namespace internal |
| 1266 } // namespace v8 | 1258 } // namespace v8 |
| 1267 | 1259 |
| 1268 #endif // V8_PARSING_PREPARSER_H | 1260 #endif // V8_PARSING_PREPARSER_H |
| OLD | NEW |