anchor.diff:      return nodes?.map(_visitStatement)?.toList();
     }
   
  -  /// Visits [nodes] with [_visitExpression].
  -  List<JS.Expression> _visitExpressionList(Iterable<AstNode> nodes) {
  -    return nodes?.map(_visitExpression)?.toList();
  +  /// Visits [nodes] with [_visitColelctionElement].
  +  List<JS.Expression> _visitCollectionElementList(
  +      Iterable<CollectionElement> nodes) {
  +    var expressions = <JS.Expression>[];
  +    for (var node in nodes) {
  +      //TODO(nshahan) Handle [IfElement] and [ForElement].
  +      if (node is MapLiteralEntry) {
  +        expressions.add(_visitExpression(node.key));
  +        expressions.add(_visitExpression(node.value));
  +      } else {
  +        expressions.add(_visitExpression(node));
  +      }
  +    }
  +    return expressions;
     }
   
     /// Gets the start position of [node] for use in source mapping.
  
positive.code:   }
  
    @override
    JS.Expression visitSetLiteral(SetLiteral node) {
      var type = node.staticType as InterfaceType;
      if (!node.isConst) {
        var setType = _emitType(type);
        if (node.elements.isEmpty) {
          return js.call('#.new()', [setType]);
        }
        return js
            .call('#.from([#])', [setType, _visitExpressionList(node.elements)]);
      }
      return _cacheConst(() => runtimeCall('constSet(#, [#])', [
            _emitType((node.staticType as InterfaceType).typeArguments[0]),
            _visitExpressionList(node.elements)
          ]));
    }
  
  
negative.code:   visitSetLiteral2(SetLiteral2 node) => _unreachable(node);
  
    @override
    visitSetOrMapLiteral(SetOrMapLiteral node) => node.isSet
        ? _emitSetLiteral(node.elements2, node)
        : _emitMapLiteral(node.elements2, node);
  
    @override
    visitSpreadElement(SpreadElement node) => _unreachable(node);
  