| 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 |