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 |