Index: pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart |
diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart |
index 75272f311f4bd4ced4b72f92bfdadec74d4facd3..36db8a8b20019d9a0c9a0cd936cf77b659e964a9 100644 |
--- a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart |
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart |
@@ -179,6 +179,16 @@ abstract class ErrorBulkMixin<R, A> |
} |
@override |
+ R errorInvalidIndexSetIfNull( |
+ SendSet node, |
+ ErroneousElement error, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleError(node, error, arg); |
+ } |
+ |
+ @override |
R errorInvalidIndexPrefix( |
Send node, |
ErroneousElement error, |
@@ -1842,6 +1852,59 @@ abstract class SetIfNullBulkMixin<R, A> |
A arg) { |
return bulkHandleSetIfNull(node, arg); |
} |
+ |
+ @override |
+ R visitIndexSetIfNull( |
+ SendSet node, |
+ Node receiver, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleSetIfNull(node, arg); |
+ } |
+ |
+ @override |
+ R visitSuperIndexSetIfNull( |
+ SendSet node, |
+ MethodElement getter, |
+ MethodElement setter, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleSetIfNull(node, arg); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperGetterIndexSetIfNull( |
+ Send node, |
+ Element element, |
+ MethodElement setter, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleSetIfNull(node, arg); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperSetterIndexSetIfNull( |
+ Send node, |
+ MethodElement getter, |
+ Element element, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleSetIfNull(node, arg); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperIndexSetIfNull( |
+ Send node, |
+ Element element, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return bulkHandleSetIfNull(node, arg); |
+ } |
} |
/// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by |
@@ -4044,15 +4107,6 @@ class TraversalSendMixin<R, A> implements SemanticSendVisitor<R, A> { |
} |
@override |
- R errorInvalidAssert( |
- Send node, |
- NodeList arguments, |
- A arg) { |
- apply(arguments, arg); |
- return null; |
- } |
- |
- @override |
R errorInvalidCompound( |
Send node, |
ErroneousElement error, |
@@ -7222,6 +7276,83 @@ class TraversalSendMixin<R, A> implements SemanticSendVisitor<R, A> { |
A arg) { |
return null; |
} |
+ |
+ @override |
+ R visitIndexSetIfNull( |
+ SendSet node, |
+ Node receiver, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(receiver, arg); |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
+ |
+ @override |
+ R visitSuperIndexSetIfNull( |
+ SendSet node, |
+ MethodElement getter, |
+ MethodElement setter, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperGetterIndexSetIfNull( |
+ Send node, |
+ Element element, |
+ MethodElement setter, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperSetterIndexSetIfNull( |
+ Send node, |
+ MethodElement getter, |
+ Element element, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
+ |
+ |
+ @override |
+ R visitUnresolvedSuperIndexSetIfNull( |
+ Send node, |
+ Element element, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
+ |
+ @override |
+ R errorInvalidIndexSetIfNull( |
+ SendSet node, |
+ ErroneousElement error, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ apply(index, arg); |
+ apply(rhs, arg); |
+ return null; |
+ } |
} |
/// [SemanticDeclarationVisitor] that visits subnodes. |
@@ -9866,7 +9997,7 @@ abstract class BaseImplementationOfCompoundsMixin<R, A> |
arg); |
} |
- |
+ @override |
R visitSuperGetterSetterPrefix( |
Send node, |
FunctionElement getter, |
@@ -11826,7 +11957,72 @@ abstract class BaseImplementationOfIndexCompoundsMixin<R, A> |
} |
} |
+/// Simplified handling of super if-null assignments. |
+abstract class BaseImplementationOfSuperIndexSetIfNullMixin<R, A> |
+ implements SemanticSendVisitor<R, A> { |
+ /// Handle a super index if-null assignments, like `super[index] ??= rhs`. |
+ R handleSuperIndexSetIfNull( |
+ SendSet node, |
+ Element indexFunction, |
+ Element indexSetFunction, |
+ Node index, |
+ Node rhs, |
+ A arg, |
+ {bool isGetterValid, |
+ bool isSetterValid}); |
+ |
+ @override |
+ R visitSuperIndexSetIfNull( |
+ Send node, |
+ FunctionElement indexFunction, |
+ FunctionElement indexSetFunction, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return handleSuperIndexSetIfNull( |
+ node, indexFunction, indexSetFunction, index, rhs, arg, |
+ isGetterValid: true, isSetterValid: true); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperGetterIndexSetIfNull( |
+ Send node, |
+ Element indexFunction, |
+ FunctionElement indexSetFunction, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return handleSuperIndexSetIfNull( |
+ node, indexFunction, indexSetFunction, index, rhs, arg, |
+ isGetterValid: false, isSetterValid: true); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperSetterIndexSetIfNull( |
+ Send node, |
+ FunctionElement indexFunction, |
+ Element indexSetFunction, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return handleSuperIndexSetIfNull( |
+ node, indexFunction, indexSetFunction, index, rhs, arg, |
+ isGetterValid: true, isSetterValid: false); |
+ } |
+ |
+ @override |
+ R visitUnresolvedSuperIndexSetIfNull( |
+ Send node, |
+ Element element, |
+ Node index, |
+ Node rhs, |
+ A arg) { |
+ return handleSuperIndexSetIfNull( |
+ node, element, element, index, rhs, arg, |
+ isGetterValid: false, isSetterValid: false); |
+ } |
+} |
/// Mixin that groups all `visitSuperXPrefix`, `visitSuperXPostfix` methods by |
/// delegating calls to `handleSuperXPostfixPrefix` methods. |