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 2516 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2564 @override | 2556 @override |
2565 R visitAs( | 2557 R visitAs( |
2566 Send node, | 2558 Send node, |
2567 Node expression, | 2559 Node expression, |
2568 DartType type, | 2560 DartType type, |
2569 A arg) { | 2561 A arg) { |
2570 return bulkHandleNode(node, 'As cast `#` unhandled.', arg); | 2562 return bulkHandleNode(node, 'As cast `#` unhandled.', arg); |
2571 } | 2563 } |
2572 | 2564 |
2573 @override | 2565 @override |
2574 R visitAssert( | |
2575 Send node, | |
2576 Node expression, | |
2577 A arg) { | |
2578 return bulkHandleNode(node, 'Assert `#` unhandled.', arg); | |
2579 } | |
2580 | |
2581 @override | |
2582 R visitIs( | 2566 R visitIs( |
2583 Send node, | 2567 Send node, |
2584 Node expression, | 2568 Node expression, |
2585 DartType type, | 2569 DartType type, |
2586 A arg) { | 2570 A arg) { |
2587 return bulkHandleNode(node, 'Is test `#` unhandled.', arg); | 2571 return bulkHandleNode(node, 'Is test `#` unhandled.', arg); |
2588 } | 2572 } |
2589 | 2573 |
2590 @override | 2574 @override |
2591 R visitIsNot( | 2575 R visitIsNot( |
(...skipping 1070 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3662 } | 3646 } |
3663 | 3647 |
3664 @override | 3648 @override |
3665 void previsitDeferredAccess( | 3649 void previsitDeferredAccess( |
3666 Send node, | 3650 Send node, |
3667 PrefixElement prefix, | 3651 PrefixElement prefix, |
3668 A arg) { | 3652 A arg) { |
3669 } | 3653 } |
3670 | 3654 |
3671 @override | 3655 @override |
3672 R errorInvalidAssert( | |
3673 Send node, | |
3674 NodeList arguments, | |
3675 A arg) { | |
3676 apply(arguments, arg); | |
3677 return null; | |
3678 } | |
3679 | |
3680 @override | |
3681 R errorInvalidCompound( | 3656 R errorInvalidCompound( |
3682 Send node, | 3657 Send node, |
3683 ErroneousElement error, | 3658 ErroneousElement error, |
3684 AssignmentOperator operator, | 3659 AssignmentOperator operator, |
3685 Node rhs, | 3660 Node rhs, |
3686 A arg) { | 3661 A arg) { |
3687 apply(rhs, arg); | 3662 apply(rhs, arg); |
3688 return null; | 3663 return null; |
3689 } | 3664 } |
3690 | 3665 |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4155 R visitAs( | 4130 R visitAs( |
4156 Send node, | 4131 Send node, |
4157 Node expression, | 4132 Node expression, |
4158 DartType type, | 4133 DartType type, |
4159 A arg) { | 4134 A arg) { |
4160 apply(expression, arg); | 4135 apply(expression, arg); |
4161 return null; | 4136 return null; |
4162 } | 4137 } |
4163 | 4138 |
4164 @override | 4139 @override |
4165 R visitAssert( | |
4166 Send node, | |
4167 Node expression, | |
4168 A arg) { | |
4169 apply(expression, arg); | |
4170 return null; | |
4171 } | |
4172 | |
4173 @override | |
4174 R visitBinary( | 4140 R visitBinary( |
4175 Send node, | 4141 Send node, |
4176 Node left, | 4142 Node left, |
4177 BinaryOperator operator, | 4143 BinaryOperator operator, |
4178 Node right, | 4144 Node right, |
4179 A arg) { | 4145 A arg) { |
4180 apply(left, arg); | 4146 apply(left, arg); |
4181 apply(right, arg); | 4147 apply(right, arg); |
4182 return null; | 4148 return null; |
4183 } | 4149 } |
(...skipping 6867 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11051 NewExpression node, | 11017 NewExpression node, |
11052 ConstructorElement constructor, | 11018 ConstructorElement constructor, |
11053 InterfaceType type, | 11019 InterfaceType type, |
11054 NodeList arguments, | 11020 NodeList arguments, |
11055 CallStructure callStructure, | 11021 CallStructure callStructure, |
11056 A arg) { | 11022 A arg) { |
11057 return handleConstructorInvoke( | 11023 return handleConstructorInvoke( |
11058 node, constructor, type, arguments, callStructure, arg); | 11024 node, constructor, type, arguments, callStructure, arg); |
11059 } | 11025 } |
11060 } | 11026 } |
OLD | NEW |