[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