From: Barney Gale Date: Tue, 9 Jan 2024 22:46:50 +0000 (+0000) Subject: GH-113528: Deoptimise `pathlib._abc.PurePathBase.parts` (#113883) X-Git-Tag: v3.13.0a3~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5c7bd0e39839b27bc524e1790fe4936d987f384a;p=thirdparty%2FPython%2Fcpython.git GH-113528: Deoptimise `pathlib._abc.PurePathBase.parts` (#113883) Implement `parts` using `_stack`, which itself calls `pathmod.split()` repeatedly. This avoids use of `_tail`, which will be moved to `PurePath` shortly. --- diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index 749c68d2999b..26e14b3f7b20 100644 --- a/Lib/pathlib/__init__.py +++ b/Lib/pathlib/__init__.py @@ -195,6 +195,15 @@ class PurePath(_abc.PurePathBase): return NotImplemented return self._parts_normcase >= other._parts_normcase + @property + def parts(self): + """An object providing sequence-like access to the + components in the filesystem path.""" + if self.drive or self.root: + return (self.drive + self.root,) + tuple(self._tail) + else: + return tuple(self._tail) + @property def parent(self): """The logical parent of the path.""" diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py index caa84fc40559..c16beca71aa7 100644 --- a/Lib/pathlib/_abc.py +++ b/Lib/pathlib/_abc.py @@ -381,10 +381,10 @@ class PurePathBase: def parts(self): """An object providing sequence-like access to the components in the filesystem path.""" - if self.drive or self.root: - return (self.drive + self.root,) + tuple(self._tail) - else: - return tuple(self._tail) + anchor, parts = self._stack + if anchor: + parts.append(anchor) + return tuple(reversed(parts)) def joinpath(self, *pathsegments): """Combine this path with one or several arguments, and return a