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

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

Issue 1262363003: Handle super index SendSet operations. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 4 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 817 matching lines...) Expand 10 before | Expand all | Expand 10 after
828 828
829 NotStructure(this.semantics); 829 NotStructure(this.semantics);
830 830
831 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) { 831 R dispatch(SemanticSendVisitor<R, A> visitor, Send node, A arg) {
832 switch (semantics.kind) { 832 switch (semantics.kind) {
833 case AccessKind.DYNAMIC_PROPERTY: 833 case AccessKind.DYNAMIC_PROPERTY:
834 return visitor.visitNot( 834 return visitor.visitNot(
835 node, 835 node,
836 node.receiver, 836 node.receiver,
837 arg); 837 arg);
838 default: 838 default:
839 // This is not a valid case. 839 // This is not a valid case.
840 break; 840 break;
841 } 841 }
842 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}"); 842 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}");
843 } 843 }
844 844
845 String toString() => 'not($semantics)'; 845 String toString() => 'not($semantics)';
846 } 846 }
847 847
848 /// The structure for a [Send] that is an invocation of a user definable unary 848 /// The structure for a [Send] that is an invocation of a user definable unary
(...skipping 20 matching lines...) Expand all
869 node, 869 node,
870 operator, 870 operator,
871 semantics.element, 871 semantics.element,
872 arg); 872 arg);
873 case AccessKind.UNRESOLVED_SUPER: 873 case AccessKind.UNRESOLVED_SUPER:
874 return visitor.visitUnresolvedSuperUnary( 874 return visitor.visitUnresolvedSuperUnary(
875 node, 875 node,
876 operator, 876 operator,
877 semantics.element, 877 semantics.element,
878 arg); 878 arg);
879 case AccessKind.INVALID:
880 return visitor.errorInvalidUnary(
881 node,
882 operator,
883 semantics.element,
884 arg);
879 default: 885 default:
880 // This is not a valid case. 886 // This is not a valid case.
881 break; 887 break;
882 } 888 }
883 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}"); 889 throw new SpannableAssertionFailure(node, "Invalid setter: ${semantics}");
884 } 890 }
885 891
886 String toString() => 'unary($operator,$semantics)'; 892 String toString() => 'unary($operator,$semantics)';
887 } 893 }
888 894
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 node, 930 node,
925 semantics.element, 931 semantics.element,
926 node.arguments.single, 932 node.arguments.single,
927 arg); 933 arg);
928 case AccessKind.UNRESOLVED_SUPER: 934 case AccessKind.UNRESOLVED_SUPER:
929 return visitor.visitUnresolvedSuperIndex( 935 return visitor.visitUnresolvedSuperIndex(
930 node, 936 node,
931 semantics.element, 937 semantics.element,
932 node.arguments.single, 938 node.arguments.single,
933 arg); 939 arg);
940 case AccessKind.INVALID:
941 return visitor.errorInvalidIndex(
942 node,
943 semantics.element,
944 node.arguments.single,
945 arg);
934 default: 946 default:
935 // This is not a valid case. 947 // This is not a valid case.
936 break; 948 break;
937 } 949 }
938 throw new SpannableAssertionFailure(node, "Invalid index: ${semantics}"); 950 throw new SpannableAssertionFailure(node, "Invalid index: ${semantics}");
939 } 951 }
940 } 952 }
941 953
942 /// The structure for a [Send] that is an equals test, i.e. of the form 954 /// The structure for a [Send] that is an equals test, i.e. of the form
943 /// `a == b`. 955 /// `a == b`.
(...skipping 10 matching lines...) Expand all
954 node, 966 node,
955 node.receiver, 967 node.receiver,
956 node.arguments.single, 968 node.arguments.single,
957 arg); 969 arg);
958 case AccessKind.SUPER_METHOD: 970 case AccessKind.SUPER_METHOD:
959 return visitor.visitSuperEquals( 971 return visitor.visitSuperEquals(
960 node, 972 node,
961 semantics.element, 973 semantics.element,
962 node.arguments.single, 974 node.arguments.single,
963 arg); 975 arg);
976 case AccessKind.INVALID:
977 return visitor.errorInvalidEquals(
978 node,
979 semantics.element,
980 node.arguments.single,
981 arg);
964 default: 982 default:
965 // This is not a valid case. 983 // This is not a valid case.
966 break; 984 break;
967 } 985 }
968 throw new SpannableAssertionFailure(node, "Invalid equals: ${semantics}"); 986 throw new SpannableAssertionFailure(node, "Invalid equals: ${semantics}");
969 } 987 }
970 988
971 String toString() => '==($semantics)'; 989 String toString() => '==($semantics)';
972 } 990 }
973 991
(...skipping 12 matching lines...) Expand all
986 node, 1004 node,
987 node.receiver, 1005 node.receiver,
988 node.arguments.single, 1006 node.arguments.single,
989 arg); 1007 arg);
990 case AccessKind.SUPER_METHOD: 1008 case AccessKind.SUPER_METHOD:
991 return visitor.visitSuperNotEquals( 1009 return visitor.visitSuperNotEquals(
992 node, 1010 node,
993 semantics.element, 1011 semantics.element,
994 node.arguments.single, 1012 node.arguments.single,
995 arg); 1013 arg);
1014 case AccessKind.INVALID:
1015 return visitor.errorInvalidNotEquals(
1016 node,
1017 semantics.element,
1018 node.arguments.single,
1019 arg);
996 default: 1020 default:
997 // This is not a valid case. 1021 // This is not a valid case.
998 break; 1022 break;
999 } 1023 }
1000 throw new SpannableAssertionFailure( 1024 throw new SpannableAssertionFailure(
1001 node, "Invalid not equals: ${semantics}"); 1025 node, "Invalid not equals: ${semantics}");
1002 } 1026 }
1003 1027
1004 String toString() => '!=($semantics)'; 1028 String toString() => '!=($semantics)';
1005 } 1029 }
(...skipping 25 matching lines...) Expand all
1031 operator, 1055 operator,
1032 node.arguments.single, 1056 node.arguments.single,
1033 arg); 1057 arg);
1034 case AccessKind.UNRESOLVED_SUPER: 1058 case AccessKind.UNRESOLVED_SUPER:
1035 return visitor.visitUnresolvedSuperBinary( 1059 return visitor.visitUnresolvedSuperBinary(
1036 node, 1060 node,
1037 semantics.element, 1061 semantics.element,
1038 operator, 1062 operator,
1039 node.arguments.single, 1063 node.arguments.single,
1040 arg); 1064 arg);
1065 case AccessKind.INVALID:
1066 return visitor.errorInvalidBinary(
1067 node,
1068 semantics.element,
1069 operator,
1070 node.arguments.single,
1071 arg);
1041 default: 1072 default:
1042 // This is not a valid case. 1073 // This is not a valid case.
1043 break; 1074 break;
1044 } 1075 }
1045 throw new SpannableAssertionFailure( 1076 throw new SpannableAssertionFailure(
1046 node, "Invalid binary: ${semantics}"); 1077 node, "Invalid binary: ${semantics}");
1047 } 1078 }
1048 1079
1049 String toString() => 'binary($operator,$semantics)'; 1080 String toString() => 'binary($operator,$semantics)';
1050 } 1081 }
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 node.arguments.tail.head, 1126 node.arguments.tail.head,
1096 arg); 1127 arg);
1097 case AccessKind.UNRESOLVED_SUPER: 1128 case AccessKind.UNRESOLVED_SUPER:
1098 case AccessKind.UNRESOLVED: 1129 case AccessKind.UNRESOLVED:
1099 return visitor.visitUnresolvedSuperIndexSet( 1130 return visitor.visitUnresolvedSuperIndexSet(
1100 node, 1131 node,
1101 semantics.element, 1132 semantics.element,
1102 node.arguments.first, 1133 node.arguments.first,
1103 node.arguments.tail.head, 1134 node.arguments.tail.head,
1104 arg); 1135 arg);
1136 case AccessKind.INVALID:
1137 return visitor.errorInvalidIndexSet(
1138 node,
1139 semantics.element,
1140 node.arguments.first,
1141 node.arguments.tail.head,
1142 arg);
1105 default: 1143 default:
1106 // This is not a valid case. 1144 // This is not a valid case.
1107 break; 1145 break;
1108 } 1146 }
1109 throw new SpannableAssertionFailure( 1147 throw new SpannableAssertionFailure(
1110 node, "Invalid index set: ${semantics}"); 1148 node, "Invalid index set: ${semantics}");
1111 } 1149 }
1112 1150
1113 String toString() => '[]=($semantics)'; 1151 String toString() => '[]=($semantics)';
1114 } 1152 }
(...skipping 29 matching lines...) Expand all
1144 node.arguments.single, 1182 node.arguments.single,
1145 operator, 1183 operator,
1146 arg); 1184 arg);
1147 case AccessKind.UNRESOLVED_SUPER: 1185 case AccessKind.UNRESOLVED_SUPER:
1148 return visitor.visitUnresolvedSuperIndexPrefix( 1186 return visitor.visitUnresolvedSuperIndexPrefix(
1149 node, 1187 node,
1150 semantics.element, 1188 semantics.element,
1151 node.arguments.single, 1189 node.arguments.single,
1152 operator, 1190 operator,
1153 arg); 1191 arg);
1192 case AccessKind.INVALID:
1193 return visitor.errorInvalidIndexPrefix(
1194 node,
1195 semantics.element,
1196 node.arguments.single,
1197 operator,
1198 arg);
1154 case AccessKind.COMPOUND: 1199 case AccessKind.COMPOUND:
1155 CompoundAccessSemantics compoundSemantics = semantics; 1200 CompoundAccessSemantics compoundSemantics = semantics;
1156 switch (compoundSemantics.compoundAccessKind) { 1201 switch (compoundSemantics.compoundAccessKind) {
1157 case CompoundAccessKind.SUPER_GETTER_SETTER: 1202 case CompoundAccessKind.SUPER_GETTER_SETTER:
1158 return visitor.visitSuperIndexPrefix( 1203 return visitor.visitSuperIndexPrefix(
1159 node, 1204 node,
1160 compoundSemantics.getter, 1205 compoundSemantics.getter,
1161 compoundSemantics.setter, 1206 compoundSemantics.setter,
1162 node.arguments.single, 1207 node.arguments.single,
1163 operator, 1208 operator,
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
1223 node.arguments.single, 1268 node.arguments.single,
1224 operator, 1269 operator,
1225 arg); 1270 arg);
1226 case AccessKind.UNRESOLVED_SUPER: 1271 case AccessKind.UNRESOLVED_SUPER:
1227 return visitor.visitUnresolvedSuperIndexPostfix( 1272 return visitor.visitUnresolvedSuperIndexPostfix(
1228 node, 1273 node,
1229 semantics.element, 1274 semantics.element,
1230 node.arguments.single, 1275 node.arguments.single,
1231 operator, 1276 operator,
1232 arg); 1277 arg);
1278 case AccessKind.INVALID:
1279 return visitor.errorInvalidIndexPostfix(
1280 node,
1281 semantics.element,
1282 node.arguments.single,
1283 operator,
1284 arg);
1233 case AccessKind.COMPOUND: 1285 case AccessKind.COMPOUND:
1234 CompoundAccessSemantics compoundSemantics = semantics; 1286 CompoundAccessSemantics compoundSemantics = semantics;
1235 switch (compoundSemantics.compoundAccessKind) { 1287 switch (compoundSemantics.compoundAccessKind) {
1236 case CompoundAccessKind.SUPER_GETTER_SETTER: 1288 case CompoundAccessKind.SUPER_GETTER_SETTER:
1237 return visitor.visitSuperIndexPostfix( 1289 return visitor.visitSuperIndexPostfix(
1238 node, 1290 node,
1239 compoundSemantics.getter, 1291 compoundSemantics.getter,
1240 compoundSemantics.setter, 1292 compoundSemantics.setter,
1241 node.arguments.single, 1293 node.arguments.single,
1242 operator, 1294 operator,
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
1651 node.arguments.tail.head, 1703 node.arguments.tail.head,
1652 arg); 1704 arg);
1653 case AccessKind.UNRESOLVED_SUPER: 1705 case AccessKind.UNRESOLVED_SUPER:
1654 return visitor.visitUnresolvedSuperCompoundIndexSet( 1706 return visitor.visitUnresolvedSuperCompoundIndexSet(
1655 node, 1707 node,
1656 semantics.element, 1708 semantics.element,
1657 node.arguments.first, 1709 node.arguments.first,
1658 operator, 1710 operator,
1659 node.arguments.tail.head, 1711 node.arguments.tail.head,
1660 arg); 1712 arg);
1713 case AccessKind.INVALID:
1714 return visitor.errorInvalidCompoundIndexSet(
1715 node,
1716 semantics.element,
1717 node.arguments.first,
1718 operator,
1719 node.arguments.tail.head,
1720 arg);
1661 case AccessKind.COMPOUND: 1721 case AccessKind.COMPOUND:
1662 CompoundAccessSemantics compoundSemantics = semantics; 1722 CompoundAccessSemantics compoundSemantics = semantics;
1663 switch (compoundSemantics.compoundAccessKind) { 1723 switch (compoundSemantics.compoundAccessKind) {
1664 case CompoundAccessKind.SUPER_GETTER_SETTER: 1724 case CompoundAccessKind.SUPER_GETTER_SETTER:
1665 return visitor.visitSuperCompoundIndexSet( 1725 return visitor.visitSuperCompoundIndexSet(
1666 node, 1726 node,
1667 compoundSemantics.getter, 1727 compoundSemantics.getter,
1668 compoundSemantics.setter, 1728 compoundSemantics.setter,
1669 node.arguments.first, 1729 node.arguments.first,
1670 operator, 1730 operator,
(...skipping 1020 matching lines...) Expand 10 before | Expand all | Expand 10 after
2691 ThisConstructorInvokeStructure( 2751 ThisConstructorInvokeStructure(
2692 this.node, this.constructor, this.callStructure); 2752 this.node, this.constructor, this.callStructure);
2693 2753
2694 R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) { 2754 R dispatch(SemanticDeclarationVisitor<R, A> visitor, A arg) {
2695 return visitor.visitThisConstructorInvoke( 2755 return visitor.visitThisConstructorInvoke(
2696 node, constructor, node.argumentsNode, callStructure, arg); 2756 node, constructor, node.argumentsNode, callStructure, arg);
2697 } 2757 }
2698 2758
2699 bool get isConstructorInvoke => true; 2759 bool get isConstructorInvoke => true;
2700 } 2760 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart ('k') | tests/compiler/dart2js/semantic_visitor_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698