class FakeFS::Pathname

def plus(path1, path2) # -> path

-> path
def plus(path1, path2) # -> path
  prefix2 = path2
  index_list2 = []
  basename_list2 = []
  while (r2 = chop_basename(prefix2))
    prefix2, basename2 = r2
    index_list2.unshift prefix2.length
    basename_list2.unshift basename2
  end
  return path2 if prefix2 != ''
  prefix1 = path1
  while (r1 = chop_basename(prefix1))
    while !basename_list2.empty? && basename_list2.first == '.'
      index_list2.shift
      basename_list2.shift
    end
    prefix1, basename1 = r1
    next if basename1 == '.'
    if basename1 == '..' ||
       basename_list2.empty? ||
       basename_list2.first != '..'
      prefix1 += basename1
      break
    end
    index_list2.shift
    basename_list2.shift
  end
  r1 = chop_basename(prefix1)
  if !r1 && /#{SEPARATOR_PAT}/o =~ File.basename(prefix1)
    while !basename_list2.empty? && basename_list2.first == '..'
      index_list2.shift
      basename_list2.shift
    end
  end
  if !basename_list2.empty?
    suffix2 = path2[index_list2.first..-1]
    r1 ? File.join(prefix1, suffix2) : prefix1 + suffix2
  else
    r1 ? prefix1 : File.dirname(prefix1)
  end
end