Author: Maciej Fijalkowski <fij...@gmail.com> Branch: dynamic-specialized-tuple Changeset: r54688:01fb6e09fb86 Date: 2012-04-23 19:02 +0200 http://bitbucket.org/pypy/pypy/changeset/01fb6e09fb86/
Log: more random progress diff --git a/pypy/rlib/rerased_raw.py b/pypy/rlib/rerased_raw.py --- a/pypy/rlib/rerased_raw.py +++ b/pypy/rlib/rerased_raw.py @@ -24,9 +24,6 @@ STRING = "s" UNICODE = "u" -# all the same size for now -WORD = rffi.sizeof(llmemory.Address) - class UntypedStorage(object): def __init__(self, shape): self.storage = [None] * len(shape) @@ -307,12 +304,12 @@ def ll_enumerate_elements(storage): for i, elem in enumerate(storage.shape.chars): if elem in [INSTANCE, STRING, UNICODE]: - yield WORD * i, storage.data.items[i].ptr + yield i, storage.data.items[i].ptr elif elem == INT: - yield WORD * i, rffi.cast(lltype.Signed, storage.data.items[i]) + yield i, rffi.cast(lltype.Signed, storage.data.items[i]) elif elem == FLOAT: - yield WORD * i, longlong2float.longlong2float(rffi.cast(lltype.Signed, storage.data.items[i])) + yield i, longlong2float.longlong2float(rffi.cast(lltype.Signed, storage.data.items[i])) elif elem == BOOL: - yield WORD * i, rffi.cast(lltype.Bool, storage.data.items[i]) + yield i, rffi.cast(lltype.Bool, storage.data.items[i]) else: assert False diff --git a/pypy/rlib/test/test_rerased_raw.py b/pypy/rlib/test/test_rerased_raw.py --- a/pypy/rlib/test/test_rerased_raw.py +++ b/pypy/rlib/test/test_rerased_raw.py @@ -197,8 +197,7 @@ lst = list(rerased_raw.ll_enumerate_elements(llres)) assert hlstr(lst[0][1]) == "abc" assert lst[0][0] == 0 - WORD = rerased_raw.WORD - assert lst[1:] == [(WORD, 13), (WORD * 2, True), (WORD * 3, 3.5)] + assert lst[1:] == [(1, 13), (2, True), (3, 3.5)] class TestUntypedStorageLLtype(LLRtypeMixin, BaseTestUntypedStorage): pass diff --git a/pypy/translator/c/node.py b/pypy/translator/c/node.py --- a/pypy/translator/c/node.py +++ b/pypy/translator/c/node.py @@ -631,14 +631,19 @@ if T._hints.get('untyped_storage'): arrayfld = T._arrayfld - shapefld = [fld for fld in T._flds if fld != arrayfld] c_expr = defnode.access_expr(self.name, 'shape') lines = generic_initializationexpr(self.db, self.obj.shape, c_expr, decoration + 'shape') for line in lines: yield "\t" + line - for i, obj in enumerate(ll_enumerate_elements(self.obj)): - xxx + arraydef = self.db.gettypedefnode(getattr(T, arrayfld)) + for i, obj in ll_enumerate_elements(self.obj): + c_expr = '(void*)' + arraydef.access_expr( + self.name + '.' + arrayfld, i) + lines = generic_initializationexpr(self.db, obj, c_expr, + '%s[%d]' % (name, i)) + for line in lines: + yield '\t' + line is_empty = False else: for name, value in data: _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit