[pypy-commit] pypy rdict-experiments-3: (fijal, arigo) RPythonification
arigo
noreply at buildbot.pypy.org
Wed Oct 9 19:22:42 CEST 2013
Author: Armin Rigo <arigo at tunes.org>
Branch: rdict-experiments-3
Changeset: r67257:2a1d6345670e
Date: 2013-10-09 19:21 +0200
http://bitbucket.org/pypy/pypy/changeset/2a1d6345670e/
Log: (fijal, arigo) RPythonification
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
@@ -139,8 +139,9 @@
adtmeths['KEY'] = DICTKEY
adtmeths['VALUE'] = DICTVALUE
adtmeths['allocate'] = lltype.typeMethod(_ll_malloc_dict)
- adtmeths['empty_array'] = DICTENTRYARRAY.allocate(0)
+ family = LookupFamily()
+ family.empty_array = DICTENTRYARRAY.allocate(0)
for name, T in [('byte', rffi.UCHAR),
('short', rffi.USHORT),
('int', rffi.UINT),
@@ -149,13 +150,19 @@
continue
lookupfn, lookcleanfn = new_lookup_functions(LOOKUP_FUNC,
LOOKCLEAN_FUNC, T=T)
- adtmeths['%s_lookup_function' % name] = lookupfn
- adtmeths['%s_lookup_clean_function' % name] = lookcleanfn
+ setattr(family, '%s_lookup_function' % name, lookupfn)
+ setattr(family, '%s_insert_clean_function' % name, lookcleanfn)
+ adtmeths['lookup_family'] = family
DICT.become(lltype.GcStruct("dicttable", adtmeths=adtmeths,
*fields))
return DICT
+class LookupFamily:
+ def _freeze_(self):
+ return True
+
+
class DictRepr(AbstractDictRepr):
def __init__(self, rtyper, key_repr, value_repr, dictkey, dictvalue,
@@ -404,34 +411,35 @@
d.indexes = lltype.cast_opaque_ptr(llmemory.GCREF,
lltype.malloc(DICTINDEX_BYTE.TO, n,
zero=True))
- d.lookup_function = DICT.byte_lookup_function
+ d.lookup_function = DICT.lookup_family.byte_lookup_function
elif n <= 65536:
d.indexes = lltype.cast_opaque_ptr(llmemory.GCREF,
lltype.malloc(DICTINDEX_SHORT.TO, n,
zero=True))
- d.lookup_function = DICT.short_lookup_function
+ d.lookup_function = DICT.lookup_family.short_lookup_function
elif IS_64BIT and n <= 2 ** 32:
d.indexes = lltype.cast_opaque_ptr(llmemory.GCREF,
lltype.malloc(DICTINDEX_INT.TO, n,
zero=True))
- d.lookup_function = DICT.int_lookup_function
+ d.lookup_function = DICT.lookup_family.int_lookup_function
else:
d.indexes = lltype.cast_opaque_ptr(llmemory.GCREF,
lltype.malloc(DICTINDEX_LONG.TO, n,
zero=True))
- d.lookup_function = DICT.long_lookup_function
+ d.lookup_function = DICT.lookup_family.long_lookup_function
ll_malloc_indexes_and_choose_lookup._always_inline_ = True
def ll_pick_insert_clean_function(d):
DICT = lltype.typeOf(d).TO
- if d.lookup_function == DICT.byte_lookup_function:
- return d.byte_lookup_clean_function
- if d.lookup_function == DICT.short_lookup_function:
- return d.short_lookup_clean_function
- if IS_64BIT and d.lookup_function == DICT.int_lookup_function:
- return d.int_lookup_clean_function
- if d.lookup_function == DICT.long_lookup_function:
- return d.long_lookup_clean_function
+ if d.lookup_function == DICT.lookup_family.byte_lookup_function:
+ return DICT.lookup_family.byte_insert_clean_function
+ if d.lookup_function == DICT.lookup_family.short_lookup_function:
+ return DICT.lookup_family.short_insert_clean_function
+ if IS_64BIT:
+ if d.lookup_function == DICT.lookup_family.int_lookup_function:
+ return DICT.lookup_family.int_insert_clean_function
+ if d.lookup_function == DICT.lookup_family.long_lookup_function:
+ return DICT.lookup_family.long_insert_clean_function
assert False
def ll_valid_from_flag(entries, i):
@@ -838,7 +846,7 @@
def ll_newdict(DICT):
d = DICT.allocate()
- d.entries = DICT.empty_array
+ d.entries = DICT.lookup_family.empty_array
ll_malloc_indexes_and_choose_lookup(d, DICT_INITSIZE)
d.num_items = 0
d.num_used_items = 0
More information about the pypy-commit
mailing list