anchor.diff:  
     void out(String str) {
       if (str != "") {
  +      const identifierRegexp = const RegExp(r'^[a-zA-Z_0-9$]');
  +      if (pendingSemicolon && (!shouldCompressOutput || str != "}")) {
  +        outBuffer.add(";");
  +      }
  +      if (pendingSpace &&
  +          (!shouldCompressOutput || identifierRegexp.hasMatch(str))) {
  +        outBuffer.add(" ");
  +      }
  +      pendingSpace = false;
  +      pendingSemicolon = false;
         outBuffer.add(str);
         lastAddedString = str;
       }
  
positive.code:     out("(");
      visitNestedExpression(loop.condition, EXPRESSION,
                            newInForInit: false, newAtStatementBegin: false);
      outLn(");");
    }
  
    visitContinue(Continue node) {
      if (node.targetLabel == null) {
        outIndentLn("continue;");
      } else {
        outIndentLn("continue ${node.targetLabel};");
      }
    }
  
    visitBreak(Break node) {
      if (node.targetLabel == null) {
        outIndentLn("break;");
      } else {
        outIndentLn("break ${node.targetLabel};");
      }
    }
  
    visitReturn(Return node) {
      if (node.value == null) {
        outIndentLn("return;");
      } else {
        outIndent("return ");
        visitNestedExpression(node.value, EXPRESSION,
                              newInForInit: false, newAtStatementBegin: false);
        outLn(";");
      }
    }
  
    visitThrow(Throw node) {
      outIndent("throw ");
      visitNestedExpression(node.expression, EXPRESSION,
                            newInForInit: false, newAtStatementBegin: false);
      outLn(";");
    }
  
    visitTry(Try node) {
  
negative.code:     indent();
      visitNestedExpression(expressionStatement.expression, EXPRESSION,
                            newInForInit: false, newAtStatementBegin: true);
      pendingSemicolon = true;
    }
  
    visitEmptyStatement(EmptyStatement nop) {
  