[pypy-commit] pypy dict-strategies: rename AbstractUnwrappedStrategy to AbtractTypedStrategy. make ObjectStrategy an AbtractTypedStrategy.

cfbolz noreply at buildbot.pypy.org
Wed May 25 18:05:24 CEST 2011


Author: Carl Friedrich Bolz <cfbolz at gmx.de>
Branch: dict-strategies
Changeset: r44474:8b801718efea
Date: 2011-05-25 18:16 +0200
http://bitbucket.org/pypy/pypy/changeset/8b801718efea/

Log:	rename AbstractUnwrappedStrategy to AbtractTypedStrategy. make
	ObjectStrategy an AbtractTypedStrategy.

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
@@ -281,7 +281,7 @@
 
 # concrete subclasses of the above
 
-class AbstractUnwrappedStrategy(object):
+class AbtractTypedStrategy(object):
     _mixin_ = True
 
     @staticmethod
@@ -320,7 +320,7 @@
     def setdefault(self, w_dict, w_key, w_default):
         space = self.space
         if self.is_correct_type(w_key):
-            return self.unerase(w_dict.dstorage).setdefault(space.unwrap(w_key), w_default)
+            return self.unerase(w_dict.dstorage).setdefault(self.unwrap(w_key), w_default)
         else:
             self.switch_to_object_strategy(w_dict)
             return w_dict.setdefault(w_key, w_default)
@@ -341,7 +341,7 @@
         return len(self.unerase(w_dict.dstorage))
 
     def getitem_str(self, w_dict, key):
-        return None
+        return self.getitem(w_dict, self.space.wrap(key))
 
     def getitem(self, w_dict, w_key):
         space = self.space
@@ -383,55 +383,32 @@
         w_dict.dstorage = strategy.erase(d_new)
 
 
-class ObjectDictStrategy(DictStrategy):
+class ObjectDictStrategy(AbtractTypedStrategy, DictStrategy):
 
     erase, unerase = rerased.new_erasing_pair("object")
     erase = staticmethod(erase)
     unerase = staticmethod(unerase)
 
+    def wrap(self, unwrapped):
+        return unwrapped
+
+    def unwrap(self, wrapped):
+        return wrapped
+
+    def is_correct_type(self, w_obj):
+        return True
+
     def get_empty_storage(self):
        new_dict = r_dict(self.space.eq_w, self.space.hash_w)
        return self.erase(new_dict)
 
-    def setdefault(self, w_dict, w_key, w_default):
-        return self.unerase(w_dict.dstorage).setdefault(w_key, w_default)
-
-    def setitem(self, w_dict, w_key, w_value):
-        self.unerase(w_dict.dstorage)[w_key] = w_value
-
-    def setitem_str(self, w_dict, key, w_value):
-        return w_dict.setitem(self.space.wrap(key), w_value)
-
-    def delitem(self, w_dict, w_key):
-        del self.unerase(w_dict.dstorage)[w_key]
-
-    def length(self, w_dict):
-        return len(self.unerase(w_dict.dstorage))
-
-    def getitem(self, w_dict, w_key):
-        return self.unerase(w_dict.dstorage).get(w_key, None)
-
-    def getitem_str(self, w_dict, key):
-        return self.getitem(w_dict, self.space.wrap(key))
-
     def iter(self, w_dict):
         return RDictIteratorImplementation(self.space, w_dict)
 
     def keys(self, w_dict):
         return self.unerase(w_dict.dstorage).keys()
 
-    def values(self, w_dict):
-        return self.unerase(w_dict.dstorage).values()
-
-    def items(self, w_dict):
-        return [self.space.newtuple([w_key, w_val])
-                    for w_key, w_val in self.unerase(w_dict.dstorage).iteritems()]
-
-    def popitem(self, w_dict):
-        return self.unerase(w_dict.dstorage).popitem()
-
-
-class StringDictStrategy(AbstractUnwrappedStrategy, DictStrategy):
+class StringDictStrategy(AbtractTypedStrategy, DictStrategy):
 
     erase, unerase = rerased.new_erasing_pair("string")
     erase = staticmethod(erase)


More information about the pypy-commit mailing list