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

Unified Diff: pkg/compiler/lib/src/resolution/semantic_visitor_mixins.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_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.
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor.dart ('k') | pkg/compiler/lib/src/resolution/send_structure.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698