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

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

Issue 1001863003: Update SemanticVisitor with visitIndex, visitSuperIndex (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update analyze_unused_dart2js_test. Created 5 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 953ee16934fee904a246b495578892bd475f1175..dfbb757cd226fab8df0ac283034043dcf6a8b6f3 100644
--- a/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
+++ b/pkg/compiler/lib/src/resolution/semantic_visitor_mixins.dart
@@ -20,7 +20,35 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
Send node,
NodeList arguments,
A arg) {
- bulkHandleError(node);
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorClassTypeLiteralCompound(
+ Send node,
+ TypeConstantExpression constant,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorClassTypeLiteralPostfix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorClassTypeLiteralPrefix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
}
@override
@@ -33,6 +61,34 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
+ R errorDynamicTypeLiteralCompound(
+ Send node,
+ TypeConstantExpression constant,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorDynamicTypeLiteralPostfix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorDynamicTypeLiteralPrefix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
R errorDynamicTypeLiteralSet(
SendSet node,
TypeConstantExpression constant,
@@ -283,6 +339,34 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
+ R errorTypeVariableTypeLiteralCompound(
+ Send node,
+ TypeVariableElement element,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypeVariableTypeLiteralPostfix(
+ Send node,
+ TypeVariableElement element,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypeVariableTypeLiteralPrefix(
+ Send node,
+ TypeVariableElement element,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
R errorTypeVariableTypeLiteralSet(
SendSet node,
TypeVariableElement element,
@@ -292,6 +376,34 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
+ R errorTypedefTypeLiteralCompound(
+ Send node,
+ TypeConstantExpression constant,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypedefTypeLiteralPostfix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
+ R errorTypedefTypeLiteralPrefix(
+ Send node,
+ TypeConstantExpression constant,
+ IncDecOperator operator,
+ A arg) {
+ return bulkHandleError(node);
+ }
+
+ @override
R errorTypedefTypeLiteralSet(
SendSet node,
TypeConstantExpression constant,
@@ -357,7 +469,7 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R errorUnresolvedSuperCompoundIndexSet(
- Send node,
+ SendSet node,
Element element,
Node index,
AssignmentOperator operator,
@@ -368,7 +480,7 @@ abstract class ErrorBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R errorUnresolvedSuperIndexSet(
- Send node,
+ SendSet node,
Element element,
Node index,
Node rhs,
@@ -428,15 +540,6 @@ abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralPrefix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePrefix(node);
- }
-
- @override
R visitDynamicPropertyPrefix(
Send node,
Node receiver,
@@ -448,15 +551,6 @@ abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralPrefix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePrefix(node);
- }
-
- @override
R visitLocalVariablePrefix(
Send node,
LocalVariableElement variable,
@@ -600,24 +694,6 @@ abstract class PrefixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
A arg) {
return bulkHandlePrefix(node);
}
-
- @override
- R visitTypeVariableTypeLiteralPrefix(
- Send node,
- TypeVariableElement element,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePrefix(node);
- }
-
- @override
- R visitTypedefTypeLiteralPrefix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePrefix(node);
- }
}
/// Mixin that implements all `visitXPostfix` methods of [SemanticSendVisitor]
@@ -633,15 +709,6 @@ abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralPostfix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePostfix(node);
- }
-
- @override
R visitDynamicPropertyPostfix(
Send node,
Node receiver,
@@ -653,15 +720,6 @@ abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralPostfix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePostfix(node);
- }
-
- @override
R visitLocalVariablePostfix(
Send node,
LocalVariableElement variable,
@@ -805,24 +863,6 @@ abstract class PostfixBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
A arg) {
return bulkHandlePostfix(node);
}
-
- @override
- R visitTypeVariableTypeLiteralPostfix(
- Send node,
- TypeVariableElement element,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePostfix(node);
- }
-
- @override
- R visitTypedefTypeLiteralPostfix(
- Send node,
- TypeConstantExpression constant,
- IncDecOperator operator,
- A arg) {
- return bulkHandlePostfix(node);
- }
}
/// Mixin that implements all `visitXCompound` methods of [SemanticSendVisitor]
@@ -838,16 +878,6 @@ abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralCompound(
- Send node,
- TypeConstantExpression constant,
- AssignmentOperator operator,
- Node rhs,
- A arg) {
- return bulkHandleCompound(node);
- }
-
- @override
R visitDynamicPropertyCompound(
Send node,
Node receiver,
@@ -860,16 +890,6 @@ abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralCompound(
- Send node,
- TypeConstantExpression constant,
- AssignmentOperator operator,
- Node rhs,
- A arg) {
- return bulkHandleCompound(node);
- }
-
- @override
R visitLocalVariableCompound(
Send node,
LocalVariableElement variable,
@@ -1017,26 +1037,6 @@ abstract class CompoundBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
A arg) {
return bulkHandleCompound(node);
}
-
- @override
- R visitTypeVariableTypeLiteralCompound(
- Send node,
- TypeVariableElement element,
- AssignmentOperator operator,
- Node rhs,
- A arg) {
- return bulkHandleCompound(node);
- }
-
- @override
- R visitTypedefTypeLiteralCompound(
- Send node,
- TypeConstantExpression constant,
- AssignmentOperator operator,
- Node rhs,
- A arg) {
- return bulkHandleCompound(node);
- }
}
/// Mixin that implements all `visitXInvoke` methods of [SemanticSendVisitor] by
@@ -1535,8 +1535,8 @@ abstract class SetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
}
-/// Mixin that implements all `visitXIndexSet` methods of [SemanticSendVisitor] by
-/// delegating to a bulk handler.
+/// Mixin that implements all `visitXIndexSet` methods of [SemanticSendVisitor]
+/// by delegating to a bulk handler.
///
/// Use this mixin to provide a trivial implementation for all `visitXIndexSet`
/// methods.
@@ -1549,7 +1549,7 @@ abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitCompoundIndexSet(
- Send node,
+ SendSet node,
Node receiver,
Node index,
AssignmentOperator operator,
@@ -1560,7 +1560,7 @@ abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitIndexSet(
- Send node,
+ SendSet node,
Node receiver,
Node index,
Node rhs,
@@ -1570,7 +1570,7 @@ abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitSuperCompoundIndexSet(
- Send node,
+ SendSet node,
FunctionElement getter,
FunctionElement setter,
Node index,
@@ -1582,7 +1582,7 @@ abstract class IndexSetBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitSuperIndexSet(
- Send node,
+ SendSet node,
FunctionElement function,
Node index,
Node rhs,
@@ -1632,6 +1632,15 @@ abstract class BinaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
+ R visitIndex(
+ Send node,
+ Node receiver,
+ Node index,
+ A arg) {
+ return bulkHandleBinary(node);
+ }
+
+ @override
R visitSuperBinary(
Send node,
FunctionElement function,
@@ -1658,6 +1667,15 @@ abstract class BinaryBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
A arg) {
return bulkHandleBinary(node);
}
+
+ @override
+ R visitSuperIndex(
+ Send node,
+ FunctionElement function,
+ Node index,
+ A arg) {
+ return bulkHandleBinary(node);
+ }
}
/// Mixin that implements all unary visitor methods in [SemanticSendVisitor] by
@@ -1782,7 +1800,7 @@ abstract class SuperBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitSuperCompoundIndexSet(
- Send node,
+ SendSet node,
FunctionElement getter,
FunctionElement setter,
Node index,
@@ -1989,7 +2007,7 @@ abstract class SuperBulkMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitSuperIndexSet(
- Send node,
+ SendSet node,
FunctionElement function,
Node index,
Node rhs,
@@ -2452,7 +2470,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralCompound(
+ R errorClassTypeLiteralCompound(
Send node,
TypeConstantExpression constant,
AssignmentOperator operator,
@@ -2482,7 +2500,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralPostfix(
+ R errorClassTypeLiteralPostfix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -2491,7 +2509,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitClassTypeLiteralPrefix(
+ R errorClassTypeLiteralPrefix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -2501,7 +2519,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitCompoundIndexSet(
- Send node,
+ SendSet node,
Node receiver,
Node index,
AssignmentOperator operator,
@@ -2604,7 +2622,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralCompound(
+ R errorDynamicTypeLiteralCompound(
Send node,
TypeConstantExpression constant,
AssignmentOperator operator,
@@ -2634,7 +2652,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralPostfix(
+ R errorDynamicTypeLiteralPostfix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -2643,7 +2661,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitDynamicTypeLiteralPrefix(
+ R errorDynamicTypeLiteralPrefix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -2675,10 +2693,21 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitIndexSet(
+ R visitIndex(
Send node,
Node receiver,
Node index,
+ A arg) {
+ apply(receiver, arg);
+ apply(index, arg);
+ return null;
+ }
+
+ @override
+ R visitIndexSet(
+ SendSet node,
+ Node receiver,
+ Node index,
Node rhs,
A arg) {
apply(receiver, arg);
@@ -3067,7 +3096,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R visitSuperCompoundIndexSet(
- Send node,
+ SendSet node,
FunctionElement getter,
FunctionElement setter,
Node index,
@@ -3282,20 +3311,30 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitSuperIndexSet(
+ R visitSuperIndex(
Send node,
FunctionElement function,
Node index,
- Node rhs,
A arg) {
apply(index, arg);
- apply(rhs, arg);
return null;
}
@override
- R visitSuperMethodGet(
- Send node,
+ R visitSuperIndexSet(
+ SendSet node,
+ FunctionElement function,
+ Node index,
+ Node rhs,
+ A arg) {
+ apply(index, arg);
+ apply(rhs, arg);
+ return null;
+ }
+
+ @override
+ R visitSuperMethodGet(
+ Send node,
MethodElement method,
A arg) {
return null;
@@ -3619,7 +3658,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypeVariableTypeLiteralCompound(
+ R errorTypeVariableTypeLiteralCompound(
Send node,
TypeVariableElement element,
AssignmentOperator operator,
@@ -3649,7 +3688,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypeVariableTypeLiteralPostfix(
+ R errorTypeVariableTypeLiteralPostfix(
Send node,
TypeVariableElement element,
IncDecOperator operator,
@@ -3658,7 +3697,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypeVariableTypeLiteralPrefix(
+ R errorTypeVariableTypeLiteralPrefix(
Send node,
TypeVariableElement element,
IncDecOperator operator,
@@ -3667,7 +3706,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypedefTypeLiteralCompound(
+ R errorTypedefTypeLiteralCompound(
Send node,
TypeConstantExpression constant,
AssignmentOperator operator,
@@ -3697,7 +3736,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypedefTypeLiteralPostfix(
+ R errorTypedefTypeLiteralPostfix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -3706,7 +3745,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
}
@override
- R visitTypedefTypeLiteralPrefix(
+ R errorTypedefTypeLiteralPrefix(
Send node,
TypeConstantExpression constant,
IncDecOperator operator,
@@ -3818,7 +3857,7 @@ class TraversalMixin<R, A> implements SemanticSendVisitor<R, A> {
@override
R errorUnresolvedSuperCompoundIndexSet(
- Send node,
+ SendSet node,
Element element,
Node index,
AssignmentOperator operator,
@@ -3901,4 +3940,1060 @@ class TraversalVisitor<R, A> extends SemanticVisitor<R, A>
}
return null;
}
-}
+}
+
+/// Mixin that groups all `visitStaticX` and `visitTopLevelX` method by
+/// delegating calls to `handleStaticX` methods.
+///
+/// This mixin is useful for the cases where both top level members and static
+/// class members are handled uniformly.
+abstract class GroupStaticMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R handleStaticFieldCompound(
+ Send node,
+ FieldElement field,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg);
+
+ R handleStaticFieldGet(
+ Send node,
+ FieldElement field,
+ A arg);
+
+ R handleStaticFieldInvoke(
+ Send node,
+ FieldElement field,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ R handleStaticFieldPostfixPrefix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleStaticFieldSet(
+ SendSet node,
+ FieldElement field,
+ Node rhs,
+ A arg);
+
+ R handleStaticFunctionGet(
+ Send node,
+ MethodElement function,
+ A arg);
+
+ R handleStaticFunctionInvoke(
+ Send node,
+ MethodElement function,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ R handleStaticGetterGet(
+ Send node,
+ FunctionElement getter,
+ A arg);
+
+ R handleStaticGetterInvoke(
+ Send node,
+ FunctionElement getter,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ R handleStaticGetterSetterCompound(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg);
+
+ R handleStaticGetterSetterPostfixPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleStaticMethodSetterCompound(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg);
+
+ R handleStaticMethodSetterPostfixPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleStaticSetterSet(
+ SendSet node,
+ FunctionElement setter,
+ Node rhs,
+ A arg);
+
+ @override
+ R visitStaticFieldCompound(
+ Send node,
+ FieldElement field,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticFieldCompound(node, field, operator, rhs, arg);
+ }
+
+ @override
+ R visitStaticFieldGet(
+ Send node,
+ FieldElement field,
+ A arg) {
+ return handleStaticFieldGet(node, field, arg);
+ }
+
+ @override
+ R visitStaticFieldInvoke(
+ Send node,
+ FieldElement field,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticFieldInvoke(node, field, arguments, selector, arg);
+ }
+
+ @override
+ R visitStaticFieldPostfix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticFieldPostfixPrefix(
+ node, field, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitStaticFieldPrefix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticFieldPostfixPrefix(
+ node, field, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitStaticFieldSet(
+ SendSet node,
+ FieldElement field,
+ Node rhs,
+ A arg) {
+ return handleStaticFieldSet(node, field, rhs, arg);
+ }
+
+ @override
+ R visitStaticFunctionGet(
+ Send node,
+ MethodElement function,
+ A arg) {
+ return handleStaticFunctionGet(node, function, arg);
+ }
+
+ @override
+ R visitStaticFunctionInvoke(
+ Send node,
+ MethodElement function,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticFunctionInvoke(node, function, arguments, selector, arg);
+ }
+
+ @override
+ R visitStaticGetterGet(
+ Send node,
+ FunctionElement getter,
+ A arg) {
+ return handleStaticGetterGet(node, getter, arg);
+ }
+
+ @override
+ R visitStaticGetterInvoke(
+ Send node,
+ FunctionElement getter,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticGetterInvoke(node, getter, arguments, selector, arg);
+ }
+
+ @override
+ R visitStaticGetterSetterCompound(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticGetterSetterCompound(
+ node, getter, setter, operator, rhs, arg);
+ }
+
+ @override
+ R visitStaticGetterSetterPostfix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitStaticGetterSetterPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitStaticMethodSetterCompound(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticMethodSetterCompound(
+ node, method, setter, operator, rhs, arg);
+ }
+
+ @override
+ R visitStaticMethodSetterPostfix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticMethodSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitStaticMethodSetterPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticMethodSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitStaticSetterSet(
+ SendSet node,
+ FunctionElement setter,
+ Node rhs,
+ A arg) {
+ return handleStaticSetterSet(node, setter, rhs, arg);
+ }
+
+ @override
+ R visitTopLevelFieldCompound(
+ Send node,
+ FieldElement field,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticFieldCompound(node, field, operator, rhs, arg);
+ }
+
+ @override
+ R visitTopLevelFieldGet(
+ Send node,
+ FieldElement field,
+ A arg) {
+ return handleStaticFieldGet(node, field, arg);
+ }
+
+ @override
+ R visitTopLevelFieldInvoke(
+ Send node,
+ FieldElement field,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticFieldInvoke(node, field, arguments, selector, arg);
+ }
+
+ @override
+ R visitTopLevelFieldPostfix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticFieldPostfixPrefix(
+ node, field, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitTopLevelFieldPrefix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticFieldPostfixPrefix(
+ node, field, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitTopLevelFieldSet(
+ SendSet node,
+ FieldElement field,
+ Node rhs,
+ A arg) {
+ return handleStaticFieldSet(node, field, rhs, arg);
+ }
+
+ @override
+ R visitTopLevelFunctionGet(
+ Send node,
+ MethodElement function,
+ A arg) {
+ return handleStaticFunctionGet(node, function, arg);
+ }
+
+ @override
+ R visitTopLevelFunctionInvoke(
+ Send node,
+ MethodElement function,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticFunctionInvoke(node, function, arguments, selector, arg);
+ }
+
+ @override
+ R visitTopLevelGetterGet(
+ Send node,
+ FunctionElement getter,
+ A arg) {
+ return handleStaticGetterGet(node, getter, arg);
+ }
+
+ @override
+ R visitTopLevelGetterInvoke(
+ Send node,
+ FunctionElement getter,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleStaticGetterInvoke(node, getter, arguments, selector, arg);
+ }
+
+ @override
+ R visitTopLevelGetterSetterCompound(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticGetterSetterCompound(
+ node, getter, setter, operator, rhs, arg);
+ }
+
+ @override
+ R visitTopLevelGetterSetterPostfix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitTopLevelGetterSetterPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitTopLevelMethodSetterCompound(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleStaticMethodSetterCompound(
+ node, method, setter, operator, rhs, arg);
+ }
+
+ @override
+ R visitTopLevelMethodSetterPostfix(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticMethodSetterPostfixPrefix(
+ node, method, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitTopLevelMethodSetterPrefix(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleStaticMethodSetterPostfixPrefix(
+ node, method, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitTopLevelSetterSet(
+ SendSet node,
+ FunctionElement setter,
+ Node rhs,
+ A arg) {
+ return handleStaticSetterSet(node, setter, rhs, arg);
+ }
+}
+
+/// Mixin that groups all `visitLocalX` and `visitParameterX` method by
+/// delegating calls to `handleLocalX` methods.
+///
+/// This mixin is useful for the cases where both parameters, local variables,
+/// and local functions, captured or not, are handled uniformly.
+abstract class GroupLocalMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R handleLocalCompound(
+ Send node,
+ LocalElement element,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg);
+
+ R handleLocalGet(
+ Send node,
+ LocalElement element,
+ A arg);
+
+ R handleLocalInvoke(
+ Send node,
+ LocalElement element,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ R handleLocalPostfixPrefix(
+ Send node,
+ LocalElement element,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleLocalSet(
+ SendSet node,
+ LocalElement element,
+ Node rhs,
+ A arg);
+
+ @override
+ R visitLocalFunctionGet(
+ Send node,
+ LocalFunctionElement function,
+ A arg) {
+ return handleLocalGet(node, function, arg);
+ }
+
+ @override
+ R visitLocalFunctionInvoke(
+ Send node,
+ LocalFunctionElement function,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleLocalInvoke(node, function, arguments, selector, arg);
+ }
+
+ @override
+ R visitLocalVariableCompound(
+ Send node,
+ LocalVariableElement variable,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleLocalCompound(node, variable, operator, rhs, arg);
+ }
+
+ @override
+ R visitLocalVariableGet(
+ Send node,
+ LocalVariableElement variable,
+ A arg) {
+ return handleLocalGet(node, variable, arg);
+ }
+
+ @override
+ R visitLocalVariableInvoke(
+ Send node,
+ LocalVariableElement variable,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleLocalInvoke(node, variable, arguments, selector, arg);
+ }
+
+ @override
+ R visitLocalVariablePostfix(
+ Send node,
+ LocalVariableElement variable,
+ IncDecOperator operator,
+ A arg) {
+ return handleLocalPostfixPrefix(
+ node, variable, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitLocalVariablePrefix(
+ Send node,
+ LocalVariableElement variable,
+ IncDecOperator operator,
+ A arg) {
+ return handleLocalPostfixPrefix(
+ node, variable, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitLocalVariableSet(
+ SendSet node,
+ LocalVariableElement variable,
+ Node rhs,
+ A arg) {
+ return handleLocalSet(node, variable, rhs, arg);
+ }
+
+ @override
+ R visitParameterCompound(
+ Send node,
+ ParameterElement parameter,
+ AssignmentOperator operator,
+ Node rhs,
+ A arg) {
+ return handleLocalCompound(node, parameter, operator, rhs, arg);
+ }
+
+ @override
+ R visitParameterGet(
+ Send node,
+ ParameterElement parameter,
+ A arg) {
+ return handleLocalGet(node, parameter, arg);
+ }
+
+ @override
+ R visitParameterInvoke(
+ Send node,
+ ParameterElement parameter,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleLocalInvoke(node, parameter, arguments, selector, arg);
+ }
+
+ @override
+ R visitParameterPostfix(
+ Send node,
+ ParameterElement parameter,
+ IncDecOperator operator,
+ A arg) {
+ return handleLocalPostfixPrefix(
+ node, parameter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitParameterPrefix(
+ Send node,
+ ParameterElement parameter,
+ IncDecOperator operator,
+ A arg) {
+ return handleLocalPostfixPrefix(
+ node, parameter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitParameterSet(
+ SendSet node,
+ ParameterElement parameter,
+ Node rhs,
+ A arg) {
+ return handleLocalSet(node, parameter, rhs, arg);
+ }
+}
+
+/// Mixin that groups all `visitConstantX` and `visitXTypeLiteralY` methods for
+/// constant type literals by delegating calls to `handleConstantX` methods.
+///
+/// This mixin is useful for the cases where expressions on constants are
+/// handled uniformly.
+abstract class GroupConstantMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R handleConstantGet(
+ Send node,
+ ConstantExpression constant,
+ A arg);
+
+ R handleConstantInvoke(
+ Send node,
+ ConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ @override
+ R visitClassTypeLiteralGet(
+ Send node,
+ TypeConstantExpression constant,
+ A arg) {
+ return handleConstantGet(node, constant, arg);
+ }
+
+ @override
+ R visitClassTypeLiteralInvoke(
+ Send node,
+ TypeConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleConstantInvoke(node, constant, arguments, selector, arg);
+ }
+
+ @override
+ R visitConstantGet(
+ Send node,
+ ConstantExpression constant,
+ A arg) {
+ return handleConstantGet(node, constant, arg);
+ }
+
+ @override
+ R visitConstantInvoke(
+ Send node,
+ ConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleConstantInvoke(node, constant, arguments, selector, arg);
+ }
+
+ @override
+ R visitDynamicTypeLiteralGet(
+ Send node,
+ TypeConstantExpression constant,
+ A arg) {
+ return handleConstantGet(node, constant, arg);
+ }
+
+ @override
+ R visitDynamicTypeLiteralInvoke(
+ Send node,
+ TypeConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleConstantInvoke(node, constant, arguments, selector, arg);
+ }
+
+ @override
+ R visitTypedefTypeLiteralGet(
+ Send node,
+ TypeConstantExpression constant,
+ A arg) {
+ return handleConstantGet(node, constant, arg);
+ }
+
+ @override
+ R visitTypedefTypeLiteralInvoke(
+ Send node,
+ TypeConstantExpression constant,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleConstantInvoke(node, constant, arguments, selector, arg);
+ }
+}
+
+/// Mixin that groups all `visitDynamicPropertyX` and `visitThisPropertyY`
+/// methods for by delegating calls to `handleDynamicX` methods, providing
+/// `null` as the receiver for the this properties.
+///
+/// This mixin is useful for the cases where dynamic and this properties are
+/// handled uniformly.
+abstract class GroupDynamicMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R handleDynamicCompound(
+ Send node,
+ Node receiver,
+ AssignmentOperator operator,
+ Node rhs,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg);
+
+ R handleDynamicGet(
+ Send node,
+ Node receiver,
+ Selector selector,
+ A arg);
+
+ R handleDynamicInvoke(
+ Send node,
+ Node receiver,
+ NodeList arguments,
+ Selector selector,
+ A arg);
+
+ R handleDynamicPostfixPrefix(
+ Send node,
+ Node receiver,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg,
+ {bool isPrefix});
+
+ R handleDynamicSet(
+ SendSet node,
+ Node receiver,
+ Selector selector,
+ Node rhs,
+ A arg);
+
+ @override
+ R visitDynamicPropertyCompound(
+ Send node,
+ Node receiver,
+ AssignmentOperator operator,
+ Node rhs,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicCompound(
+ node, receiver, operator, rhs, getterSelector, setterSelector, arg);
+ }
+
+ @override
+ R visitDynamicPropertyGet(
+ Send node,
+ Node receiver,
+ Selector selector,
+ A arg) {
+ return handleDynamicGet(node, receiver, selector, arg);
+ }
+
+ @override
+ R visitDynamicPropertyInvoke(
+ Send node,
+ Node receiver,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleDynamicInvoke(node, receiver, arguments, selector, arg);
+ }
+
+ @override
+ R visitDynamicPropertyPostfix(
+ Send node,
+ Node receiver,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicPostfixPrefix(
+ node, receiver, operator,
+ getterSelector, setterSelector, arg, isPrefix: false);
+ }
+
+ @override
+ R visitDynamicPropertyPrefix(
+ Send node,
+ Node receiver,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicPostfixPrefix(
+ node, receiver, operator,
+ getterSelector, setterSelector, arg, isPrefix: true);
+ }
+
+ @override
+ R visitDynamicPropertySet(
+ SendSet node,
+ Node receiver,
+ Selector selector,
+ Node rhs,
+ A arg) {
+ return handleDynamicSet(node, receiver, selector, rhs, arg);
+ }
+
+ @override
+ R visitThisPropertyCompound(
+ Send node,
+ AssignmentOperator operator,
+ Node rhs,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicCompound(
+ node, null, operator, rhs, getterSelector, setterSelector, arg);
+ }
+
+ @override
+ R visitThisPropertyGet(
+ Send node,
+ Selector selector,
+ A arg) {
+ return handleDynamicGet(node, null, selector, arg);
+ }
+
+ @override
+ R visitThisPropertyInvoke(
+ Send node,
+ NodeList arguments,
+ Selector selector,
+ A arg) {
+ return handleDynamicInvoke(node, null, arguments, selector, arg);
+ }
+
+ @override
+ R visitThisPropertyPostfix(
+ Send node,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicPostfixPrefix(
+ node, null, operator,
+ getterSelector, setterSelector, arg, isPrefix: false);
+ }
+
+ @override
+ R visitThisPropertyPrefix(
+ Send node,
+ IncDecOperator operator,
+ Selector getterSelector,
+ Selector setterSelector,
+ A arg) {
+ return handleDynamicPostfixPrefix(
+ node, null, operator,
+ getterSelector, setterSelector, arg, isPrefix: true);
+ }
+
+ @override
+ R visitThisPropertySet(
+ SendSet node,
+ Selector selector,
+ Node rhs,
+ A arg) {
+ return handleDynamicSet(node, null, selector, rhs, arg);
+ }
+}
+
+/// Mixin that groups all `visitSuperXPrefix`, `visitSuperXPostfix` methods for
+/// by delegating calls to `handleSuperXPostfixPrefix` methods.
+///
+/// This mixin is useful for the cases where super prefix/postfix expression are
+/// handled uniformly.
+abstract class GroupSuperMixin<R, A> implements SemanticSendVisitor<R, A> {
+ R handleSuperFieldFieldPostfixPrefix(
+ Send node,
+ FieldElement readField,
+ FieldElement writtenField,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleSuperFieldSetterPostfixPrefix(
+ Send node,
+ FieldElement field,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleSuperGetterFieldPostfixPrefix(
+ Send node,
+ FunctionElement getter,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleSuperGetterSetterPostfixPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ R handleSuperMethodSetterPostfixPrefix(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg,
+ {bool isPrefix});
+
+ @override
+ R visitSuperFieldFieldPostfix(
+ Send node,
+ FieldElement readField,
+ FieldElement writtenField,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldFieldPostfixPrefix(
+ node, readField, writtenField, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperFieldFieldPrefix(
+ Send node,
+ FieldElement readField,
+ FieldElement writtenField,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldFieldPostfixPrefix(
+ node, readField, writtenField, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitSuperFieldPostfix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldFieldPostfixPrefix(
+ node, field, field, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperFieldPrefix(
+ Send node,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldFieldPostfixPrefix(
+ node, field, field, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitSuperFieldSetterPostfix(
+ Send node,
+ FieldElement field,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldSetterPostfixPrefix(
+ node, field, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperFieldSetterPrefix(
+ Send node,
+ FieldElement field,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperFieldSetterPostfixPrefix(
+ node, field, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitSuperGetterFieldPostfix(
+ Send node,
+ FunctionElement getter,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperGetterFieldPostfixPrefix(
+ node, getter, field, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperGetterFieldPrefix(
+ Send node,
+ FunctionElement getter,
+ FieldElement field,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperGetterFieldPostfixPrefix(
+ node, getter, field, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitSuperGetterSetterPostfix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperGetterSetterPrefix(
+ Send node,
+ FunctionElement getter,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperGetterSetterPostfixPrefix(
+ node, getter, setter, operator, arg, isPrefix: true);
+ }
+
+ @override
+ R visitSuperMethodSetterPostfix(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperMethodSetterPostfixPrefix(
+ node, method, setter, operator, arg, isPrefix: false);
+ }
+
+ @override
+ R visitSuperMethodSetterPrefix(
+ Send node,
+ FunctionElement method,
+ FunctionElement setter,
+ IncDecOperator operator,
+ A arg) {
+ return handleSuperMethodSetterPostfixPrefix(
+ node, method, setter, operator, arg, isPrefix: true);
+ }
+}
« no previous file with comments | « pkg/compiler/lib/src/resolution/semantic_visitor.dart ('k') | pkg/compiler/lib/src/resolution/send_resolver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698