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