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

Side by Side Diff: pkg/compiler/lib/src/resolution/send_structure.dart

Issue 1152903003: Create SendStructure for unary and binary in resolution. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments Created 5 years, 7 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 (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js.send_structure; 5 library dart2js.send_structure;
6 6
7 import 'access_semantics.dart'; 7 import 'access_semantics.dart';
8 import 'operators.dart'; 8 import 'operators.dart';
9 import 'semantic_visitor.dart'; 9 import 'semantic_visitor.dart';
10 import '../dart_types.dart'; 10 import '../dart_types.dart';
(...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 } 759 }
760 760
761 String toString() => 'set($selector,$semantics)'; 761 String toString() => 'set($selector,$semantics)';
762 } 762 }
763 763
764 /// The structure for a [Send] that is a negation, i.e. of the form `!e`. 764 /// The structure for a [Send] that is a negation, i.e. of the form `!e`.
765 class NotStructure<R, A> implements SendStructure<R, A> { 765 class NotStructure<R, A> implements SendStructure<R, A> {
766 /// The target of the negation. 766 /// The target of the negation.
767 final AccessSemantics semantics; 767 final AccessSemantics semantics;
768 768
769 // TODO(johnniwinther): Should we store this? 769 NotStructure(this.semantics);
770 final Selector selector;
771
772 NotStructure(this.semantics, this.selector);
773 770
774 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 771 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
775 switch (semantics.kind) { 772 switch (semantics.kind) {
776 case AccessKind.DYNAMIC_PROPERTY: 773 case AccessKind.DYNAMIC_PROPERTY:
777 return visitor.visitNot( 774 return visitor.visitNot(
778 node, 775 node,
779 node.receiver, 776 node.receiver,
780 arg); 777 arg);
781 default: 778 default:
782 // This is not a valid case. 779 // This is not a valid case.
783 break; 780 break;
784 } 781 }
785 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}"); 782 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}");
786 } 783 }
787 784
788 String toString() => 'not($selector,$semantics)'; 785 String toString() => 'not($semantics)';
789 } 786 }
790 787
791 /// The structure for a [Send] that is an invocation of a user definable unary 788 /// The structure for a [Send] that is an invocation of a user definable unary
792 /// operator. 789 /// operator.
793 class UnaryStructure<R, A> implements SendStructure<R, A> { 790 class UnaryStructure<R, A> implements SendStructure<R, A> {
794 /// The target of the unary operation. 791 /// The target of the unary operation.
795 final AccessSemantics semantics; 792 final AccessSemantics semantics;
796 793
797 /// The user definable unary operator. 794 /// The user definable unary operator.
798 final UnaryOperator operator; 795 final UnaryOperator operator;
799 796
800 // TODO(johnniwinther): Should we store this? 797 UnaryStructure(this.semantics, this.operator);
801 /// The [Selector] for the unary operator invocation.
802 final Selector selector;
803
804 UnaryStructure(this.semantics, this.operator, this.selector);
805 798
806 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 799 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
807 switch (semantics.kind) { 800 switch (semantics.kind) {
808 case AccessKind.DYNAMIC_PROPERTY: 801 case AccessKind.DYNAMIC_PROPERTY:
809 return visitor.visitUnary( 802 return visitor.visitUnary(
810 node, 803 node,
811 operator, 804 operator,
812 node.receiver, 805 node.receiver,
813 arg); 806 arg);
814 case AccessKind.SUPER_METHOD: 807 case AccessKind.SUPER_METHOD:
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
849 842
850 String toString() => 'invalid unary'; 843 String toString() => 'invalid unary';
851 } 844 }
852 845
853 /// The structure for a [Send] that is an index expression, i.e. of the form 846 /// The structure for a [Send] that is an index expression, i.e. of the form
854 /// `a[b]`. 847 /// `a[b]`.
855 class IndexStructure<R, A> implements SendStructure<R, A> { 848 class IndexStructure<R, A> implements SendStructure<R, A> {
856 /// The target of the left operand. 849 /// The target of the left operand.
857 final AccessSemantics semantics; 850 final AccessSemantics semantics;
858 851
859 // TODO(johnniwinther): Should we store this? 852 IndexStructure(this.semantics);
860 /// The [Selector] for the `[]` invocation.
861 final Selector selector;
862
863 IndexStructure(this.semantics, this.selector);
864 853
865 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 854 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
866 switch (semantics.kind) { 855 switch (semantics.kind) {
867 case AccessKind.DYNAMIC_PROPERTY: 856 case AccessKind.DYNAMIC_PROPERTY:
868 return visitor.visitIndex( 857 return visitor.visitIndex(
869 node, 858 node,
870 node.receiver, 859 node.receiver,
871 node.arguments.single, 860 node.arguments.single,
872 arg); 861 arg);
873 case AccessKind.SUPER_METHOD: 862 case AccessKind.SUPER_METHOD:
(...skipping 15 matching lines...) Expand all
889 throw new SpannableAssertionFailure(node, "Invalid index: ${semantics}"); 878 throw new SpannableAssertionFailure(node, "Invalid index: ${semantics}");
890 } 879 }
891 } 880 }
892 881
893 /// The structure for a [Send] that is an equals test, i.e. of the form 882 /// The structure for a [Send] that is an equals test, i.e. of the form
894 /// `a == b`. 883 /// `a == b`.
895 class EqualsStructure<R, A> implements SendStructure<R, A> { 884 class EqualsStructure<R, A> implements SendStructure<R, A> {
896 /// The target of the left operand. 885 /// The target of the left operand.
897 final AccessSemantics semantics; 886 final AccessSemantics semantics;
898 887
899 // TODO(johnniwinther): Should we store this? 888 EqualsStructure(this.semantics);
900 /// The [Selector] for the `==` invocation.
901 final Selector selector;
902
903 EqualsStructure(this.semantics, this.selector);
904 889
905 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 890 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
906 switch (semantics.kind) { 891 switch (semantics.kind) {
907 case AccessKind.DYNAMIC_PROPERTY: 892 case AccessKind.DYNAMIC_PROPERTY:
908 return visitor.visitEquals( 893 return visitor.visitEquals(
909 node, 894 node,
910 node.receiver, 895 node.receiver,
911 node.arguments.single, 896 node.arguments.single,
912 arg); 897 arg);
913 case AccessKind.SUPER_METHOD: 898 case AccessKind.SUPER_METHOD:
(...skipping 11 matching lines...) Expand all
925 910
926 String toString() => '==($semantics)'; 911 String toString() => '==($semantics)';
927 } 912 }
928 913
929 /// The structure for a [Send] that is a not-equals test, i.e. of the form 914 /// The structure for a [Send] that is a not-equals test, i.e. of the form
930 /// `a != b`. 915 /// `a != b`.
931 class NotEqualsStructure<R, A> implements SendStructure<R, A> { 916 class NotEqualsStructure<R, A> implements SendStructure<R, A> {
932 /// The target of the left operand. 917 /// The target of the left operand.
933 final AccessSemantics semantics; 918 final AccessSemantics semantics;
934 919
935 // TODO(johnniwinther): Should we store this? 920 NotEqualsStructure(this.semantics);
936 /// The [Selector] for the underlying `==` invocation.
937 final Selector selector;
938
939 NotEqualsStructure(this.semantics, this.selector);
940 921
941 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 922 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
942 switch (semantics.kind) { 923 switch (semantics.kind) {
943 case AccessKind.DYNAMIC_PROPERTY: 924 case AccessKind.DYNAMIC_PROPERTY:
944 return visitor.visitNotEquals( 925 return visitor.visitNotEquals(
945 node, 926 node,
946 node.receiver, 927 node.receiver,
947 node.arguments.single, 928 node.arguments.single,
948 arg); 929 arg);
949 case AccessKind.SUPER_METHOD: 930 case AccessKind.SUPER_METHOD:
(...skipping 15 matching lines...) Expand all
965 946
966 /// The structure for a [Send] that is an invocation of a user-definable binary 947 /// The structure for a [Send] that is an invocation of a user-definable binary
967 /// operator. 948 /// operator.
968 class BinaryStructure<R, A> implements SendStructure<R, A> { 949 class BinaryStructure<R, A> implements SendStructure<R, A> {
969 /// The target of the left operand. 950 /// The target of the left operand.
970 final AccessSemantics semantics; 951 final AccessSemantics semantics;
971 952
972 /// The user definable binary operator. 953 /// The user definable binary operator.
973 final BinaryOperator operator; 954 final BinaryOperator operator;
974 955
975 // TODO(johnniwinther): Should we store this? 956 BinaryStructure(this.semantics, this.operator);
976 /// The [Selector] for the binary operator invocation.
977 final Selector selector;
978
979 BinaryStructure(this.semantics, this.operator, this.selector);
980 957
981 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 958 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
982 switch (semantics.kind) { 959 switch (semantics.kind) {
983 case AccessKind.DYNAMIC_PROPERTY: 960 case AccessKind.DYNAMIC_PROPERTY:
984 return visitor.visitBinary( 961 return visitor.visitBinary(
985 node, 962 node,
986 node.receiver, 963 node.receiver,
987 operator, 964 operator,
988 node.arguments.single, 965 node.arguments.single,
989 arg); 966 arg);
(...skipping 1540 matching lines...) Expand 10 before | Expand all | Expand 10 after
2530 final ConstructorElement constructor; 2507 final ConstructorElement constructor;
2531 final Selector selector; 2508 final Selector selector;
2532 2509
2533 ThisConstructorInvokeStructure(this.constructor, this.selector); 2510 ThisConstructorInvokeStructure(this.constructor, this.selector);
2534 2511
2535 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg) { 2512 R dispatch(SemanticDeclarationVisitor<R, A> visitor, Send node, A arg) {
2536 return visitor.visitThisConstructorInvoke( 2513 return visitor.visitThisConstructorInvoke(
2537 node, constructor, node.argumentsNode, selector, arg); 2514 node, constructor, node.argumentsNode, selector, arg);
2538 } 2515 }
2539 } 2516 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/send_resolver.dart ('k') | pkg/compiler/lib/src/ssa/builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698