anchor.diff:    ///   }
     /// }
     ///
  -  @override
  -  js.Expression visitFun(js.Fun node) {
  +  js.Expression rewriteFunction(js.Fun node) {
       beginLabel(newLabel("Function start"));
       // AsyncStar needs a returnlabel for its handling of cancelation. See
       // [visitDartYield].
  
positive.code: 
    /// An await is translated to an [awaitStatement].
    ///
    /// See the comments of [visitFun] for an example.
    @override
    js.Expression visitAwait(js.Await node) {
      assert(isAsync || isAsyncStar);
  
negative.code:         new js.VariableDeclarationList(variables);
  
      return finishFunction(node.params, rewrittenBody, variableDeclarations);
    }
  
    @override
    js.Expression visitFun(js.Fun node) {
      if (node.asyncModifier.isAsync || node.asyncModifier.isYielding) {
        // The translation does not handle nested functions that are generators
        // or asynchronous.  These functions should only be ones that are
        // introduced by JS foreign code from our own libraries.
        reporter.internalError(spannable,
            'Nested function is a generator or asynchronous.');
      }
      return node;
    }
  
    @override
  