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

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

Issue 1842033004: Add *IndexSetIfNull methods to SemanticSendVisitor. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 8 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 part of dart2js.semantics_visitor; 5 part of dart2js.semantics_visitor;
6 6
7 /// Interface for bulk handling of a [Node] in a semantic visitor. 7 /// Interface for bulk handling of a [Node] in a semantic visitor.
8 abstract class BulkHandle<R, A> { 8 abstract class BulkHandle<R, A> {
9 /// Handle [node] either regardless of semantics or to report that [node] is 9 /// Handle [node] either regardless of semantics or to report that [node] is
10 /// unhandled. [message] contains a message template for the latter case: 10 /// unhandled. [message] contains a message template for the latter case:
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 Send node, 172 Send node,
173 ErroneousElement error, 173 ErroneousElement error,
174 Node index, 174 Node index,
175 AssignmentOperator operator, 175 AssignmentOperator operator,
176 Node rhs, 176 Node rhs,
177 A arg) { 177 A arg) {
178 return bulkHandleError(node, error, arg); 178 return bulkHandleError(node, error, arg);
179 } 179 }
180 180
181 @override 181 @override
182 R errorInvalidIndexSetIfNull(
183 SendSet node,
184 ErroneousElement error,
185 Node index,
186 Node rhs,
187 A arg) {
188 return bulkHandleError(node, error, arg);
189 }
190
191 @override
182 R errorInvalidIndexPrefix( 192 R errorInvalidIndexPrefix(
183 Send node, 193 Send node,
184 ErroneousElement error, 194 ErroneousElement error,
185 Node index, 195 Node index,
186 IncDecOperator operator, 196 IncDecOperator operator,
187 A arg) { 197 A arg) {
188 return bulkHandleError(node, error, arg); 198 return bulkHandleError(node, error, arg);
189 } 199 }
190 200
191 @override 201 @override
(...skipping 1643 matching lines...) Expand 10 before | Expand all | Expand 10 after
1835 1845
1836 @override 1846 @override
1837 R visitUnresolvedTopLevelSetterSetIfNull( 1847 R visitUnresolvedTopLevelSetterSetIfNull(
1838 Send node, 1848 Send node,
1839 MethodElement getter, 1849 MethodElement getter,
1840 Element element, 1850 Element element,
1841 Node rhs, 1851 Node rhs,
1842 A arg) { 1852 A arg) {
1843 return bulkHandleSetIfNull(node, arg); 1853 return bulkHandleSetIfNull(node, arg);
1844 } 1854 }
1855
1856 @override
1857 R visitIndexSetIfNull(
1858 SendSet node,
1859 Node receiver,
1860 Node index,
1861 Node rhs,
1862 A arg) {
1863 return bulkHandleSetIfNull(node, arg);
1864 }
1865
1866 @override
1867 R visitSuperIndexSetIfNull(
1868 SendSet node,
1869 MethodElement getter,
1870 MethodElement setter,
1871 Node index,
1872 Node rhs,
1873 A arg) {
1874 return bulkHandleSetIfNull(node, arg);
1875 }
1876
1877 @override
1878 R visitUnresolvedSuperGetterIndexSetIfNull(
1879 Send node,
1880 Element element,
1881 MethodElement setter,
1882 Node index,
1883 Node rhs,
1884 A arg) {
1885 return bulkHandleSetIfNull(node, arg);
1886 }
1887
1888 @override
1889 R visitUnresolvedSuperSetterIndexSetIfNull(
1890 Send node,
1891 MethodElement getter,
1892 Element element,
1893 Node index,
1894 Node rhs,
1895 A arg) {
1896 return bulkHandleSetIfNull(node, arg);
1897 }
1898
1899 @override
1900 R visitUnresolvedSuperIndexSetIfNull(
1901 Send node,
1902 Element element,
1903 Node index,
1904 Node rhs,
1905 A arg) {
1906 return bulkHandleSetIfNull(node, arg);
1907 }
1845 } 1908 }
1846 1909
1847 /// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by 1910 /// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by
1848 /// delegating to a bulk handler. 1911 /// delegating to a bulk handler.
1849 /// 1912 ///
1850 /// Use this mixin to provide a trivial implementation for all `visitXInvoke` 1913 /// Use this mixin to provide a trivial implementation for all `visitXInvoke`
1851 /// methods. 1914 /// methods.
1852 abstract class InvokeBulkMixin<R, A> 1915 abstract class InvokeBulkMixin<R, A>
1853 implements SemanticSendVisitor<R, A>, BulkHandle<R, A> { 1916 implements SemanticSendVisitor<R, A>, BulkHandle<R, A> {
1854 1917
(...skipping 2182 matching lines...) Expand 10 before | Expand all | Expand 10 after
4037 } 4100 }
4038 4101
4039 @override 4102 @override
4040 void previsitDeferredAccess( 4103 void previsitDeferredAccess(
4041 Send node, 4104 Send node,
4042 PrefixElement prefix, 4105 PrefixElement prefix,
4043 A arg) { 4106 A arg) {
4044 } 4107 }
4045 4108
4046 @override 4109 @override
4047 R errorInvalidAssert(
4048 Send node,
4049 NodeList arguments,
4050 A arg) {
4051 apply(arguments, arg);
4052 return null;
4053 }
4054
4055 @override
4056 R errorInvalidCompound( 4110 R errorInvalidCompound(
4057 Send node, 4111 Send node,
4058 ErroneousElement error, 4112 ErroneousElement error,
4059 AssignmentOperator operator, 4113 AssignmentOperator operator,
4060 Node rhs, 4114 Node rhs,
4061 A arg) { 4115 A arg) {
4062 apply(rhs, arg); 4116 apply(rhs, arg);
4063 return null; 4117 return null;
4064 } 4118 }
4065 4119
(...skipping 3149 matching lines...) Expand 10 before | Expand all | Expand 10 after
7215 7269
7216 @override 7270 @override
7217 R visitUnresolvedSuperSetterPrefix( 7271 R visitUnresolvedSuperSetterPrefix(
7218 Send node, 7272 Send node,
7219 MethodElement getter, 7273 MethodElement getter,
7220 Element element, 7274 Element element,
7221 IncDecOperator operator, 7275 IncDecOperator operator,
7222 A arg) { 7276 A arg) {
7223 return null; 7277 return null;
7224 } 7278 }
7279
7280 @override
7281 R visitIndexSetIfNull(
7282 SendSet node,
7283 Node receiver,
7284 Node index,
7285 Node rhs,
7286 A arg) {
7287 apply(receiver, arg);
7288 apply(index, arg);
7289 apply(rhs, arg);
7290 return null;
7291 }
7292
7293 @override
7294 R visitSuperIndexSetIfNull(
7295 SendSet node,
7296 MethodElement getter,
7297 MethodElement setter,
7298 Node index,
7299 Node rhs,
7300 A arg) {
7301 apply(index, arg);
7302 apply(rhs, arg);
7303 return null;
7304 }
7305
7306 @override
7307 R visitUnresolvedSuperGetterIndexSetIfNull(
7308 Send node,
7309 Element element,
7310 MethodElement setter,
7311 Node index,
7312 Node rhs,
7313 A arg) {
7314 apply(index, arg);
7315 apply(rhs, arg);
7316 return null;
7317 }
7318
7319 @override
7320 R visitUnresolvedSuperSetterIndexSetIfNull(
7321 Send node,
7322 MethodElement getter,
7323 Element element,
7324 Node index,
7325 Node rhs,
7326 A arg) {
7327 apply(index, arg);
7328 apply(rhs, arg);
7329 return null;
7330 }
7331
7332
7333 @override
7334 R visitUnresolvedSuperIndexSetIfNull(
7335 Send node,
7336 Element element,
7337 Node index,
7338 Node rhs,
7339 A arg) {
7340 apply(index, arg);
7341 apply(rhs, arg);
7342 return null;
7343 }
7344
7345 @override
7346 R errorInvalidIndexSetIfNull(
7347 SendSet node,
7348 ErroneousElement error,
7349 Node index,
7350 Node rhs,
7351 A arg) {
7352 apply(index, arg);
7353 apply(rhs, arg);
7354 return null;
7355 }
7225 } 7356 }
7226 7357
7227 /// [SemanticDeclarationVisitor] that visits subnodes. 7358 /// [SemanticDeclarationVisitor] that visits subnodes.
7228 class TraversalDeclarationMixin<R, A> 7359 class TraversalDeclarationMixin<R, A>
7229 implements SemanticDeclarationVisitor<R, A> { 7360 implements SemanticDeclarationVisitor<R, A> {
7230 @override 7361 @override
7231 R apply(Node node, A arg) { 7362 R apply(Node node, A arg) {
7232 throw new UnimplementedError("TraversalMixin.apply unimplemented"); 7363 throw new UnimplementedError("TraversalMixin.apply unimplemented");
7233 } 7364 }
7234 7365
(...skipping 2624 matching lines...) Expand 10 before | Expand all | Expand 10 after
9859 IncDecOperator operator, 9990 IncDecOperator operator,
9860 A arg) { 9991 A arg) {
9861 return handleSuperCompounds( 9992 return handleSuperCompounds(
9862 node, 9993 node,
9863 field, CompoundGetter.FIELD, 9994 field, CompoundGetter.FIELD,
9864 setter, CompoundSetter.SETTER, 9995 setter, CompoundSetter.SETTER,
9865 new IncDecCompound(CompoundKind.PREFIX, operator), 9996 new IncDecCompound(CompoundKind.PREFIX, operator),
9866 arg); 9997 arg);
9867 } 9998 }
9868 9999
9869 10000 @override
9870 R visitSuperGetterSetterPrefix( 10001 R visitSuperGetterSetterPrefix(
9871 Send node, 10002 Send node,
9872 FunctionElement getter, 10003 FunctionElement getter,
9873 FunctionElement setter, 10004 FunctionElement setter,
9874 IncDecOperator operator, 10005 IncDecOperator operator,
9875 A arg) { 10006 A arg) {
9876 return handleSuperCompounds( 10007 return handleSuperCompounds(
9877 node, 10008 node,
9878 getter, CompoundGetter.GETTER, 10009 getter, CompoundGetter.GETTER,
9879 setter, CompoundSetter.SETTER, 10010 setter, CompoundSetter.SETTER,
(...skipping 1939 matching lines...) Expand 10 before | Expand all | Expand 10 after
11819 Node receiver, 11950 Node receiver,
11820 Node index, 11951 Node index,
11821 IncDecOperator operator, 11952 IncDecOperator operator,
11822 A arg) { 11953 A arg) {
11823 return handleIndexCompounds( 11954 return handleIndexCompounds(
11824 node, receiver, index, 11955 node, receiver, index,
11825 new IncDecCompound(CompoundKind.PREFIX, operator), arg); 11956 new IncDecCompound(CompoundKind.PREFIX, operator), arg);
11826 } 11957 }
11827 } 11958 }
11828 11959
11960 /// Simplified handling of super if-null assignments.
11961 abstract class BaseImplementationOfSuperIndexSetIfNullMixin<R, A>
11962 implements SemanticSendVisitor<R, A> {
11829 11963
11964 /// Handle a super index if-null assignments, like `super[index] ??= rhs`.
11965 R handleSuperIndexSetIfNull(
11966 SendSet node,
11967 Element indexFunction,
11968 Element indexSetFunction,
11969 Node index,
11970 Node rhs,
11971 A arg,
11972 {bool isGetterValid,
11973 bool isSetterValid});
11974
11975 @override
11976 R visitSuperIndexSetIfNull(
11977 Send node,
11978 FunctionElement indexFunction,
11979 FunctionElement indexSetFunction,
11980 Node index,
11981 Node rhs,
11982 A arg) {
11983 return handleSuperIndexSetIfNull(
11984 node, indexFunction, indexSetFunction, index, rhs, arg,
11985 isGetterValid: true, isSetterValid: true);
11986 }
11987
11988 @override
11989 R visitUnresolvedSuperGetterIndexSetIfNull(
11990 Send node,
11991 Element indexFunction,
11992 FunctionElement indexSetFunction,
11993 Node index,
11994 Node rhs,
11995 A arg) {
11996 return handleSuperIndexSetIfNull(
11997 node, indexFunction, indexSetFunction, index, rhs, arg,
11998 isGetterValid: false, isSetterValid: true);
11999 }
12000
12001 @override
12002 R visitUnresolvedSuperSetterIndexSetIfNull(
12003 Send node,
12004 FunctionElement indexFunction,
12005 Element indexSetFunction,
12006 Node index,
12007 Node rhs,
12008 A arg) {
12009 return handleSuperIndexSetIfNull(
12010 node, indexFunction, indexSetFunction, index, rhs, arg,
12011 isGetterValid: true, isSetterValid: false);
12012 }
12013
12014 @override
12015 R visitUnresolvedSuperIndexSetIfNull(
12016 Send node,
12017 Element element,
12018 Node index,
12019 Node rhs,
12020 A arg) {
12021 return handleSuperIndexSetIfNull(
12022 node, element, element, index, rhs, arg,
12023 isGetterValid: false, isSetterValid: false);
12024 }
12025 }
11830 12026
11831 /// Mixin that groups all `visitSuperXPrefix`, `visitSuperXPostfix` methods by 12027 /// Mixin that groups all `visitSuperXPrefix`, `visitSuperXPostfix` methods by
11832 /// delegating calls to `handleSuperXPostfixPrefix` methods. 12028 /// delegating calls to `handleSuperXPostfixPrefix` methods.
11833 /// 12029 ///
11834 /// This mixin is useful for the cases where super prefix/postfix expression are 12030 /// This mixin is useful for the cases where super prefix/postfix expression are
11835 /// handled uniformly. 12031 /// handled uniformly.
11836 abstract class BaseImplementationOfSuperIncDecsMixin<R, A> 12032 abstract class BaseImplementationOfSuperIncDecsMixin<R, A>
11837 implements SemanticSendVisitor<R, A> { 12033 implements SemanticSendVisitor<R, A> {
11838 R handleSuperFieldFieldPostfixPrefix( 12034 R handleSuperFieldFieldPostfixPrefix(
11839 Send node, 12035 Send node,
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
12384 NewExpression node, 12580 NewExpression node,
12385 ConstructorElement constructor, 12581 ConstructorElement constructor,
12386 InterfaceType type, 12582 InterfaceType type,
12387 NodeList arguments, 12583 NodeList arguments,
12388 CallStructure callStructure, 12584 CallStructure callStructure,
12389 A arg) { 12585 A arg) {
12390 return handleConstructorInvoke( 12586 return handleConstructorInvoke(
12391 node, constructor, type, arguments, callStructure, arg); 12587 node, constructor, type, arguments, callStructure, arg);
12392 } 12588 }
12393 } 12589 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor.dart ('k') | pkg/compiler/lib/src/resolution/send_structure.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698