| 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..d990f27e9f64adc4e6d1fd6f83914222094e6c37 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.any((t) => !t.isDynamic);
|
| + 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]);
|
| }
|
|
|