Gentoo Archives: gentoo-commits

From: "Zac Medico (zmedico)" <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] portage r12730 - main/trunk/pym/portage
Date: Sat, 28 Feb 2009 01:06:33
Message-Id: E1LdDex-00066T-OO@stork.gentoo.org
1 Author: zmedico
2 Date: 2009-02-28 01:06:30 +0000 (Sat, 28 Feb 2009)
3 New Revision: 12730
4
5 Modified:
6 main/trunk/pym/portage/dep.py
7 Log:
8 Make Atom instances consume less memory by implementing str methods at the
9 class level instead of referencing bound str methods.
10
11
12 Modified: main/trunk/pym/portage/dep.py
13 ===================================================================
14 --- main/trunk/pym/portage/dep.py 2009-02-27 05:23:37 UTC (rev 12729)
15 +++ main/trunk/pym/portage/dep.py 2009-02-28 01:06:30 UTC (rev 12730)
16 @@ -506,14 +506,8 @@
17 __metaclass__ = _AtomCache
18 _atoms = weakref.WeakValueDictionary()
19
20 - _str_methods = ("endswith", "find", "index", "lstrip", "replace",
21 - "startswith", "split", "strip",
22 - "rindex", "rfind", "rstrip", "__getitem__",
23 - "__eq__", "__hash__", "__len__", "__lt__",
24 - "__ne__", "__repr__", "__str__")
25 -
26 __slots__ = ("__weakref__", "blocker", "cp", "cpv", "operator",
27 - "slot", "use") + _str_methods
28 + "slot", "use", "_str")
29
30 class _blocker(object):
31 __slots__ = ("overlap",)
32 @@ -531,8 +525,7 @@
33 if not isvalidatom(s, allow_blockers=True):
34 raise InvalidAtom(s)
35 obj_setattr = object.__setattr__
36 - for x in self._str_methods:
37 - obj_setattr(self, x, getattr(s, x))
38 + obj_setattr(self, '_str', s)
39
40 blocker = "!" == s[:1]
41 if blocker:
42 @@ -561,6 +554,65 @@
43 raise AttributeError("Atom instances are immutable",
44 self.__class__, name, value)
45
46 + # Implement some common str methods.
47 +
48 + def __eq__(self, other):
49 + return self._str == other
50 +
51 + def __getitem__(self, key):
52 + return self._str[key]
53 +
54 + def __hash__(self):
55 + return hash(self._str)
56 +
57 + def __len__(self):
58 + return len(self._str)
59 +
60 + def __lt__(self, other):
61 + return self._str < other
62 +
63 + def __ne__(self, other):
64 + return self._str != other
65 +
66 + def __repr__(self):
67 + return repr(self._str)
68 +
69 + def __str__(self):
70 + return str(self._str)
71 +
72 + def endswith(self, *pargs, **kargs):
73 + return self._str.endswith(*pargs, **kargs)
74 +
75 + def find(self, *pargs, **kargs):
76 + return self._str.find(*pargs, **kargs)
77 +
78 + def index(self, *pargs, **kargs):
79 + return self._str.index(*pargs, **kargs)
80 +
81 + def lstrip(self, *pargs, **kargs):
82 + return self._str.lstrip(*pargs, **kargs)
83 +
84 + def replace(self, *pargs, **kargs):
85 + return self._str.replace(*pargs, **kargs)
86 +
87 + def startswith(self, *pargs, **kargs):
88 + return self._str.startswith(*pargs, **kargs)
89 +
90 + def split(self, *pargs, **kargs):
91 + return self._str.split(*pargs, **kargs)
92 +
93 + def strip(self, *pargs, **kargs):
94 + return self._str.strip(*pargs, **kargs)
95 +
96 + def rindex(self, *pargs, **kargs):
97 + return self._str.rindex(*pargs, **kargs)
98 +
99 + def rfind(self, *pargs, **kargs):
100 + return self._str.rfind(*pargs, **kargs)
101 +
102 + def rstrip(self, *pargs, **kargs):
103 + return self._str.rstrip(*pargs, **kargs)
104 +
105 def get_operator(mydep):
106 """
107 Return the operator used in a depstring.