| 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: |
| 11 /// Replace '#' in [message] by `node.toString()` to create a message for the | 11 /// Replace '#' in [message] by `node.toString()` to create a message for the |
| 12 /// error. | 12 /// error. |
| 13 R bulkHandleNode(Node node, String message, A arg); | 13 R bulkHandleNode(Node node, String message, A arg); |
| 14 } | 14 } |
| 15 | 15 |
| 16 /// Mixin that implements all `errorX` methods of [SemanticSendVisitor] by | 16 /// Mixin that implements all `errorX` methods of [SemanticSendVisitor] by |
| 17 /// delegating to a bulk handler. | 17 /// delegating to a bulk handler. |
| 18 /// | 18 /// |
| 19 /// Use this mixin to provide a trivial implementation for all `errorX` methods. | 19 /// Use this mixin to provide a trivial implementation for all `errorX` methods. |
| 20 abstract class ErrorBulkMixin<R, A> | 20 abstract class ErrorBulkMixin<R, A> |
| 21 implements SemanticSendVisitor<R, A>, BulkHandle<R, A> { | 21 implements SemanticSendVisitor<R, A>, BulkHandle<R, A> { |
| 22 | 22 |
| 23 // TODO(johnniwinther): Ensure that all error methods have an | 23 // TODO(johnniwinther): Ensure that all error methods have an |
| 24 // [ErroneousElement]. | 24 // [ErroneousElement]. |
| 25 R bulkHandleError(Node node, ErroneousElement error, A arg) { | 25 R bulkHandleError(Node node, ErroneousElement error, A arg) { |
| 26 return bulkHandleNode(node, "Error expression `#` unhandled.", arg); | 26 return bulkHandleNode(node, "Error expression `#` unhandled.", arg); |
| 27 } | 27 } |
| 28 | 28 |
| 29 @override | 29 @override |
| 30 R errorInvalidAssert( | |
| 31 Send node, | |
| 32 NodeList arguments, | |
| 33 A arg) { | |
| 34 return bulkHandleError(node, null, arg); | |
| 35 } | |
| 36 | |
| 37 @override | |
| 38 R errorNonConstantConstructorInvoke( | 30 R errorNonConstantConstructorInvoke( |
| 39 NewExpression node, | 31 NewExpression node, |
| 40 Element element, | 32 Element element, |
| 41 DartType type, | 33 DartType type, |
| 42 NodeList arguments, | 34 NodeList arguments, |
| 43 CallStructure callStructure, | 35 CallStructure callStructure, |
| 44 A arg) { | 36 A arg) { |
| 45 return bulkHandleError(node, null, arg); | 37 return bulkHandleError(node, null, arg); |
| 46 } | 38 } |
| 47 | 39 |
| (...skipping 2888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2936 @override | 2928 @override |
| 2937 R visitAs( | 2929 R visitAs( |
| 2938 Send node, | 2930 Send node, |
| 2939 Node expression, | 2931 Node expression, |
| 2940 DartType type, | 2932 DartType type, |
| 2941 A arg) { | 2933 A arg) { |
| 2942 return bulkHandleNode(node, 'As cast `#` unhandled.', arg); | 2934 return bulkHandleNode(node, 'As cast `#` unhandled.', arg); |
| 2943 } | 2935 } |
| 2944 | 2936 |
| 2945 @override | 2937 @override |
| 2946 R visitAssert( | |
| 2947 Send node, | |
| 2948 Node expression, | |
| 2949 A arg) { | |
| 2950 return bulkHandleNode(node, 'Assert `#` unhandled.', arg); | |
| 2951 } | |
| 2952 | |
| 2953 @override | |
| 2954 R visitIs( | 2938 R visitIs( |
| 2955 Send node, | 2939 Send node, |
| 2956 Node expression, | 2940 Node expression, |
| 2957 DartType type, | 2941 DartType type, |
| 2958 A arg) { | 2942 A arg) { |
| 2959 return bulkHandleNode(node, 'Is test `#` unhandled.', arg); | 2943 return bulkHandleNode(node, 'Is test `#` unhandled.', arg); |
| 2960 } | 2944 } |
| 2961 | 2945 |
| 2962 @override | 2946 @override |
| 2963 R visitIsNot( | 2947 R visitIsNot( |
| (...skipping 1564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4528 R visitAs( | 4512 R visitAs( |
| 4529 Send node, | 4513 Send node, |
| 4530 Node expression, | 4514 Node expression, |
| 4531 DartType type, | 4515 DartType type, |
| 4532 A arg) { | 4516 A arg) { |
| 4533 apply(expression, arg); | 4517 apply(expression, arg); |
| 4534 return null; | 4518 return null; |
| 4535 } | 4519 } |
| 4536 | 4520 |
| 4537 @override | 4521 @override |
| 4538 R visitAssert( | |
| 4539 Send node, | |
| 4540 Node expression, | |
| 4541 A arg) { | |
| 4542 apply(expression, arg); | |
| 4543 return null; | |
| 4544 } | |
| 4545 | |
| 4546 @override | |
| 4547 R visitBinary( | 4522 R visitBinary( |
| 4548 Send node, | 4523 Send node, |
| 4549 Node left, | 4524 Node left, |
| 4550 BinaryOperator operator, | 4525 BinaryOperator operator, |
| 4551 Node right, | 4526 Node right, |
| 4552 A arg) { | 4527 A arg) { |
| 4553 apply(left, arg); | 4528 apply(left, arg); |
| 4554 apply(right, arg); | 4529 apply(right, arg); |
| 4555 return null; | 4530 return null; |
| 4556 } | 4531 } |
| (...skipping 7824 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12381 NewExpression node, | 12356 NewExpression node, |
| 12382 ConstructorElement constructor, | 12357 ConstructorElement constructor, |
| 12383 InterfaceType type, | 12358 InterfaceType type, |
| 12384 NodeList arguments, | 12359 NodeList arguments, |
| 12385 CallStructure callStructure, | 12360 CallStructure callStructure, |
| 12386 A arg) { | 12361 A arg) { |
| 12387 return handleConstructorInvoke( | 12362 return handleConstructorInvoke( |
| 12388 node, constructor, type, arguments, callStructure, arg); | 12363 node, constructor, type, arguments, callStructure, arg); |
| 12389 } | 12364 } |
| 12390 } | 12365 } |
| OLD | NEW |