Index: lib/src/compiler/code_generator.dart |
diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart |
index 2445a11e873482df0803669a459da25cb287c3ed..8a97a278c6114a34e3a048de9a9dd36cedc82799 100644 |
--- a/lib/src/compiler/code_generator.dart |
+++ b/lib/src/compiler/code_generator.dart |
@@ -801,14 +801,13 @@ class CodeGenerator extends GeneralizingAstVisitor |
JS.Statement _defineClassTypeArguments(TypeDefiningElement element, |
List<TypeParameterElement> formals, JS.Statement body) { |
assert(formals.isNotEmpty); |
- var genericDef = |
- js.statement('# = dart.generic((#) => { #; return #; });', [ |
- _emitTopLevelName(element, suffix: r'$'), |
- _emitTypeFormals(formals), |
- body, |
- element.name |
- ]); |
- |
+ var genericCall = js.call('dart.generic((#) => { #; return #; })', |
+ [_emitTypeFormals(formals), body, element.name]); |
+ if (element.type.isDartAsyncFuture) { |
+ genericCall = js.call('dart.flattenFutures(#)', [genericCall]); |
+ } |
+ var genericDef = js.statement( |
+ '# = #;', [_emitTopLevelName(element, suffix: r'$'), genericCall]); |
var dynType = fillDynamicTypeArgs(element.type); |
var genericInst = _emitType(dynType, lowerGeneric: true); |
return js.statement( |