[pypy-commit] pypy remove-dict-smm: Move typedefs up.

Manuel Jacob noreply at buildbot.pypy.org
Tue May 14 21:24:28 CEST 2013


Author: Manuel Jacob
Branch: remove-dict-smm
Changeset: r64096:8e806b411638
Date: 2013-05-14 20:29 +0200
http://bitbucket.org/pypy/pypy/changeset/8e806b411638/

Log:	Move typedefs up.

diff --git a/pypy/objspace/std/dictmultiobject.py b/pypy/objspace/std/dictmultiobject.py
--- a/pypy/objspace/std/dictmultiobject.py
+++ b/pypy/objspace/std/dictmultiobject.py
@@ -309,6 +309,120 @@
 
 _add_indirections()
 
+def descr_fromkeys(space, w_type, w_keys, w_fill=None):
+    if w_fill is None:
+        w_fill = space.w_None
+    if space.is_w(w_type, space.w_dict):
+        w_dict = W_DictMultiObject.allocate_and_init_instance(space, w_type)
+
+        strlist = space.listview_str(w_keys)
+        if strlist is not None:
+            for key in strlist:
+                w_dict.setitem_str(key, w_fill)
+        else:
+            for w_key in space.listview(w_keys):
+                w_dict.setitem(w_key, w_fill)
+    else:
+        w_dict = space.call_function(w_type)
+        for w_key in space.listview(w_keys):
+            space.setitem(w_dict, w_key, w_fill)
+    return w_dict
+
+
+app = gateway.applevel('''
+    def dictrepr(currently_in_repr, d):
+        if len(d) == 0:
+            return "{}"
+        dict_id = id(d)
+        if dict_id in currently_in_repr:
+            return '{...}'
+        currently_in_repr[dict_id] = 1
+        try:
+            items = []
+            # XXX for now, we cannot use iteritems() at app-level because
+            #     we want a reasonable result instead of a RuntimeError
+            #     even if the dict is mutated by the repr() in the loop.
+            for k, v in dict.items(d):
+                items.append(repr(k) + ": " + repr(v))
+            return "{" +  ', '.join(items) + "}"
+        finally:
+            try:
+                del currently_in_repr[dict_id]
+            except:
+                pass
+''', filename=__file__)
+
+dictrepr = app.interphook("dictrepr")
+
+
+def descr_repr(space, w_dict):
+    ec = space.getexecutioncontext()
+    w_currently_in_repr = ec._py_repr
+    if w_currently_in_repr is None:
+        w_currently_in_repr = ec._py_repr = space.newdict()
+    return dictrepr(space, w_currently_in_repr, w_dict)
+
+
+# ____________________________________________________________
+
+def descr__new__(space, w_dicttype, __args__):
+    w_obj = W_DictMultiObject.allocate_and_init_instance(space, w_dicttype)
+    return w_obj
+
+# ____________________________________________________________
+
+W_DictMultiObject.typedef = StdTypeDef("dict",
+    __doc__ = '''dict() -> new empty dictionary.
+dict(mapping) -> new dictionary initialized from a mapping object\'s
+    (key, value) pairs.
+dict(seq) -> new dictionary initialized as if via:
+    d = {}
+    for k, v in seq:
+        d[k] = v
+dict(**kwargs) -> new dictionary initialized with the name=value pairs
+    in the keyword argument list.  For example:  dict(one=1, two=2)''',
+    __new__ = gateway.interp2app(descr__new__),
+    __hash__ = None,
+    __repr__ = gateway.interp2app(descr_repr),
+    __init__ = gateway.interp2app(W_DictMultiObject.descr_init),
+
+    __eq__ = gateway.interp2app(W_DictMultiObject.descr_eq),
+    __ne__ = gateway.interp2app(W_DictMultiObject.descr_ne),
+    __lt__ = gateway.interp2app(W_DictMultiObject.descr_lt),
+    # XXX other comparison methods?
+
+    __len__ = gateway.interp2app(W_DictMultiObject.descr_len),
+    __iter__ = gateway.interp2app(W_DictMultiObject.descr_iter),
+    __contains__ = gateway.interp2app(W_DictMultiObject.descr_contains),
+
+    __getitem__ = gateway.interp2app(W_DictMultiObject.descr_getitem),
+    __setitem__ = gateway.interp2app(W_DictMultiObject.descr_setitem),
+    __delitem__ = gateway.interp2app(W_DictMultiObject.descr_delitem),
+
+    __reversed__ = gateway.interp2app(W_DictMultiObject.descr_reversed),
+    fromkeys = gateway.interp2app(descr_fromkeys, as_classmethod=True),
+    copy = gateway.interp2app(W_DictMultiObject.descr_copy),
+    items = gateway.interp2app(W_DictMultiObject.descr_items),
+    keys = gateway.interp2app(W_DictMultiObject.descr_keys),
+    values = gateway.interp2app(W_DictMultiObject.descr_values),
+    iteritems = gateway.interp2app(W_DictMultiObject.descr_iteritems),
+    iterkeys = gateway.interp2app(W_DictMultiObject.descr_iterkeys),
+    itervalues = gateway.interp2app(W_DictMultiObject.descr_itervalues),
+    viewkeys = gateway.interp2app(W_DictMultiObject.descr_viewkeys),
+    viewitems = gateway.interp2app(W_DictMultiObject.descr_viewitems),
+    viewvalues = gateway.interp2app(W_DictMultiObject.descr_viewvalues),
+    has_key = gateway.interp2app(W_DictMultiObject.descr_has_key),
+    clear = gateway.interp2app(W_DictMultiObject.descr_clear),
+    get = gateway.interp2app(W_DictMultiObject.descr_get),
+    pop = gateway.interp2app(W_DictMultiObject.descr_pop),
+    popitem = gateway.interp2app(W_DictMultiObject.descr_popitem),
+    setdefault = gateway.interp2app(W_DictMultiObject.descr_setdefault),
+    update = gateway.interp2app(W_DictMultiObject.descr_update),
+    )
+W_DictMultiObject.typedef.registermethods(globals())
+dict_typedef = W_DictMultiObject.typedef
+
+
 class DictStrategy(object):
 
     def __init__(self, space):
@@ -1069,6 +1183,12 @@
         w_ret = space.newtuple([new_inst, space.newtuple(tup)])
         return w_ret
 
+
+W_BaseDictMultiIterObject.typedef = StdTypeDef("dictionaryiterator",
+    __length_hint__ = gateway.interp2app(W_BaseDictMultiIterObject.descr_length_hint),
+    __reduce__      = gateway.interp2app(W_BaseDictMultiIterObject.descr_reduce),
+    )
+
 class W_DictMultiIterKeysObject(W_BaseDictMultiIterObject):
     pass
 
@@ -1134,6 +1254,21 @@
         return W_DictMultiIterValuesObject(space, self.w_dict.itervalues())
 registerimplementation(W_DictViewValuesObject)
 
+W_DictViewItemsObject.typedef = StdTypeDef(
+    "dict_items",
+    __iter__ = gateway.interp2app(W_DictViewItemsObject.descr_iter)
+    )
+
+W_DictViewKeysObject.typedef = StdTypeDef(
+    "dict_keys",
+    __iter__ = gateway.interp2app(W_DictViewKeysObject.descr_iter)
+    )
+
+W_DictViewValuesObject.typedef = StdTypeDef(
+    "dict_values",
+    __iter__ = gateway.interp2app(W_DictViewValuesObject.descr_iter)
+    )
+
 def len__DictViewKeys(space, w_dictview):
     return space.len(w_dictview.w_dict)
 len__DictViewItems = len__DictViewValues = len__DictViewKeys
@@ -1201,142 +1336,3 @@
 
 
 register_all(vars(), globals())
-
-def descr_fromkeys(space, w_type, w_keys, w_fill=None):
-    if w_fill is None:
-        w_fill = space.w_None
-    if space.is_w(w_type, space.w_dict):
-        w_dict = W_DictMultiObject.allocate_and_init_instance(space, w_type)
-
-        strlist = space.listview_str(w_keys)
-        if strlist is not None:
-            for key in strlist:
-                w_dict.setitem_str(key, w_fill)
-        else:
-            for w_key in space.listview(w_keys):
-                w_dict.setitem(w_key, w_fill)
-    else:
-        w_dict = space.call_function(w_type)
-        for w_key in space.listview(w_keys):
-            space.setitem(w_dict, w_key, w_fill)
-    return w_dict
-
-
-app = gateway.applevel('''
-    def dictrepr(currently_in_repr, d):
-        if len(d) == 0:
-            return "{}"
-        dict_id = id(d)
-        if dict_id in currently_in_repr:
-            return '{...}'
-        currently_in_repr[dict_id] = 1
-        try:
-            items = []
-            # XXX for now, we cannot use iteritems() at app-level because
-            #     we want a reasonable result instead of a RuntimeError
-            #     even if the dict is mutated by the repr() in the loop.
-            for k, v in dict.items(d):
-                items.append(repr(k) + ": " + repr(v))
-            return "{" +  ', '.join(items) + "}"
-        finally:
-            try:
-                del currently_in_repr[dict_id]
-            except:
-                pass
-''', filename=__file__)
-
-dictrepr = app.interphook("dictrepr")
-
-
-def descr_repr(space, w_dict):
-    ec = space.getexecutioncontext()
-    w_currently_in_repr = ec._py_repr
-    if w_currently_in_repr is None:
-        w_currently_in_repr = ec._py_repr = space.newdict()
-    return dictrepr(space, w_currently_in_repr, w_dict)
-
-
-# ____________________________________________________________
-
-def descr__new__(space, w_dicttype, __args__):
-    w_obj = W_DictMultiObject.allocate_and_init_instance(space, w_dicttype)
-    return w_obj
-
-# ____________________________________________________________
-
-W_DictMultiObject.typedef = StdTypeDef("dict",
-    __doc__ = '''dict() -> new empty dictionary.
-dict(mapping) -> new dictionary initialized from a mapping object\'s
-    (key, value) pairs.
-dict(seq) -> new dictionary initialized as if via:
-    d = {}
-    for k, v in seq:
-        d[k] = v
-dict(**kwargs) -> new dictionary initialized with the name=value pairs
-    in the keyword argument list.  For example:  dict(one=1, two=2)''',
-    __new__ = gateway.interp2app(descr__new__),
-    __hash__ = None,
-    __repr__ = gateway.interp2app(descr_repr),
-    __init__ = gateway.interp2app(W_DictMultiObject.descr_init),
-
-    __eq__ = gateway.interp2app(W_DictMultiObject.descr_eq),
-    __ne__ = gateway.interp2app(W_DictMultiObject.descr_ne),
-    __lt__ = gateway.interp2app(W_DictMultiObject.descr_lt),
-    # XXX other comparison methods?
-
-    __len__ = gateway.interp2app(W_DictMultiObject.descr_len),
-    __iter__ = gateway.interp2app(W_DictMultiObject.descr_iter),
-    __contains__ = gateway.interp2app(W_DictMultiObject.descr_contains),
-
-    __getitem__ = gateway.interp2app(W_DictMultiObject.descr_getitem),
-    __setitem__ = gateway.interp2app(W_DictMultiObject.descr_setitem),
-    __delitem__ = gateway.interp2app(W_DictMultiObject.descr_delitem),
-
-    __reversed__ = gateway.interp2app(W_DictMultiObject.descr_reversed),
-    fromkeys = gateway.interp2app(descr_fromkeys, as_classmethod=True),
-    copy = gateway.interp2app(W_DictMultiObject.descr_copy),
-    items = gateway.interp2app(W_DictMultiObject.descr_items),
-    keys = gateway.interp2app(W_DictMultiObject.descr_keys),
-    values = gateway.interp2app(W_DictMultiObject.descr_values),
-    iteritems = gateway.interp2app(W_DictMultiObject.descr_iteritems),
-    iterkeys = gateway.interp2app(W_DictMultiObject.descr_iterkeys),
-    itervalues = gateway.interp2app(W_DictMultiObject.descr_itervalues),
-    viewkeys = gateway.interp2app(W_DictMultiObject.descr_viewkeys),
-    viewitems = gateway.interp2app(W_DictMultiObject.descr_viewitems),
-    viewvalues = gateway.interp2app(W_DictMultiObject.descr_viewvalues),
-    has_key = gateway.interp2app(W_DictMultiObject.descr_has_key),
-    clear = gateway.interp2app(W_DictMultiObject.descr_clear),
-    get = gateway.interp2app(W_DictMultiObject.descr_get),
-    pop = gateway.interp2app(W_DictMultiObject.descr_pop),
-    popitem = gateway.interp2app(W_DictMultiObject.descr_popitem),
-    setdefault = gateway.interp2app(W_DictMultiObject.descr_setdefault),
-    update = gateway.interp2app(W_DictMultiObject.descr_update),
-    )
-W_DictMultiObject.typedef.registermethods(globals())
-dict_typedef = W_DictMultiObject.typedef
-
-# ____________________________________________________________
-
-
-W_BaseDictMultiIterObject.typedef = StdTypeDef("dictionaryiterator",
-    __length_hint__ = gateway.interp2app(W_BaseDictMultiIterObject.descr_length_hint),
-    __reduce__      = gateway.interp2app(W_BaseDictMultiIterObject.descr_reduce),
-    )
-
-# ____________________________________________________________
-# Dict views
-
-W_DictViewItemsObject.typedef = StdTypeDef(
-    "dict_items",
-    __iter__ = gateway.interp2app(W_DictViewItemsObject.descr_iter)
-    )
-
-W_DictViewKeysObject.typedef = StdTypeDef(
-    "dict_keys",
-    __iter__ = gateway.interp2app(W_DictViewKeysObject.descr_iter)
-    )
-
-W_DictViewValuesObject.typedef = StdTypeDef(
-    "dict_values",
-    __iter__ = gateway.interp2app(W_DictViewValuesObject.descr_iter)
-    )


More information about the pypy-commit mailing list