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

Unified Diff: pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart

Issue 3009633002: Add tests for list and async marker (Closed)
Patch Set: Created 3 years, 4 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/inferrer/kernel_inferrer_engine.dart
diff --git a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
index fcda3b859437b9c00c42d1d0c6d114b11a1f80d6..c52474474899daf0acf9d4ad2298903e6fd35ec8 100644
--- a/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
+++ b/pkg/compiler/lib/src/inferrer/kernel_inferrer_engine.dart
@@ -125,11 +125,6 @@ class KernelInferrerEngine extends InferrerEngineImpl<ir.Node> {
}
@override
- void forEachParameter(FunctionEntity method, void f(Local parameter)) {
- throw new UnimplementedError('KernelInferrerEngine.forEachParameter');
- }
-
- @override
ir.Node computeMemberBody(MemberEntity member) {
MemberDefinition definition = _elementMap.getMemberDefinition(member);
switch (definition.kind) {
@@ -205,7 +200,50 @@ class KernelTypeSystemStrategy implements TypeSystemStrategy<ir.Node> {
@override
void forEachParameter(FunctionEntity function, void f(Local parameter)) {
- throw new UnimplementedError('KernelTypeSystemStrategy.forEachParameter');
+ KernelToLocalsMap localsMap = _globalLocalsMap.getLocalsMap(function);
+
+ void processFunctionNode(ir.FunctionNode node) {
+ for (ir.VariableDeclaration variable in node.positionalParameters) {
+ f(localsMap.getLocalVariable(variable));
+ }
+ for (ir.VariableDeclaration variable in node.namedParameters) {
+ f(localsMap.getLocalVariable(variable));
+ }
+ }
+
+ MemberDefinition definition = _elementMap.getMemberDefinition(function);
+ switch (definition.kind) {
+ case MemberKind.regular:
+ ir.Node node = definition.node;
+ if (node is ir.Procedure) {
+ processFunctionNode(node.function);
+ return;
+ }
+ break;
+ case MemberKind.constructor:
+ case MemberKind.constructorBody:
+ ir.Node node = definition.node;
+ if (node is ir.Procedure) {
+ processFunctionNode(node.function);
+ return;
+ } else if (node is ir.Constructor) {
+ processFunctionNode(node.function);
+ return;
+ }
+ break;
+ case MemberKind.closureCall:
+ ir.Node node = definition.node;
+ if (node is ir.FunctionDeclaration) {
+ processFunctionNode(node.function);
+ return;
+ } else if (node is ir.FunctionExpression) {
+ processFunctionNode(node.function);
+ return;
+ }
+ break;
+ default:
+ }
+ failedAt(function, "Unexpected function definition $definition.");
}
@override
« no previous file with comments | « pkg/compiler/lib/src/inferrer/inferrer_engine.dart ('k') | pkg/compiler/lib/src/kernel/element_map_mixins.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698