Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(363)

Unified Diff: pkg/compiler/lib/src/resolution/semantic_visitor.dart

Issue 1842033004: Add *IndexSetIfNull methods to SemanticSendVisitor. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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..4aaba706fa385fc75180b9c96a3ac916ef861830 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,99 @@ 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 {
+ /// operator [](index, value) {}
+ /// }
+ /// 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;
+ /// }
+ ///
+ 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 +5179,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:
« no previous file with comments | « pkg/compiler/lib/src/resolution/members.dart ('k') | pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698