[pypy-svn] r25667 - pypy/dist/pypy/objspace/std
stephan at codespeak.net
stephan at codespeak.net
Mon Apr 10 17:26:18 CEST 2006
Author: stephan
Date: Mon Apr 10 17:26:16 2006
New Revision: 25667
Added:
pypy/dist/pypy/objspace/std/frozensettype.py
Modified:
pypy/dist/pypy/objspace/std/model.py
pypy/dist/pypy/objspace/std/setobject.py
pypy/dist/pypy/objspace/std/settype.py
Log:
created extra 'frozensettype.py' file to avoid multimethod registering problems.
The 'setobject.py' could stay more or less the same, but it had to be taken
care that 'register_all' gets only the appropriate selection of methods for
each type.
Added: pypy/dist/pypy/objspace/std/frozensettype.py
==============================================================================
--- (empty file)
+++ pypy/dist/pypy/objspace/std/frozensettype.py Mon Apr 10 17:26:16 2006
@@ -0,0 +1,35 @@
+from pypy.interpreter.error import OperationError
+from pypy.objspace.std.objspace import register_all
+from pypy.objspace.std.stdtypedef import StdTypeDef, newmethod
+from pypy.objspace.std.stdtypedef import StdObjSpaceMultiMethod as SMM
+from pypy.interpreter.gateway import NoneNotWrapped
+from pypy.interpreter import gateway
+from pypy.objspace.std.model import WITHSET
+
+frozenset_copy = SMM('copy', 1)
+frozenset_difference = SMM('difference', 2)
+frozenset_intersection = SMM('intersection', 2)
+frozenset_issubset = SMM('issubset', 2)
+frozenset_issuperset = SMM('issuperset', 2)
+frozenset_symmetric_difference = SMM('symmetric_difference', 2)
+frozenset_union = SMM('union', 2)
+
+register_all(vars(), globals())
+
+def descr__frozenset__new__(space, w_frozensettype, w_iterable=NoneNotWrapped):
+ from pypy.objspace.std.setobject import W_FrozensetObject
+ if w_iterable is None:
+ w_iterable = space.newtuple([])
+ w_obj = space.allocate_instance(W_FrozensetObject, w_frozensettype)
+ W_FrozensetObject.__init__(w_obj, space, w_iterable)
+
+ return w_obj
+
+frozenset_typedef = StdTypeDef("frozenset",
+ __doc__ = """frozenset(iterable) --> frozenset object
+
+Build an immutable unordered collection.""",
+ __new__ = newmethod(descr__frozenset__new__),
+ )
+
+frozenset_typedef.registermethods(globals())
Modified: pypy/dist/pypy/objspace/std/model.py
==============================================================================
--- pypy/dist/pypy/objspace/std/model.py (original)
+++ pypy/dist/pypy/objspace/std/model.py Mon Apr 10 17:26:16 2006
@@ -23,7 +23,7 @@
from pypy.objspace.std.complextype import complex_typedef
if WITHSET:
from pypy.objspace.std.settype import set_typedef
- from pypy.objspace.std.settype import frozenset_typedef
+ from pypy.objspace.std.frozensettype import frozenset_typedef
from pypy.objspace.std.tupletype import tuple_typedef
from pypy.objspace.std.listtype import list_typedef
from pypy.objspace.std.dicttype import dict_typedef
Modified: pypy/dist/pypy/objspace/std/setobject.py
==============================================================================
--- pypy/dist/pypy/objspace/std/setobject.py (original)
+++ pypy/dist/pypy/objspace/std/setobject.py Mon Apr 10 17:26:16 2006
@@ -25,7 +25,7 @@
from pypy.objspace.std.settype import set_typedef as typedef
class W_FrozensetObject(W_BaseSetObject):
- from pypy.objspace.std.settype import frozenset_typedef as typedef
+ from pypy.objspace.std.frozensettype import frozenset_typedef as typedef
def __init__(w_self, space, wrappeditems):
W_BaseSetObject.__init__(w_self, space, wrappeditems)
@@ -189,7 +189,7 @@
def set_copy__Set(space, w_left):
return space.newset(w_left)
-def frozenset_copy_Frozenset(space, w_left):
+def frozenset_copy__Frozenset(space, w_left):
return space.newfrozenset(w_left)
def set_clear__Set(space, w_left):
@@ -464,5 +464,18 @@
repr__Set = app.interphook('repr__Set')
repr__Frozenset = app.interphook('repr__Frozenset')
+from pypy.objspace.std import frozensettype
from pypy.objspace.std import settype
-register_all(vars(), settype)
+
+# make sure that the 'register_all' function gets only the appropriate
+# methods
+
+sdg = [(n, m) for n, m in vars().items() if n.find('__Frozenset') == -1]
+fdg = [(n, m) for n, m in vars().items() if n.find('__Set') == -1]
+
+register_all(dict(sdg), settype)
+register_all(dict(fdg), frozensettype)
+
+# this doesn't work:
+#register_all(vars(), frozensettype)
+#register_all(vars(), settype)
Modified: pypy/dist/pypy/objspace/std/settype.py
==============================================================================
--- pypy/dist/pypy/objspace/std/settype.py (original)
+++ pypy/dist/pypy/objspace/std/settype.py Mon Apr 10 17:26:16 2006
@@ -23,14 +23,6 @@
set_union = SMM('union', 2)
set_update = SMM('update', 2)
-frozenset_copy = SMM('copy', 1)
-frozenset_difference = SMM('difference', 2)
-frozenset_intersection = SMM('intersection', 2)
-frozenset_issubset = SMM('issubset', 2)
-frozenset_issuperset = SMM('issuperset', 2)
-frozenset_symmetric_difference = SMM('symmetric_difference', 2)
-frozenset_union = SMM('union', 2)
-
register_all(vars(), globals())
def descr__set__new__(space, w_settype, w_iterable=NoneNotWrapped):
@@ -42,15 +34,6 @@
return w_obj
-def descr__frozenset__new__(space, w_frozensettype, w_iterable=NoneNotWrapped):
- from pypy.objspace.std.setobject import W_FrozensetObject
- if w_iterable is None:
- w_iterable = space.newtuple([])
- w_obj = space.allocate_instance(W_FrozensetObject, w_frozensettype)
- W_FrozensetObject.__init__(w_obj, space, w_iterable)
-
- return w_obj
-
set_typedef = StdTypeDef("set",
__doc__ = """set(iterable) --> set object
@@ -60,13 +43,4 @@
set_typedef.registermethods(globals())
-frozenset_typedef = StdTypeDef("frozenset",
- __doc__ = """frozenset(iterable) --> frozenset object
-
-Build an immutable unordered collection.""",
- __new__ = newmethod(descr__frozenset__new__),
- )
-
-frozenset_typedef.registermethods(globals())
-
setiter_typedef = StdTypeDef("setiterator")
More information about the Pypy-commit
mailing list