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 1810943002: Add parsing for tuple types (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@types
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 418 matching lines...) Expand 10 before | Expand all | Expand 10 after
429 429
430 430
431 class PreParserFormalParameter { 431 class PreParserFormalParameter {
432 public: 432 public:
433 static PreParserFormalParameter Named() { 433 static PreParserFormalParameter Named() {
434 return PreParserFormalParameter(false, false); 434 return PreParserFormalParameter(false, false);
435 } 435 }
436 V8_INLINE static PreParserFormalParameter Unnamed(const PreParserType& type); 436 V8_INLINE static PreParserFormalParameter Unnamed(const PreParserType& type);
437 437
438 bool IsValidType() const { return valid_type_; } 438 bool IsValidType() const { return valid_type_; }
439 bool IsSimpleIdentifier() const { return simple_identifier_; } 439 bool IsValidBindingIdentifierOrPattern() const { return valid_binder_; }
440 440
441 private: 441 private:
442 PreParserFormalParameter(bool valid, bool simple) 442 PreParserFormalParameter(bool valid_type, bool valid_binder)
443 : valid_type_(valid), simple_identifier_(simple) {} 443 : valid_type_(valid_type), valid_binder_(valid_binder) {}
444 444
445 bool valid_type_; 445 bool valid_type_;
446 bool simple_identifier_; 446 bool valid_binder_;
447 }; 447 };
448 448
449 449
450 typedef PreParserList<PreParserTypeParameter> PreParserTypeParameters; 450 typedef PreParserList<PreParserTypeParameter> PreParserTypeParameters;
451 451
452 452
453 class PreParserFormalParameters 453 class PreParserFormalParameters
454 : public PreParserList<PreParserFormalParameter> { 454 : public PreParserList<PreParserFormalParameter> {
455 public: 455 public:
456 explicit PreParserFormalParameters(bool valid = false, int arity = 0) 456 explicit PreParserFormalParameters(bool valid = false, int arity = 0)
457 : PreParserList<PreParserFormalParameter>(arity), valid_type_(valid) {} 457 : PreParserList<PreParserFormalParameter>(arity), valid_type_(valid) {}
458 458
459 PreParserFormalParameters* operator->() { return this; } 459 PreParserFormalParameters* operator->() { return this; }
460 460
461 void Add(const PreParserFormalParameter& param, void* dummy) { 461 void Add(const PreParserFormalParameter& param, void* dummy) {
462 PreParserList<PreParserFormalParameter>::Add(param, dummy); 462 PreParserList<PreParserFormalParameter>::Add(param, dummy);
463 valid_type_ = length() == 1 && param.IsValidType(); 463 valid_type_ = length() == 1 && param.IsValidType();
464 } 464 }
465 465
466 bool IsValidType() const { return valid_type_; } 466 bool IsValidType() const { return valid_type_; }
467 467
468 private: 468 private:
469 bool valid_type_; 469 bool valid_type_;
470 }; 470 };
471 471
472 472
473 class PreParserType { 473 class PreParserType {
474 public: 474 public:
475 static PreParserType Default(bool valid = true) { 475 static PreParserType Default(bool valid_type = true,
476 return PreParserType(valid, false, false); 476 bool valid_binder = false) {
477 return PreParserType(valid_type, valid_binder, false);
477 } 478 }
478 static PreParserType Reference(bool simple) { 479 static PreParserType Reference(bool simple) {
479 return PreParserType(true, simple, false); 480 return PreParserType(true, simple, false);
480 } 481 }
481 static PreParserType Parenthesized(bool valid, int arity) { 482 static PreParserType Parenthesized(bool valid_type, int arity) {
482 return PreParserType(valid, false, false, arity); 483 return PreParserType(valid_type, false, false, arity);
483 } 484 }
484 static PreParserType StringLiteral() { 485 static PreParserType StringLiteral() {
485 return PreParserType(true, false, true); 486 return PreParserType(true, false, true);
486 } 487 }
487 488
488 // Dummy implementation for making type->somefunc() work in both Parser 489 // Dummy implementation for making type->somefunc() work in both Parser
489 // and PreParser. 490 // and PreParser.
490 PreParserType* operator->() { return this; } 491 PreParserType* operator->() { return this; }
491 492
492 PreParserType Uncover(bool* ok) { 493 PreParserType Uncover(bool* ok) {
493 *ok = valid_type_; 494 *ok = valid_type_;
494 return *this; 495 return *this;
495 } 496 }
496 497
497 PreParserFormalParameters AsValidParameterList(Zone* zone, bool* ok) const { 498 PreParserFormalParameters AsValidParameterList(Zone* zone, bool* ok) const {
498 if (arity_ >= 0) return PreParserFormalParameters(arity_); 499 if (arity_ >= 0) return PreParserFormalParameters(arity_);
499 *ok = false; 500 *ok = false;
500 return PreParserFormalParameters(); 501 return PreParserFormalParameters();
501 } 502 }
502 503
503 bool IsValidType() const { return valid_type_; } 504 bool IsValidType() const { return valid_type_; }
504 bool IsSimpleIdentifier() const { return simple_identifier_; } 505 bool IsValidBindingIdentifierOrPattern() const { return valid_binder_; }
505 bool IsStringLiteralType() const { return string_; } 506 bool IsStringLiteralType() const { return string_; }
506 507
507 PreParserIdentifier AsSimpleIdentifier() const {
508 DCHECK(simple_identifier_);
509 return PreParserIdentifier::Default();
510 }
511
512 private: 508 private:
513 PreParserType(bool valid, bool simple, bool string, int arity = -1) 509 PreParserType(bool valid_type, bool valid_binder, bool string, int arity = -1)
514 : valid_type_(valid), 510 : valid_type_(valid_type),
515 simple_identifier_(simple), 511 valid_binder_(valid_binder),
516 string_(string), 512 string_(string),
517 arity_(arity) {} 513 arity_(arity) {}
518 514
519 bool valid_type_; 515 bool valid_type_;
520 bool simple_identifier_; 516 bool valid_binder_;
521 bool string_; 517 bool string_;
522 int arity_; 518 int arity_;
523 }; 519 };
524 520
525 521
526 typedef PreParserList<PreParserType> PreParserTypeArguments; 522 typedef PreParserList<PreParserType> PreParserTypeList;
527 523
528 V8_INLINE PreParserFormalParameter 524 V8_INLINE PreParserFormalParameter
529 PreParserFormalParameter::Unnamed(const PreParserType& type) { 525 PreParserFormalParameter::Unnamed(const PreParserType& type) {
530 return PreParserFormalParameter(type.IsValidType(), 526 return PreParserFormalParameter(type.IsValidType(),
531 type.IsSimpleIdentifier()); 527 type.IsValidBindingIdentifierOrPattern());
532 } 528 }
533 529
534 530
535 } // namespace typesystem 531 } // namespace typesystem
536 532
537 533
538 class PreParserFactory { 534 class PreParserFactory {
539 public: 535 public:
540 explicit PreParserFactory(void* unused_value_factory) {} 536 explicit PreParserFactory(void* unused_value_factory) {}
541 PreParserExpression NewStringLiteral(PreParserIdentifier identifier, 537 PreParserExpression NewStringLiteral(PreParserIdentifier identifier,
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 int expr_pos) { 663 int expr_pos) {
668 return PreParserExpression::Spread(expression); 664 return PreParserExpression::Spread(expression);
669 } 665 }
670 666
671 PreParserExpression NewEmptyParentheses(int pos) { 667 PreParserExpression NewEmptyParentheses(int pos) {
672 return PreParserExpression::Default(); 668 return PreParserExpression::Default();
673 } 669 }
674 670
675 typesystem::PreParserType NewPredefinedType( 671 typesystem::PreParserType NewPredefinedType(
676 typesystem::PredefinedType::Kind kind, int pos) { 672 typesystem::PredefinedType::Kind kind, int pos) {
677 return typesystem::PreParserType::Default(); 673 return typesystem::PreParserType::Default(
674 true, kind != typesystem::PredefinedType::kVoidType);
678 } 675 }
679 676
680 typesystem::PreParserType NewThisType(int pos) { 677 typesystem::PreParserType NewThisType(int pos) {
681 return typesystem::PreParserType::Default(); 678 return typesystem::PreParserType::Default();
682 } 679 }
683 680
684 typesystem::PreParserType NewUnionType(const typesystem::PreParserType& left, 681 typesystem::PreParserType NewUnionType(const typesystem::PreParserType& left,
685 const typesystem::PreParserType& right, 682 const typesystem::PreParserType& right,
686 int pos) { 683 int pos) {
687 return typesystem::PreParserType::Default(); 684 return typesystem::PreParserType::Default();
688 } 685 }
689 686
690 typesystem::PreParserType NewIntersectionType( 687 typesystem::PreParserType NewIntersectionType(
691 const typesystem::PreParserType& left, 688 const typesystem::PreParserType& left,
692 const typesystem::PreParserType& right, int pos) { 689 const typesystem::PreParserType& right, int pos) {
693 return typesystem::PreParserType::Default(); 690 return typesystem::PreParserType::Default();
694 } 691 }
695 692
696 typesystem::PreParserType NewArrayType(const typesystem::PreParserType& base, 693 typesystem::PreParserType NewArrayType(const typesystem::PreParserType& base,
697 int pos) { 694 int pos) {
698 return typesystem::PreParserType::Default(); 695 return typesystem::PreParserType::Default();
699 } 696 }
700 697
698 typesystem::PreParserType NewTupleType(
699 const typesystem::PreParserTypeList& elements, bool valid_type,
700 bool valid_binder, bool spread, int pos) {
701 return typesystem::PreParserType::Default(valid_type, valid_binder);
702 }
703
701 typesystem::PreParserType NewFunctionType( 704 typesystem::PreParserType NewFunctionType(
702 const typesystem::PreParserTypeParameters& type_parameters, 705 const typesystem::PreParserTypeParameters& type_parameters,
703 const typesystem::PreParserFormalParameters& parameters, 706 const typesystem::PreParserFormalParameters& parameters,
704 typesystem::PreParserType result_type, int pos, 707 typesystem::PreParserType result_type, int pos,
705 bool constructor = false) { 708 bool constructor = false) {
706 return typesystem::PreParserType::Default(); 709 return typesystem::PreParserType::Default();
707 } 710 }
708 711
709 typesystem::PreParserType NewStringLiteralType( 712 typesystem::PreParserType NewStringLiteralType(
710 const PreParserIdentifier& string, int pos) { 713 const PreParserIdentifier& string, int pos) {
711 return typesystem::PreParserType::StringLiteral(); 714 return typesystem::PreParserType::StringLiteral();
712 } 715 }
713 716
714 typesystem::PreParserType NewTypeReference( 717 typesystem::PreParserType NewTypeReference(
715 const PreParserIdentifier& name, 718 const PreParserIdentifier& name,
716 const typesystem::PreParserTypeArguments& type_arguments, int pos) { 719 const typesystem::PreParserTypeList& type_arguments, int pos) {
717 return typesystem::PreParserType::Reference(type_arguments.length() == 0); 720 return typesystem::PreParserType::Reference(type_arguments.length() == 0);
718 } 721 }
719 722
720 typesystem::PreParserType NewQueryType( 723 typesystem::PreParserType NewQueryType(
721 const PreParserIdentifier& name, 724 const PreParserIdentifier& name,
722 const PreParserIdentifierList& property_names, int pos) { 725 const PreParserIdentifierList& property_names, int pos) {
723 return typesystem::PreParserType::Default(); 726 return typesystem::PreParserType::Default();
724 } 727 }
725 728
726 typesystem::PreParserFormalParameter NewFormalParameter( 729 typesystem::PreParserFormalParameter NewFormalParameter(
727 const PreParserIdentifier& name, bool optional, bool spread, 730 const typesystem::PreParserType& binder, bool optional, bool spread,
728 const typesystem::PreParserType& type, int pos) { 731 const typesystem::PreParserType& type, int pos) {
729 return typesystem::PreParserFormalParameter::Named(); 732 return typesystem::PreParserFormalParameter::Named();
730 } 733 }
731 734
732 typesystem::PreParserFormalParameter NewFormalParameter( 735 typesystem::PreParserFormalParameter NewFormalParameter(
733 const typesystem::PreParserType& type, int pos) { 736 const typesystem::PreParserType& type, int pos) {
734 return typesystem::PreParserFormalParameter::Unnamed(type); 737 return typesystem::PreParserFormalParameter::Unnamed(type);
735 } 738 }
736 739
737 typesystem::PreParserType NewTypeOrParameters( 740 typesystem::PreParserType NewTypeOrParameters(
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 typedef PreParserExpression ObjectLiteralProperty; 796 typedef PreParserExpression ObjectLiteralProperty;
794 typedef PreParserExpression Literal; 797 typedef PreParserExpression Literal;
795 typedef PreParserExpressionList ExpressionList; 798 typedef PreParserExpressionList ExpressionList;
796 typedef PreParserExpressionList PropertyList; 799 typedef PreParserExpressionList PropertyList;
797 typedef PreParserIdentifier FormalParameter; 800 typedef PreParserIdentifier FormalParameter;
798 typedef PreParserFormalParameters FormalParameters; 801 typedef PreParserFormalParameters FormalParameters;
799 typedef PreParserStatementList StatementList; 802 typedef PreParserStatementList StatementList;
800 803
801 struct TypeSystem { 804 struct TypeSystem {
802 typedef typesystem::PreParserType Type; 805 typedef typesystem::PreParserType Type;
803 typedef typesystem::PreParserTypeArguments TypeArguments; 806 typedef typesystem::PreParserTypeList TypeList;
804 typedef typesystem::PreParserTypeParameter TypeParameter; 807 typedef typesystem::PreParserTypeParameter TypeParameter;
805 typedef typesystem::PreParserTypeParameters TypeParameters; 808 typedef typesystem::PreParserTypeParameters TypeParameters;
806 typedef typesystem::PreParserFormalParameter FormalParameter; 809 typedef typesystem::PreParserFormalParameter FormalParameter;
807 typedef typesystem::PreParserFormalParameters FormalParameters; 810 typedef typesystem::PreParserFormalParameters FormalParameters;
808 }; 811 };
809 812
810 // For constructing objects returned by the traversing functions. 813 // For constructing objects returned by the traversing functions.
811 typedef PreParserFactory Factory; 814 typedef PreParserFactory Factory;
812 }; 815 };
813 816
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after
956 } 959 }
957 static PreParserExpression EmptyFunctionLiteral() { 960 static PreParserExpression EmptyFunctionLiteral() {
958 return PreParserExpression::Default(); 961 return PreParserExpression::Default();
959 } 962 }
960 static PreParserExpressionList NullExpressionList() { 963 static PreParserExpressionList NullExpressionList() {
961 return PreParserExpressionList(); 964 return PreParserExpressionList();
962 } 965 }
963 static typesystem::PreParserType EmptyType() { 966 static typesystem::PreParserType EmptyType() {
964 return typesystem::PreParserType::Default(false); 967 return typesystem::PreParserType::Default(false);
965 } 968 }
966 static typesystem::PreParserTypeArguments NullTypeArguments() { 969 static typesystem::PreParserTypeList NullTypeList() {
967 return typesystem::PreParserTypeArguments(); 970 return typesystem::PreParserTypeList();
968 } 971 }
969 static typesystem::PreParserTypeParameters NullTypeParameters() { 972 static typesystem::PreParserTypeParameters NullTypeParameters() {
970 return typesystem::PreParserTypeParameters(); 973 return typesystem::PreParserTypeParameters();
971 } 974 }
972 static bool IsNullTypeParameters( 975 static bool IsNullTypeParameters(
973 const typesystem::PreParserTypeParameters& typ_pars) { 976 const typesystem::PreParserTypeParameters& typ_pars) {
974 return typ_pars.length() == 0; 977 return typ_pars.length() == 0;
975 } 978 }
976 static typesystem::PreParserTypeArguments EmptyTypeArguments() { 979 static typesystem::PreParserTypeList EmptyTypeList() {
977 return typesystem::PreParserTypeArguments(); 980 return typesystem::PreParserTypeList();
978 } 981 }
979 static typesystem::PreParserTypeParameters EmptyTypeParameters() { 982 static typesystem::PreParserTypeParameters EmptyTypeParameters() {
980 return typesystem::PreParserTypeParameters(); 983 return typesystem::PreParserTypeParameters();
981 } 984 }
982 static typesystem::PreParserFormalParameters EmptyFormalParameters() { 985 static typesystem::PreParserFormalParameters EmptyFormalParameters() {
983 return typesystem::PreParserFormalParameters(); 986 return typesystem::PreParserFormalParameters();
984 } 987 }
985 static PreParserIdentifierList NullIdentifierList() { 988 static PreParserIdentifierList NullIdentifierList() {
986 return PreParserIdentifierList(); 989 return PreParserIdentifierList();
987 } 990 }
988 static PreParserIdentifierList EmptyIdentifierList() { 991 static PreParserIdentifierList EmptyIdentifierList() {
989 return PreParserIdentifierList(); 992 return PreParserIdentifierList();
990 } 993 }
994 static typesystem::PreParserType HoleTypeElement() {
995 return typesystem::PreParserType::Default(false);
996 }
991 997
992 // Odd-ball literal creators. 998 // Odd-ball literal creators.
993 static PreParserExpression GetLiteralTheHole(int position, 999 static PreParserExpression GetLiteralTheHole(int position,
994 PreParserFactory* factory) { 1000 PreParserFactory* factory) {
995 return PreParserExpression::Default(); 1001 return PreParserExpression::Default();
996 } 1002 }
997 1003
998 // Producing data during the recursive descent. 1004 // Producing data during the recursive descent.
999 PreParserIdentifier GetSymbol(Scanner* scanner); 1005 PreParserIdentifier GetSymbol(Scanner* scanner);
1000 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner); 1006 PreParserIdentifier GetNumberAsSymbol(Scanner* scanner);
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1402 const PreParserFormalParameters& parameters, FunctionKind kind, 1408 const PreParserFormalParameters& parameters, FunctionKind kind,
1403 FunctionLiteral::FunctionType function_type, bool* ok) { 1409 FunctionLiteral::FunctionType function_type, bool* ok) {
1404 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters, 1410 return pre_parser_->ParseEagerFunctionBody(function_name, pos, parameters,
1405 kind, function_type, ok); 1411 kind, function_type, ok);
1406 } 1412 }
1407 1413
1408 } // namespace internal 1414 } // namespace internal
1409 } // namespace v8 1415 } // namespace v8
1410 1416
1411 #endif // V8_PARSING_PREPARSER_H 1417 #endif // V8_PARSING_PREPARSER_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698