Author: Maciej Fijalkowski <[email protected]>
Branch: rdict-experiments-3
Changeset: r67286:4b309f50a85f
Date: 2013-10-10 12:17 +0200
http://bitbucket.org/pypy/pypy/changeset/4b309f50a85f/

Log:    dict.get

diff --git a/rpython/rtyper/lltypesystem/rdict.py 
b/rpython/rtyper/lltypesystem/rdict.py
--- a/rpython/rtyper/lltypesystem/rdict.py
+++ b/rpython/rtyper/lltypesystem/rdict.py
@@ -274,7 +274,7 @@
         v_dict, v_key, v_default = hop.inputargs(self, self.key_repr,
                                                  self.value_repr)
         hop.exception_cannot_occur()
-        v_res = hop.gendirectcall(ll_get, v_dict, v_key, v_default)
+        v_res = hop.gendirectcall(ll_dict_get, v_dict, v_key, v_default)
         return self.recast_value(hop.llops, v_res)
 
     def rtype_method_setdefault(self, hop):
@@ -966,12 +966,12 @@
 # _____________________________________________________________
 # methods
 
-def ll_get(dict, key, default):
-    i = ll_dict_lookup(dict, key, dict.keyhash(key))
-    if not i & HIGHEST_BIT:
-        return ll_get_value(dict, i)
+def ll_dict_get(dict, key, default):
+    index = dict.lookup_function(dict, key, dict.keyhash(key), FLAG_LOOKUP)
+    if index == -1:
+        return default
     else:
-        return default
+        return dict.entries[index].value
 
 def ll_setdefault(dict, key, default):
     hash = dict.keyhash(key)
diff --git a/rpython/rtyper/test/test_rdict.py 
b/rpython/rtyper/test/test_rdict.py
--- a/rpython/rtyper/test/test_rdict.py
+++ b/rpython/rtyper/test/test_rdict.py
@@ -193,6 +193,13 @@
         rdict.ll_dict_clear(ll_d)
         assert ll_d.num_items == 0
 
+    def test_get(self):
+        DICT = self._get_str_dict()
+        ll_d = rdict.ll_newdict(DICT)
+        rdict.ll_dict_setitem(ll_d, llstr("k"), 1)
+        assert rdict.ll_dict_get(ll_d, llstr("k"), 32) == 1
+        assert rdict.ll_dict_get(ll_d, llstr("j"), 32) == 32
+
 class TestRDictDirectDummyKey(TestRDictDirect):
     class dummykeyobj:
         ll_dummy_value = llstr("dupa")
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to