Chromium Code Reviews| Index: pkg/compiler/lib/src/resolution/semantic_visitor.dart |
| diff --git a/pkg/compiler/lib/src/resolution/semantic_visitor.dart b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
| index e28d3e1fda697bd0de62e3779686d8c12ea63590..ebb8dc62d707c66351c36580b1ebd354a9456306 100644 |
| --- a/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
| +++ b/pkg/compiler/lib/src/resolution/semantic_visitor.dart |
| @@ -3181,8 +3181,7 @@ abstract class SemanticSendVisitor<R, A> { |
| A arg); |
| /// Compound index assignment of [rhs] with [operator] to [index] on the |
| - /// index operators of [receiver] whose getter and setter are defined by |
| - /// [getterSelector] and [setterSelector], respectively. |
| + /// index operators of [receiver]. |
| /// |
| /// For instance: |
| /// |
| @@ -3219,8 +3218,8 @@ abstract class SemanticSendVisitor<R, A> { |
| A arg); |
| /// Compound index assignment of [rhs] with [operator] to [index] on a super |
| - /// super class where the index getter is undefined and the index setter is |
| - /// defined by [setter]. |
| + /// class where the index getter is undefined and the index setter is defined |
| + /// by [setter]. |
| /// |
| /// For instance: |
| /// |
| @@ -3240,8 +3239,8 @@ abstract class SemanticSendVisitor<R, A> { |
| A arg); |
| /// Compound index assignment of [rhs] with [operator] to [index] on a super |
| - /// super class where the index getter is defined by [getter] but the index |
| - /// setter is undefined. |
| + /// class where the index getter is defined by [getter] but the index setter |
| + /// is undefined. |
| /// |
| /// For instance: |
| /// |
| @@ -3262,7 +3261,7 @@ abstract class SemanticSendVisitor<R, A> { |
| A arg); |
| /// Compound index assignment of [rhs] with [operator] to [index] on a super |
| - /// super class where the index getter and setter are undefined. |
| + /// class where the index getter and setter are undefined. |
| /// |
| /// For instance: |
| /// |
| @@ -3280,6 +3279,98 @@ abstract class SemanticSendVisitor<R, A> { |
| Node rhs, |
| A arg); |
| + /// If-null assignment expression of [rhs] to [index] on the index operators |
| + /// of [receiver]. |
| + /// |
| + /// For instance: |
| + /// |
| + /// m(receiver, index, rhs) => receiver[index] ??= rhs; |
| + /// |
| + R visitIndexSetIfNull( |
| + SendSet node, |
| + Node receiver, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| + /// If-null assignment expression of [rhs] to [index] on the index operators |
| + /// of a super class defined by [getter] and [setter]. |
| + /// |
| + /// For instance: |
| + /// |
| + /// class B { |
| + /// operator [](index) {} |
| + /// operator [](index, value) {} |
| + /// } |
| + /// class C extends B { |
| + /// m(index, rhs) => super[index] ??= rhs; |
| + /// } |
| + /// |
| + R visitSuperIndexSetIfNull( |
| + SendSet node, |
| + MethodElement getter, |
| + MethodElement setter, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| + /// If-null assignment expression of [rhs] to [index] on a super class where |
| + /// the index getter is undefined and the index setter is defined by [setter]. |
| + /// |
| + /// For instance: |
| + /// |
| + /// class B { |
|
Siggi Cherem (dart-lang)
2016/03/31 16:42:19
add operator[]=(index)? (otherwise the example is
Johnni Winther
2016/04/01 07:32:58
Done.
|
| + /// } |
| + /// class C extends B { |
| + /// m() => super[1] ??= 42; |
| + /// } |
| + /// |
| + R visitUnresolvedSuperGetterIndexSetIfNull( |
| + Send node, |
| + Element element, |
| + MethodElement setter, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| + /// If-null assignment expression of [rhs] to [index] on a super class where |
| + /// the index getter is defined by [getter] but the index setter is undefined. |
| + /// |
| + /// For instance: |
| + /// |
| + /// class B { |
| + /// operator [](index) => 42; |
| + /// } |
| + /// class C extends B { |
| + /// m() => super[1] += 42; |
|
Siggi Cherem (dart-lang)
2016/03/31 16:42:19
s/+=/??=/
Johnni Winther
2016/04/01 07:32:58
Done.
|
| + /// } |
| + /// |
| + R visitUnresolvedSuperSetterIndexSetIfNull( |
| + Send node, |
| + MethodElement getter, |
| + Element element, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| + /// If-null assignment expression of [rhs] to [index] on a super class where |
| + /// the index getter and setter are undefined. |
| + /// |
| + /// For instance: |
| + /// |
| + /// class B { |
| + /// } |
| + /// class C extends B { |
| + /// m() => super[1] ??= 42; |
| + /// } |
| + /// |
| + R visitUnresolvedSuperIndexSetIfNull( |
| + Send node, |
| + Element element, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| /// Prefix expression with [operator] of the property on [receiver] whose |
| /// getter and setter are defined by [getterSelector] and [setterSelector], |
| /// respectively. |
| @@ -5087,6 +5178,22 @@ abstract class SemanticSendVisitor<R, A> { |
| Node rhs, |
| A arg); |
| + /// If-null assignment expression of [rhs] to [index] on the index operators |
| + /// of an invalid expression. |
| + /// |
| + /// For instance: |
| + /// |
| + /// import 'foo.dart' as p; |
| + /// |
| + /// m(index, rhs) => p[index] ??= rhs; |
| + /// |
| + R errorInvalidIndexSetIfNull( |
| + SendSet node, |
| + ErroneousElement error, |
| + Node index, |
| + Node rhs, |
| + A arg); |
| + |
| /// Unary operation with [operator] on an invalid expression. |
| /// |
| /// For instance: |