[pypy-svn] r31851 - pypy/dist/pypy/jit/timeshifter
arigo at codespeak.net
arigo at codespeak.net
Wed Aug 30 21:13:14 CEST 2006
Author: arigo
Date: Wed Aug 30 21:13:13 2006
New Revision: 31851
Modified:
pypy/dist/pypy/jit/timeshifter/oop.py
pypy/dist/pypy/jit/timeshifter/rtimeshift.py
pypy/dist/pypy/jit/timeshifter/rtyper.py
pypy/dist/pypy/jit/timeshifter/vlist.py
Log:
(pedronis, arigo)
Refactored vlist to no longer use the obscure listbuilder in rlist.py.
The listbuilder could be killed soonish...
Modified: pypy/dist/pypy/jit/timeshifter/oop.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/oop.py (original)
+++ pypy/dist/pypy/jit/timeshifter/oop.py Wed Aug 30 21:13:13 2006
@@ -11,7 +11,7 @@
class OopSpecDesc:
__metaclass__ = cachedtype
- def __init__(self, RGenOp, fnobj):
+ def __init__(self, hrtyper, fnobj):
ll_func = fnobj._callable
FUNCTYPE = lltype.typeOf(fnobj)
nb_args = len(FUNCTYPE.ARGS)
@@ -36,14 +36,15 @@
ARGTYPE = FUNCTYPE.ARGS[i]
assert ((i+1) in self.argpositions) == (ARGTYPE is not lltype.Void)
- self.args_gv = [RGenOp.placeholder(None)] * nb_args
+ RGenOp = hrtyper.RGenOp
+ self.args_gv = [None] * nb_args
self.args_gv.insert(0, RGenOp.constPrebuiltGlobal(fnobj._as_ptr()))
self.result_kind = RGenOp.kindToken(FUNCTYPE.RESULT)
self.redboxbuilder = rvalue.ll_redboxbuilder(FUNCTYPE.RESULT)
if operation_name == 'newlist':
from pypy.jit.timeshifter.vlist import ListTypeDesc, oop_newlist
- self.typedesc = ListTypeDesc(RGenOp, FUNCTYPE.RESULT.TO)
+ self.typedesc = ListTypeDesc(hrtyper, FUNCTYPE.RESULT.TO)
self.ll_handler = oop_newlist
else:
typename, method = operation_name.split('.')
Modified: pypy/dist/pypy/jit/timeshifter/rtimeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtimeshift.py (original)
+++ pypy/dist/pypy/jit/timeshifter/rtimeshift.py Wed Aug 30 21:13:13 2006
@@ -302,9 +302,9 @@
return self.rgenop.genconst(llvalue)
genconst._annspecialcase_ = 'specialize:genconst(1)'
- def genvoidconst(self, dummy):
- return self.rgenop.placeholder(dummy)
- genvoidconst._annspecialcase_ = 'specialize:arg(1)'
+## def genvoidconst(self, dummy):
+## return self.rgenop.placeholder(dummy)
+## genvoidconst._annspecialcase_ = 'specialize:arg(1)'
def genop(self, opname, args_gv, result_kind=None):
return self.block.genop(opname, args_gv, result_kind)
Modified: pypy/dist/pypy/jit/timeshifter/rtyper.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtyper.py (original)
+++ pypy/dist/pypy/jit/timeshifter/rtyper.py Wed Aug 30 21:13:13 2006
@@ -262,7 +262,7 @@
def handle_highlevel_operation(self, fnobj, hop):
from pypy.jit.timeshifter.oop import OopSpecDesc, Index
- oopspecdesc = OopSpecDesc(self.RGenOp, fnobj)
+ oopspecdesc = OopSpecDesc(self, fnobj)
args_v = []
for obj in oopspecdesc.argtuple:
Modified: pypy/dist/pypy/jit/timeshifter/vlist.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/vlist.py (original)
+++ pypy/dist/pypy/jit/timeshifter/vlist.py Wed Aug 30 21:13:13 2006
@@ -6,12 +6,22 @@
class ListTypeDesc(object):
__metaclass__ = cachedtype
- def __init__(self, RGenOp, LIST):
+ def __init__(self, hrtyper, LIST):
+ RGenOp = hrtyper.RGenOp
+ rtyper = hrtyper.timeshifter.rtyper
self.LIST = LIST
self.LISTPTR = lltype.Ptr(LIST)
self.ptrkind = RGenOp.kindToken(self.LISTPTR)
- self.build_newlist = LIST.list_builder.build_newlist
- self.build_setitem = LIST.list_builder.build_setitem
+
+ argtypes = [lltype.Signed]
+ ll_newlist_ptr = rtyper.annotate_helper_fn(LIST.ll_newlist,
+ argtypes)
+ self.gv_ll_newlist = RGenOp.constPrebuiltGlobal(ll_newlist_ptr)
+
+ argtypes = [self.LISTPTR, lltype.Signed, LIST.ITEM]
+ ll_setitem_fast = rtyper.annotate_helper_fn(LIST.ll_setitem_fast,
+ argtypes)
+ self.gv_ll_setitem_fast = RGenOp.constPrebuiltGlobal(ll_setitem_fast)
def factory(self, length, itembox):
vlist = VirtualList(self, length, itembox)
@@ -73,12 +83,16 @@
typedesc = self.typedesc
boxes = self.item_boxes
self.item_boxes = None
- gv_list = typedesc.build_newlist(builder, len(boxes))
+
+ args_gv = [typedesc.gv_ll_newlist, None, builder.genconst(len(boxes))]
+ gv_list = builder.genop('direct_call', args_gv, typedesc.ptrkind)
self.ownbox.genvar = gv_list
self.ownbox.content = None
for i in range(len(boxes)):
gv_item = boxes[i].getgenvar(builder)
- typedesc.build_setitem(builder, gv_list, i, gv_item)
+ args_gv = [typedesc.gv_ll_setitem_fast, gv_list,
+ builder.genconst(i), gv_item]
+ builder.genop('direct_call', args_gv)
def freeze(self, memo):
contmemo = memo.containers
More information about the Pypy-commit
mailing list