anchor.diff:      visit(node.body)((v) {
         addStatement(make.assignmentExpression(
             make.identifier(inLoopName), make.booleanLiteral(false)));
  -      addStatement(make.returnStatement(
  -          make.methodInvocation(make.identifier(completerName),
  -              'complete', [r(v)])));
  +      return make.methodInvocation(make.identifier(
  +          completerName), 'complete', [r(v)]);
       }, () {
         addStatement(make.functionInvocation(continueName));
         addStatement(make.returnStatement());
  
positive.code:       visit(node.body)((v) {
          addStatement(make.assignmentExpression(
            make.identifier(inLoopName), make.booleanLiteral(false)));
          addStatement(make.returnStatement(
              make.methodInvocation(make.identifier(completerName),
                  'complete', [r(v)])));
        }, () {
          addStatement(make.functionInvocation(continueName));
          addStatement(make.returnStatement());
  
negative.code:     return make.functionExpression([name], bodyBlock);
    }
  
    // For finally blocks, the return continuation is wrapped in a thunk.
    ast.FunctionExpression abstractReturnCont(r, expr) {
      var v = addTempDeclaration(expr);
      var savedBlock = currentBlock;
      var bodyBlock = currentBlock = make.emptyBlock();
      addStatement(make.returnStatement(r(v)));
      currentBlock = savedBlock;
      return make.functionExpression([], bodyBlock);
    }
  
    // ---- CompilationUnit ----
  