anchor.diff:          AstFactory.typeName3(
               AstFactory.identifier5('Future', 'sync'), []),
           [functionExpression([], tryBlock)]);
  -    if (catchBlock != null) {
  -      expr = AstFactory.methodInvocation(expr, 'catchError',
  -          [functionExpression([exnName], catchBlock)]);
  +    for (var args in catchErrorArgs) {
  +      expr = AstFactory.methodInvocation(expr, 'catchError', args);
       }
       if (finallyBlock != null) {
         var name = newName('e');
  
positive.code:     });
    };
  
    visitCatchClause(ast.CatchClause node) => (f, r, s) {
      // TODO(kmillikin): handle 'on T catch' clauses.
      return visit(node.body)(f, r, s);
    };
  
    visitTryStatement(ast.TryStatement node) => (f, r, s) {
      ast.Expression newJumpTarget(ast.Expression target) {
  
negative.code:             AstFactory.functionExpressionInvocation(
                  identifier(finallyContName), [])));
        });
  
        breakTargets = breakTargets.map(newJumpTarget).toList();
        continueTargets = continueTargets.map(newJumpTarget).toList();
        var fail = f, ret = r;
        f = (e) {
          addStatement(
              AstFactory.returnStatement2(
                  functionExpression([], applyExpressionCont(fail, e))));
        };
        r = (v) {
          addStatement(
              AstFactory.returnStatement2(
                  functionExpression([], applyExpressionCont(ret, v))));
        };
        s = () {
          addStatement(
              AstFactory.returnStatement2(identifier(joinName)));
        };
      } else {
        s = () {
          addStatement(
              AstFactory.returnStatement2(
                  AstFactory.functionExpressionInvocation(
                      identifier(joinName), [])));
        };
      }
  
      var catchErrorArgs = node.catchClauses.map(
          (c) => _translateCatchClause(c, f, r, s));
  
      var tryBlock = currentBlock = emptyBlock();
      visit(node.body)((e) {
        addStatement(AstFactory.throwExpression2(e));
      }, r, s);
  
      currentBlock = savedBlock;
      breakTargets = savedBreakTargets;
  