[pypy-svn] rev 428 - pypy/trunk/src/pypy/objspace/std

pedronis at codespeak.net pedronis at codespeak.net
Mon May 26 12:57:47 CEST 2003


Author: pedronis
Date: Mon May 26 12:57:47 2003
New Revision: 428

Modified:
   pypy/trunk/src/pypy/objspace/std/dictobject.py
Log:
added cell retrieving method


Modified: pypy/trunk/src/pypy/objspace/std/dictobject.py
==============================================================================
--- pypy/trunk/src/pypy/objspace/std/dictobject.py	(original)
+++ pypy/trunk/src/pypy/objspace/std/dictobject.py	Mon May 26 12:57:47 2003
@@ -32,9 +32,21 @@
         self.data = [ (w_key,Cell(w_value)) for w_key,w_value in list_pairs_w ]
 
     def non_empties(self):
-        return [  (w_key,cell) for w_key,cell in self.data if not cell.is_empty()]
-
+        return [ (w_key,cell) for w_key,cell in self.data if not cell.is_empty()]
 
+    def _cell(self,space,w_lookup):
+        data = self.data
+        for w_key, cell in data:
+            if space.is_true(space.eq(w_lookup, w_key)):
+                break
+        else:
+            cell = Cell()
+            data.append((w_lookup,cell))
+        return cell
+
+    def cell(self,space,w_lookup):
+        return space.wrap(self._cell(space,w_lookup))
+                
 def dict_is_true(space, w_dict):
     return not not w_dict.non_empties()
 
@@ -58,13 +70,8 @@
 StdObjSpace.getitem.register(getitem_dict_any, W_DictObject, W_ANY)
 
 def setitem_dict_any_any(space, w_dict, w_newkey, w_newvalue):
-    data = w_dict.data
-    for w_key,cell in data:
-        if space.is_true(space.eq(w_newkey, w_key)):
-            cell.set(w_newvalue)
-            return
-    # add new (key,Cell(value)) pair
-    data.append((w_newkey, Cell(w_newvalue)))
+    cell = w_dict._cell(space,w_newkey)
+    cell.set(w_newvalue)
 
 StdObjSpace.setitem.register(setitem_dict_any_any, W_DictObject, W_ANY, W_ANY)
 


More information about the Pypy-commit mailing list