Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/parsing/preparser.h

Issue 1817093002: Add parsing for object types (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@types-1810943002-tuple
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698