anchor.diff:  
       // Convert `function(...) { ... }` to `(...) => ...`
       // This is for readability, but it also ensures correct `this` binding.
  -    var fn = new JS.ArrowFun(f.params, body,
  -        typeParams: f.typeParams, returnType: f.returnType);
  -
  -    return annotate(_makeGenericArrowFun(fn), node);
  -  }
  -
  -  JS.ArrowFun _makeGenericArrowFun(JS.ArrowFun fn) {
  -    if (fn.typeParams == null || fn.typeParams.isEmpty) return fn;
  -    return new JS.ArrowFun(fn.typeParams, fn);
  -  }
  -
  -  JS.Fun _makeGenericFunction(JS.Fun fn) {
  -    if (fn.typeParams == null || fn.typeParams.isEmpty) return fn;
  -
  -    // TODO(jmesserly): we could make these default to `dynamic`.
  -    return new JS.Fun(
  -        fn.typeParams,
  -        new JS.Block([
  -          // Convert the function to an => function, to ensure `this` binding.
  -          new JS.Return(new JS.ArrowFun(fn.params, fn.body,
  -              typeParams: fn.typeParams, returnType: fn.returnType))
  -        ]));
  +    return new JS.ArrowFun(f.params, body,
  +        typeParams: f.typeParams, returnType: f.returnType)
  +      ..sourceInformation = f.sourceInformation;
     }
   
     /// Emits a non-arrow FunctionExpression node.
  
positive.code:         code
        ]);
      }
      return new JS.Fun(formals, code,
          typeParams: typeFormals, returnType: returnType);
    }
  
    JS.Expression _emitGeneratorFunctionBody(ExecutableElement element,
  
negative.code:   }
  
    JS.ArrowFun _emitArrowFunction(FunctionExpression node) {
      JS.Fun fn = _emitFunctionBody(node.element, node.parameters, node.body);
  
      return annotate(_toArrowFunction(fn), node);
    }
  
    JS.Fun _makeGenericFunction(JS.Fun fn) {
      if (fn.typeParams == null || fn.typeParams.isEmpty) return fn;
  
      return new JS.Fun(
          fn.typeParams,
          new JS.Block([
            // Convert the function to an => function, to ensure `this` binding.
            new JS.Return(_toArrowFunction(fn))
          ]));
    }
  
    JS.ArrowFun _toArrowFunction(JS.Fun f) {
      JS.Node body = f.body;
  
      // Simplify `=> { return e; }` to `=> e`
  