anchor.diff:  }
   
   /// Join path parts with the [Platform.pathSeparator].
  +///
  +/// If a part ends with a path separator, then no extra separator is
  +/// inserted.
   String pathJoin(String part1, String part2, [String part3]) {
     var separator = Platform.pathSeparator;
  +  String separator1 = part1.endsWith(separator) ? "" : separator;
     if (part3 == null) {
  -    return "$part1$separator$part2";
  -  }
  -  return "$part1$separator$part2$separator$part3";
  +    return "$part1$separator1$part2";
  +  }
  +  String separator2 = part2.endsWith(separator) ? "" : separator;
  +  return "$part1$separator1$part2$separator2$part3";
   }
   
   /// Join an unknown number of path parts with [Platform.pathSeparator].
  -String pathJoinAll(Iterable<String> parts) =>
  -    parts.join(Platform.pathSeparator);
  +///
  +/// If a part ends with a path separator, then no extra separator is
  +/// inserted.
  +String pathJoinAll(Iterable<String> parts) {
  +  var buffer = StringBuffer();
  +  String separator = "";
  +  for (var part in parts) {
  +    buffer..write(separator)..write(part);
  +    separator =
  +        part.endsWith(Platform.pathSeparator) ? "" : Platform.pathSeparator;
  +  }
  +  return buffer.toString();
  +}
   
   // Character constants used by this package.
   /// "Line feed" control character.
  
positive.code:   return path.substring(lastSeparator + separator.length);
  }
  
  /// The file name of a path.
  ///
  /// The file name is everything before the last occurrence of
  /// [Platform.pathSeparator].
  String dirName(String path) {
    var separator = Platform.pathSeparator;
    int lastSeparator = path.lastIndexOf(separator);
  
negative.code: /// The file name of a path.
  ///
  /// The file name is everything after the last occurrence of
  /// [Platform.pathSeparator], or the entire string if no
  /// path separator occurs in the string.
  String fileName(String path) {
    var separator = Platform.pathSeparator;
    int lastSeparator = path.lastIndexOf(separator);
  