public function resolve($path)
	{
		if ($path instanceof Path) {
			$add = clone $path;
		} else if (is_string($path)) {
			$add = new Path($path);
		} else {
			throw new \InvalidArgumentException();
		}
		
		$base = clone $this;
		
		if ($base->partCount === 0) {
			return $add;
		}
		if ($add->isAbsolute()) {
			return $add;
		}
		if ($base->lastPart === '') {
			array_pop($base->parts);
		}
		if ($add->firstPart === '') {
			array_shift($add->parts);
		}
		foreach ($add->parts as $part) {
			$base->parts[] = $part;
		}
		if ($add->partCount === 0) {
			$base->parts[] = '';
		}
		$base->setParts($base->parts);
		return $base;
	}