anchor.diff:      var sourceFile = entry as File;
       var destPath = p.join(buildDir, relative);
       var destFile = new File(destPath);
  -    if (!destFile.existsSync() ||
  +    if (version != COMPILER_VERSION ||
  +        !destFile.existsSync() ||
           entry.lastModifiedSync().isAfter(destFile.lastModifiedSync())) {
         _compile(sourceFile.path, sourceFile.readAsStringSync(), destPath);
         numCompiled++;
  
positive.code:   buildDir = p.join(p.normalize(arguments[0]), "pub_async");
    new Directory(buildDir).createSync(recursive: true);
  
    var silent = arguments.length == 2 && arguments[1] == "--silent";
    var numFiles = 0;
    var numCompiled = 0;
  
negative.code:   stderr.writeln("Usage: dart async_compile.dart <build dir> [--silent]");
    exit(64);
  }
  
  /// Deletes the file at [path], ignoring any IO errors that occur.
  ///
  /// This swallows errors to accommodate multiple compilers running concurrently.
  /// Since they will produce the same output anyway, a failure of one is fine.
  void _deleteFile(String path) {
    try {
      new File(path).deleteSync();
    } on IOException catch (ex) {
      // Do nothing.
    }
  }
  
  /// Writes [contents] to [path], ignoring any IO errors that occur.
  ///
  /// This swallows errors to accommodate multiple compilers running concurrently.
  /// Since they will produce the same output anyway, a failure of one is fine.
  void _writeFile(String path, String contents) {
    try {
      new File(path).writeAsStringSync(contents);
    } on IOException catch (ex) {
      // Do nothing.
    }
  }