anchor.diff:  
     _translateCatchClauses(List<ast.CatchClause> clauses, rk, ek, sk) {
       var savedExceptionName = currentExceptionName;
  +    var savedStackTraceName = currentStackTraceName;
       var catchName = newName('catch');
       var exceptionName, stackTraceName, catchBlock;
       if (clauses.isEmpty) {
         exceptionName = currentExceptionName = newName('e');
  -      stackTraceName = newName('s');
  +      stackTraceName = currentStackTraceName = newName('s');
         catchBlock = make.block([ek.apply(exceptionName, stackTraceName)]);
       } else {
         // The exception and stack trace parameters do not necessarily have the
  
positive.code:   List<JumpTarget> continueTargets;
  
    // Inside a catch block, `rethrow` throws the current exception.  The
    // translation maintains a current exception when inside a catch block.
    String currentExceptionName;
  
    visit(ast.AstNode node) => node.accept(this);
  
  
negative.code: 
    visitThrowExpression(ast.ThrowExpression node) => (ek, sk) {
      return visit(node.expression)(ek, (expr) {
        // `throw` is always translated as `throw` to ensure that a stack
        // trace is produced.  The translation ensures that all code is inside
        // an try/catch with an appropriate error handler.
        return sk(make.throwExpression(expr));
      });
    };
  