Author: Maciej Fijalkowski <[email protected]>
Branch: rdict-experiments-3
Changeset: r67578:cbca3da21bd4
Date: 2013-10-24 20:05 +0200
http://bitbucket.org/pypy/pypy/changeset/cbca3da21bd4/
Log: yet another attempt at fixing indirect calls
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
@@ -42,26 +42,16 @@
def ll_call_lookup_function(d, key, hash, flag):
DICT = lltype.typeOf(d).TO
- if IS_64BIT:
- fun = d.lookup_function_no
- if fun == FUNC_BYTE:
- return DICT.lookup_family.byte_lookup_function(d, key, hash, flag)
- elif fun == FUNC_SHORT:
- return DICT.lookup_family.short_lookup_function(d, key, hash, flag)
- elif fun == FUNC_INT:
- return DICT.lookup_family.int_lookup_function(d, key, hash, flag)
- elif fun == FUNC_LONG:
- return DICT.lookup_family.long_lookup_function(d, key, hash, flag)
- assert False
- else:
- fun = d.lookup_function_no
- if fun == FUNC_BYTE:
- return DICT.lookup_family.byte_lookup_function(d, key, hash, flag)
- elif fun == FUNC_SHORT:
- return DICT.lookup_family.short_lookup_function(d, key, hash, flag)
- elif fun == FUNC_LONG:
- return DICT.lookup_family.long_lookup_function(d, key, hash, flag)
- assert False
+ fun = d.lookup_function_no
+ if fun == FUNC_BYTE:
+ return DICT.lookup_family.byte_lookup_function(d, key, hash, flag)
+ elif fun == FUNC_SHORT:
+ return DICT.lookup_family.short_lookup_function(d, key, hash, flag)
+ elif IS_64BIT and fun == FUNC_INT:
+ return DICT.lookup_family.int_lookup_function(d, key, hash, flag)
+ elif fun == FUNC_LONG:
+ return DICT.lookup_family.long_lookup_function(d, key, hash, flag)
+ assert False
def get_ll_dict(DICTKEY, DICTVALUE, get_custom_eq_hash=None, DICT=None,
ll_fasthash_function=None, ll_hash_function=None,
@@ -483,18 +473,18 @@
zero=True))
d.lookup_function_no = FUNC_LONG
-def ll_pick_insert_clean_function(d):
+def ll_call_insert_clean_function(d, hash, i):
DICT = lltype.typeOf(d).TO
if d.lookup_function_no == FUNC_BYTE:
- return DICT.lookup_family.byte_insert_clean_function
- if d.lookup_function_no == FUNC_SHORT:
- return DICT.lookup_family.short_insert_clean_function
- if IS_64BIT:
- if d.lookup_function_no == FUNC_INT:
- return DICT.lookup_family.int_insert_clean_function
- if d.lookup_function_no == FUNC_LONG:
- return DICT.lookup_family.long_insert_clean_function
- assert False
+ DICT.lookup_family.byte_insert_clean_function(d, hash, i)
+ elif d.lookup_function_no == FUNC_SHORT:
+ DICT.lookup_family.short_insert_clean_function(d, hash, i)
+ elif IS_64BIT and d.lookup_function_no == FUNC_INT:
+ DICT.lookup_family.int_insert_clean_function(d, hash, i)
+ elif d.lookup_function_no == FUNC_LONG:
+ DICT.lookup_family.long_insert_clean_function(d, hash, i)
+ else:
+ assert False
def ll_valid_from_flag(entries, i):
return entries[i].f_valid
@@ -567,8 +557,7 @@
else:
if len(d.entries) == d.num_used_items:
if ll_dict_grow(d):
- insertcleanfn = ll_pick_insert_clean_function(d)
- insertcleanfn(d, hash, d.num_used_items)
+ ll_call_insert_clean_function(d, hash, d.num_used_items)
entry = d.entries[d.num_used_items]
entry.key = key
entry.value = value
@@ -587,8 +576,7 @@
def _ll_dict_insertclean(d, key, value, hash):
ENTRY = lltype.typeOf(d.entries).TO.OF
- insertcleanfn = ll_pick_insert_clean_function(d)
- insertcleanfn(d, hash, d.num_used_items)
+ ll_call_insert_clean_function(d, hash, d.num_used_items)
entry = d.entries[d.num_used_items]
entry.key = key
entry.value = value
@@ -739,13 +727,12 @@
d.resize_counter = new_size * 2 - d.num_items * 3
assert d.resize_counter > 0
#
- insertcleanfn = ll_pick_insert_clean_function(d)
entries = d.entries
i = 0
while i < d.num_used_items:
if entries.valid(i):
hash = entries.hash(i)
- insertcleanfn(d, hash, i)
+ ll_call_insert_clean_function(d, hash, i)
i += 1
#old_entries.delete() XXXX!
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit