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