OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |