Hi, thanx for all help. For anyone else interested I've placed a few files on http://hakan.ardoe.net/pypy/ namely:
getitem_support.py - The suggested implementation getsetitem_support.py - Generalisation to handle __setitem__ aswell special_methods.py - Generalisation to handle several __xxx__ methods test_getitem.py - Tests for __getitem__ test_matrix.py - Tests using __getitem__, __setitem__ and __add__ > do_getitem._annspecialcase_ = 'specialize:argtype(0)' > # ^^^ specialization; not sure I have done it right... > > I think the _annspecialcase_ should be able to sort out between multiple > unrelated calls to the helper. It seems to be doing it's job. But if I try to apply the same trick to the __getitem__ method it does not seem to work, e.g. if I try to compile the code below it only works if I either do a[i] or a[i,j] calls not a mix of the two. class arr2d: def __init__(self,w,h): self.width=w self.height=h self.data=[i for i in range(w*h)] def __getitem__(self,i): if isinstance(i,int): return self.data[i] elif len(i)==2: return self.data[i[1]*self.width + i[0]] else: raise TypeError __getitem__._annspecialcase_ = 'specialize:argtype(0)' -- Håkan Ardö _______________________________________________ pypy-dev@codespeak.net http://codespeak.net/mailman/listinfo/pypy-dev