anchor.diff:          runtimeModule,
           _emitVariableRef(caughtError)
         ]),
  +      if (stackTraceParameter != null)
  +        js.statement('let # = #.stackTrace(#)', [
  +          _emitVariableDef(stackTraceParameter),
  +          runtimeModule,
  +          _emitVariableRef(caughtError)
  +        ]),
  +      catchBody,
       ];
  -    if (stackTraceParameter != null) {
  -      catchStatements.add(js.statement('let # = #.stackTrace(#)', [
  -        _emitVariableDef(stackTraceParameter),
  -        runtimeModule,
  -        _emitVariableRef(caughtError)
  -      ]));
  -    }
  -    catchStatements.add(catchBody);
       _rethrowParameter = savedRethrow;
       return JS.Catch(_emitVariableDef(caughtError), JS.Block(catchStatements));
     }
  
positive.code: 
    @override
    JS.Expression visitMapConstant(MapConstant node) {
      var entries = <JS.Expression>[];
      for (var e in node.entries) {
        entries.add(visitConstant(e.key));
        entries.add(visitConstant(e.value));
      }
  
      return _emitConstMap(node.keyType, node.valueType, entries);
    }
  
  
negative.code:   @override
    JS.Expression visitBlockExpression(BlockExpression node) {
      var jsExpr = _visitExpression(node.value);
      var jsStmts = [
        for (var s in node.body.statements) _visitStatement(s),
        JS.Return(jsExpr),
      ];
      var jsBlock = JS.Block(jsStmts);
      // BlockExpressions with async operations must be constructed
      // with a generator instead of a lambda.
  