| 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/hashmap.h" | 10 #include "src/hashmap.h" |
| (...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 | 514 |
| 515 bool valid_type_; | 515 bool valid_type_; |
| 516 bool valid_binder_; | 516 bool valid_binder_; |
| 517 bool string_; | 517 bool string_; |
| 518 int arity_; | 518 int arity_; |
| 519 }; | 519 }; |
| 520 | 520 |
| 521 | 521 |
| 522 typedef PreParserList<PreParserType> PreParserTypeList; | 522 typedef PreParserList<PreParserType> PreParserTypeList; |
| 523 | 523 |
| 524 |
| 525 class PreParserTypeMember { |
| 526 public: |
| 527 static PreParserTypeMember Default(bool valid_type, bool valid_binder) { |
| 528 return PreParserTypeMember(valid_type, valid_binder); |
| 529 } |
| 530 static PreParserTypeMember IndexSignature() { |
| 531 return PreParserTypeMember(true, false); |
| 532 } |
| 533 bool IsValidType() const { return valid_type_; } |
| 534 bool IsValidBindingIdentifierOrPattern() const { return valid_binder_; } |
| 535 |
| 536 // Dummy implementation for making type_member->somefunc() work in both |
| 537 // Parser and PreParser. |
| 538 PreParserTypeMember* operator->() { return this; } |
| 539 |
| 540 private: |
| 541 PreParserTypeMember(bool valid_type, bool valid_binder) |
| 542 : valid_type_(valid_type), valid_binder_(valid_binder) {} |
| 543 |
| 544 bool valid_type_; |
| 545 bool valid_binder_; |
| 546 }; |
| 547 |
| 548 |
| 549 typedef PreParserList<PreParserTypeMember> PreParserTypeMembers; |
| 550 |
| 551 |
| 524 V8_INLINE PreParserFormalParameter | 552 V8_INLINE PreParserFormalParameter |
| 525 PreParserFormalParameter::Unnamed(const PreParserType& type) { | 553 PreParserFormalParameter::Unnamed(const PreParserType& type) { |
| 526 return PreParserFormalParameter(type.IsValidType(), | 554 return PreParserFormalParameter(type.IsValidType(), |
| 527 type.IsValidBindingIdentifierOrPattern()); | 555 type.IsValidBindingIdentifierOrPattern()); |
| 528 } | 556 } |
| 529 | 557 |
| 530 | 558 |
| 531 } // namespace typesystem | 559 } // namespace typesystem |
| 532 | 560 |
| 533 | 561 |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 int pos) { | 722 int pos) { |
| 695 return typesystem::PreParserType::Default(); | 723 return typesystem::PreParserType::Default(); |
| 696 } | 724 } |
| 697 | 725 |
| 698 typesystem::PreParserType NewTupleType( | 726 typesystem::PreParserType NewTupleType( |
| 699 const typesystem::PreParserTypeList& elements, bool valid_type, | 727 const typesystem::PreParserTypeList& elements, bool valid_type, |
| 700 bool valid_binder, bool spread, int pos) { | 728 bool valid_binder, bool spread, int pos) { |
| 701 return typesystem::PreParserType::Default(valid_type, valid_binder); | 729 return typesystem::PreParserType::Default(valid_type, valid_binder); |
| 702 } | 730 } |
| 703 | 731 |
| 732 typesystem::PreParserType NewObjectType( |
| 733 const typesystem::PreParserTypeMembers& members, bool valid_type, |
| 734 bool valid_binder, int pos) { |
| 735 return typesystem::PreParserType::Default(valid_type, valid_binder); |
| 736 } |
| 737 |
| 704 typesystem::PreParserType NewFunctionType( | 738 typesystem::PreParserType NewFunctionType( |
| 705 const typesystem::PreParserTypeParameters& type_parameters, | 739 const typesystem::PreParserTypeParameters& type_parameters, |
| 706 const typesystem::PreParserFormalParameters& parameters, | 740 const typesystem::PreParserFormalParameters& parameters, |
| 707 typesystem::PreParserType result_type, int pos, | 741 const typesystem::PreParserType& result_type, int pos, |
| 708 bool constructor = false) { | 742 bool constructor = false) { |
| 709 return typesystem::PreParserType::Default(); | 743 return typesystem::PreParserType::Default(); |
| 710 } | 744 } |
| 711 | 745 |
| 712 typesystem::PreParserType NewStringLiteralType( | 746 typesystem::PreParserType NewStringLiteralType( |
| 713 const PreParserIdentifier& string, int pos) { | 747 const PreParserIdentifier& string, int pos) { |
| 714 return typesystem::PreParserType::StringLiteral(); | 748 return typesystem::PreParserType::StringLiteral(); |
| 715 } | 749 } |
| 716 | 750 |
| 717 typesystem::PreParserType NewTypeReference( | 751 typesystem::PreParserType NewTypeReference( |
| (...skipping 19 matching lines...) Expand all Loading... |
| 737 return typesystem::PreParserFormalParameter::Unnamed(type); | 771 return typesystem::PreParserFormalParameter::Unnamed(type); |
| 738 } | 772 } |
| 739 | 773 |
| 740 typesystem::PreParserType NewTypeOrParameters( | 774 typesystem::PreParserType NewTypeOrParameters( |
| 741 const typesystem::PreParserFormalParameters& parameters, int pos) { | 775 const typesystem::PreParserFormalParameters& parameters, int pos) { |
| 742 return typesystem::PreParserType::Parenthesized(parameters.IsValidType(), | 776 return typesystem::PreParserType::Parenthesized(parameters.IsValidType(), |
| 743 parameters.length()); | 777 parameters.length()); |
| 744 } | 778 } |
| 745 | 779 |
| 746 typesystem::PreParserTypeParameter NewTypeParameter( | 780 typesystem::PreParserTypeParameter NewTypeParameter( |
| 747 PreParserIdentifier name, const typesystem::PreParserType& extends, | 781 const PreParserIdentifier& name, const typesystem::PreParserType& extends, |
| 748 int pos) { | 782 int pos) { |
| 749 return typesystem::PreParserTypeParameter::Default(); | 783 return typesystem::PreParserTypeParameter::Default(); |
| 750 } | 784 } |
| 751 | 785 |
| 786 typesystem::PreParserTypeMember NewTypeMember( |
| 787 const PreParserExpression& property, bool optional, |
| 788 const typesystem::PreParserTypeParameters& type_parameters, |
| 789 const typesystem::PreParserFormalParameters& parameters, |
| 790 const typesystem::PreParserType& result_type, bool valid_type, |
| 791 bool valid_binder, int pos, bool constructor = false) { |
| 792 return typesystem::PreParserTypeMember::Default(valid_type, valid_binder); |
| 793 } |
| 794 |
| 795 typesystem::PreParserTypeMember NewTypeMember( |
| 796 const PreParserExpression& property, |
| 797 typesystem::TypeMember::IndexType index_type, |
| 798 const typesystem::PreParserType& result_type, int pos) { |
| 799 return typesystem::PreParserTypeMember::IndexSignature(); |
| 800 } |
| 801 |
| 752 // Return the object itself as AstVisitor and implement the needed | 802 // Return the object itself as AstVisitor and implement the needed |
| 753 // dummy method right in this class. | 803 // dummy method right in this class. |
| 754 PreParserFactory* visitor() { return this; } | 804 PreParserFactory* visitor() { return this; } |
| 755 int* ast_properties() { | 805 int* ast_properties() { |
| 756 static int dummy = 42; | 806 static int dummy = 42; |
| 757 return &dummy; | 807 return &dummy; |
| 758 } | 808 } |
| 759 }; | 809 }; |
| 760 | 810 |
| 761 | 811 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 801 typedef PreParserFormalParameters FormalParameters; | 851 typedef PreParserFormalParameters FormalParameters; |
| 802 typedef PreParserStatementList StatementList; | 852 typedef PreParserStatementList StatementList; |
| 803 | 853 |
| 804 struct TypeSystem { | 854 struct TypeSystem { |
| 805 typedef typesystem::PreParserType Type; | 855 typedef typesystem::PreParserType Type; |
| 806 typedef typesystem::PreParserTypeList TypeList; | 856 typedef typesystem::PreParserTypeList TypeList; |
| 807 typedef typesystem::PreParserTypeParameter TypeParameter; | 857 typedef typesystem::PreParserTypeParameter TypeParameter; |
| 808 typedef typesystem::PreParserTypeParameters TypeParameters; | 858 typedef typesystem::PreParserTypeParameters TypeParameters; |
| 809 typedef typesystem::PreParserFormalParameter FormalParameter; | 859 typedef typesystem::PreParserFormalParameter FormalParameter; |
| 810 typedef typesystem::PreParserFormalParameters FormalParameters; | 860 typedef typesystem::PreParserFormalParameters FormalParameters; |
| 861 typedef typesystem::PreParserTypeMember TypeMember; |
| 862 typedef typesystem::PreParserTypeMembers TypeMembers; |
| 811 }; | 863 }; |
| 812 | 864 |
| 813 // For constructing objects returned by the traversing functions. | 865 // For constructing objects returned by the traversing functions. |
| 814 typedef PreParserFactory Factory; | 866 typedef PreParserFactory Factory; |
| 815 }; | 867 }; |
| 816 | 868 |
| 817 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} | 869 explicit PreParserTraits(PreParser* pre_parser) : pre_parser_(pre_parser) {} |
| 818 | 870 |
| 819 // Helper functions for recursive descent. | 871 // Helper functions for recursive descent. |
| 820 static bool IsEval(PreParserIdentifier identifier) { | 872 static bool IsEval(PreParserIdentifier identifier) { |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 978 } | 1030 } |
| 979 static typesystem::PreParserTypeList EmptyTypeList() { | 1031 static typesystem::PreParserTypeList EmptyTypeList() { |
| 980 return typesystem::PreParserTypeList(); | 1032 return typesystem::PreParserTypeList(); |
| 981 } | 1033 } |
| 982 static typesystem::PreParserTypeParameters EmptyTypeParameters() { | 1034 static typesystem::PreParserTypeParameters EmptyTypeParameters() { |
| 983 return typesystem::PreParserTypeParameters(); | 1035 return typesystem::PreParserTypeParameters(); |
| 984 } | 1036 } |
| 985 static typesystem::PreParserFormalParameters EmptyFormalParameters() { | 1037 static typesystem::PreParserFormalParameters EmptyFormalParameters() { |
| 986 return typesystem::PreParserFormalParameters(); | 1038 return typesystem::PreParserFormalParameters(); |
| 987 } | 1039 } |
| 1040 static typesystem::PreParserFormalParameters NullFormalParameters() { |
| 1041 return typesystem::PreParserFormalParameters(); |
| 1042 } |
| 988 static PreParserIdentifierList NullIdentifierList() { | 1043 static PreParserIdentifierList NullIdentifierList() { |
| 989 return PreParserIdentifierList(); | 1044 return PreParserIdentifierList(); |
| 990 } | 1045 } |
| 991 static PreParserIdentifierList EmptyIdentifierList() { | 1046 static PreParserIdentifierList EmptyIdentifierList() { |
| 992 return PreParserIdentifierList(); | 1047 return PreParserIdentifierList(); |
| 993 } | 1048 } |
| 994 static typesystem::PreParserType HoleTypeElement() { | 1049 static typesystem::PreParserType HoleTypeElement() { |
| 995 return typesystem::PreParserType::Default(false); | 1050 return typesystem::PreParserType::Default(false); |
| 996 } | 1051 } |
| 1052 static typesystem::PreParserTypeMembers EmptyTypeMembers() { |
| 1053 return typesystem::PreParserTypeMembers(); |
| 1054 } |
| 1055 static typesystem::PreParserTypeMember EmptyTypeMember() { |
| 1056 return typesystem::PreParserTypeMember::Default(false, false); |
| 1057 } |
| 997 | 1058 |
| 998 // Odd-ball literal creators. | 1059 // Odd-ball literal creators. |
| 999 static PreParserExpression GetLiteralTheHole(int position, | 1060 static PreParserExpression GetLiteralTheHole(int position, |
| 1000 PreParserFactory* factory) { | 1061 PreParserFactory* factory) { |
| 1001 return PreParserExpression::Default(); | 1062 return PreParserExpression::Default(); |
| 1002 } | 1063 } |
| 1003 | 1064 |
| 1004 // Producing data during the recursive descent. | 1065 // Producing data during the recursive descent. |
| 1005 PreParserIdentifier GetSymbol(Scanner* scanner); | 1066 PreParserIdentifier GetSymbol(Scanner* scanner); |
| 1006 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner); | 1067 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner); |
| (...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1408 const PreParserFormalParameters& parameters, FunctionKind kind, | 1469 const PreParserFormalParameters& parameters, FunctionKind kind, |
| 1409 FunctionLiteral::FunctionType function_type, bool* ok) { | 1470 FunctionLiteral::FunctionType function_type, bool* ok) { |
| 1410 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters, | 1471 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters, |
| 1411 kind, function_type, ok); | 1472 kind, function_type, ok); |
| 1412 } | 1473 } |
| 1413 | 1474 |
| 1414 } // namespace internal | 1475 } // namespace internal |
| 1415 } // namespace v8 | 1476 } // namespace v8 |
| 1416 | 1477 |
| 1417 #endif // V8_PARSING_PREPARSER_H | 1478 #endif // V8_PARSING_PREPARSER_H |
| OLD | NEW |