[pypy-svn] r18766 - pypy/dist/pypy/annotation
pedronis at codespeak.net
pedronis at codespeak.net
Wed Oct 19 19:28:01 CEST 2005
Author: pedronis
Date: Wed Oct 19 19:27:58 2005
New Revision: 18766
Modified:
pypy/dist/pypy/annotation/binaryop.py
pypy/dist/pypy/annotation/listdef.py
Log:
use (possibly circual) chains of read_item/generalize for setitem(list,slice,value) and int*list/list*int
preperation for special fixed-size lists support
Modified: pypy/dist/pypy/annotation/binaryop.py
==============================================================================
--- pypy/dist/pypy/annotation/binaryop.py (original)
+++ pypy/dist/pypy/annotation/binaryop.py Wed Oct 19 19:27:58 2005
@@ -434,8 +434,7 @@
class __extend__(pairtype(SomeList, SomeInteger)):
def mul((lst1, int2)):
- #return getbookkeeper().newlist(lst1.listdef.read_item())
- return SomeList(lst1.listdef)
+ return lst1.listdef.offspring()
def getitem((lst1, int2)):
getbookkeeper().count("list_getitem", int2)
@@ -456,8 +455,7 @@
class __extend__(pairtype(SomeList, SomeSlice)):
def getitem((lst, slic)):
- #return getbookkeeper().newlist(lst.listdef.read_item())
- return SomeList(lst.listdef)
+ return lst.listdef.offspring()
getitem.can_only_throw = []
def setitem((lst, slic), s_iterable):
@@ -496,8 +494,7 @@
class __extend__(pairtype(SomeInteger, SomeList)):
def mul((int1, lst2)):
- #return getbookkeeper().newlist(lst2.listdef.read_item())
- return SomeList(lst2.listdef)
+ return lst2.listdef.offspring()
class __extend__(pairtype(SomeInstance, SomeInstance)):
Modified: pypy/dist/pypy/annotation/listdef.py
==============================================================================
--- pypy/dist/pypy/annotation/listdef.py (original)
+++ pypy/dist/pypy/annotation/listdef.py Wed Oct 19 19:27:58 2005
@@ -78,13 +78,16 @@
self.listitem.itemof[self] = True
self.bookkeeper = bookkeeper
+ def getbookkeeper(self):
+ if self.bookkeeper is None:
+ from pypy.annotation.bookkeeper import getbookkeeper
+ return getbookkeeper()
+ else:
+ return self.bookkeeper
+
def read_item(self, position_key=None):
if position_key is None:
- if self.bookkeeper is None: # for tests
- from pypy.annotation.bookkeeper import getbookkeeper
- position_key = getbookkeeper().position_key
- else:
- position_key = self.bookkeeper.position_key
+ position_key = self.getbookkeeper().position_key
self.listitem.read_locations[position_key] = True
return self.listitem.s_value
@@ -105,13 +108,16 @@
self.generalize(s_other_value)
other.generalize(s_self_value)
- def offspring(self, other):
+ def offspring(self, *others):
s_self_value = self.read_item()
- s_other_value = other.read_item()
- s_newlst = self.bookkeeper.newlist(s_self_value, s_other_value)
+ s_other_values = []
+ for other in others:
+ s_other_values.append(other.read_item())
+ s_newlst = self.getbookkeeper().newlist(s_self_value, *s_other_values)
s_newvalue = s_newlst.listdef.read_item()
self.generalize(s_newvalue)
- other.generalize(s_newvalue)
+ for other in others:
+ other.generalize(s_newvalue)
return s_newlst
def generalize(self, s_value):
More information about the Pypy-commit
mailing list