Chromium Code Reviews| Index: lib/src/compiler/code_generator.dart |
| diff --git a/lib/src/compiler/code_generator.dart b/lib/src/compiler/code_generator.dart |
| index 15a99c1d0764379f27df974bd20364546d2e1e5b..5c384bc04c3feacfb4f1ab891276a2f4d69f78e3 100644 |
| --- a/lib/src/compiler/code_generator.dart |
| +++ b/lib/src/compiler/code_generator.dart |
| @@ -4944,8 +4944,10 @@ class CodeGenerator extends GeneralizingAstVisitor |
| JS.Expression emitMap() { |
| var entries = node.entries; |
| var mapArguments = null; |
| - var typeArgs = node.typeArguments; |
| - if (entries.isEmpty && typeArgs == null) { |
| + var type = node.staticType as InterfaceType; |
| + var typeArgs = type.typeArguments; |
| + var reifyTypeArgs = typeArgs != null && typeArgs.any((t) => !t.isDynamic); |
|
Jennifer Messerly
2016/08/05 13:48:32
typeArguments should never be null on an Interface
vsm
2016/08/05 14:15:03
Removed - thanks!
|
| + if (entries.isEmpty && !reifyTypeArgs) { |
| mapArguments = []; |
| } else if (entries.every((e) => e.key is StringLiteral)) { |
| // Use JS object literal notation if possible, otherwise use an array. |
| @@ -4965,8 +4967,8 @@ class CodeGenerator extends GeneralizingAstVisitor |
| mapArguments = new JS.ArrayInitializer(values); |
| } |
| var types = <JS.Expression>[]; |
| - if (typeArgs != null) { |
| - types.addAll(typeArgs.arguments.map((e) => _emitType(e.type))); |
| + if (reifyTypeArgs) { |
| + types.addAll(typeArgs.map((e) => _emitType(e))); |
| } |
| return js.call('dart.map(#, #)', [mapArguments, types]); |
| } |