summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage/dep.py11
1 files changed, 11 insertions, 0 deletions
diff --git a/pym/portage/dep.py b/pym/portage/dep.py
index 03f428495..a1908276b 100644
--- a/pym/portage/dep.py
+++ b/pym/portage/dep.py
@@ -392,6 +392,15 @@ class _use_dep(object):
tokens.extend(self.conditional_disabled.difference(use))
return _use_dep(tokens)
+class _AtomCache(type):
+ atoms = {}
+ def __call__(cls, s):
+ instance = cls.atoms.get(s)
+ if instance is None:
+ instance = super(_AtomCache, cls).__call__(s)
+ cls.atoms[s] = instance
+ return instance
+
class Atom(object):
"""
@@ -399,6 +408,8 @@ class Atom(object):
class emulates most of the str methods that are useful with atoms.
"""
+ __metaclass__ = _AtomCache
+
_str_methods = ("endswith", "find", "index", "lstrip", "replace",
"startswith", "strip", "rindex", "rfind", "rstrip", "__getitem__",
"__len__", "__repr__", "__str__")