[pypy-svn] r31447 - in pypy/dist/pypy/jit/timeshifter: . test

arigo at codespeak.net arigo at codespeak.net
Mon Aug 21 17:32:59 CEST 2006


Author: arigo
Date: Mon Aug 21 17:32:57 2006
New Revision: 31447

Modified:
   pypy/dist/pypy/jit/timeshifter/rtyper.py
   pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
   pypy/dist/pypy/jit/timeshifter/timeshift.py
Log:
(pedronis, arre, arigo)

Make the simple calling test pass.



Modified: pypy/dist/pypy/jit/timeshifter/rtyper.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/rtyper.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/rtyper.py	Mon Aug 21 17:32:57 2006
@@ -219,6 +219,13 @@
             return v
         else:
             bk = self.annotator.bookkeeper
+            # first close the current block
+            ts = self.timeshifter
+            v_jitstate = hop.llops.getjitstate()
+            hop.llops.genmixlevelhelpercall(rtimeshift.leave_block,
+                                            [ts.s_JITState],
+                                            [v_jitstate],
+                                            ts.s_JITState)
             hop.r_s_popfirstarg()
             args_hs = hop.args_s[:]
             # fixed is always false here
@@ -227,11 +234,15 @@
             args_v = hop.inputargs(*args_r)
             fnptr = self.getcallable(graph)
             self.timeshifter.schedule_graph(graph)
-            v_jitstate = hop.llops.getjitstate()
-            args_v.insert(0, v_jitstate)
+            v_builder = hop.llops.getcurbuilder()
+            args_v.insert(0, v_builder)
             args_v.insert(0, hop.llops.genconst(fnptr))
-            v = hop.genop('direct_call', args_v, hop.r_result.lowleveltype)
-            return v
+            v = hop.genop('direct_call', args_v,
+                          resulttype = ts.r_ResidualGraphBuilder.lowleveltype)
+
+            c_name = inputconst(lltype.Void, 'inst_valuebox')
+            return hop.genop('getfield', [v, c_name],
+                             resulttype = hop.r_result.lowleveltype)
 
     def handle_highlevel_operation(self, fnobj, hop):
         from pypy.jit.timeshifter.oop import OopSpecDesc, Index
@@ -320,12 +331,19 @@
         assert self.originalblock is not None
         return self.timeshifter.block2jitstate[self.originalblock]
 
+    def getcurbuilder(self):
+        v_jitstate = self.getjitstate()
+        c_name = inputconst(lltype.Void, 'inst_curbuilder')
+        return self.genop('getfield', [v_jitstate, c_name],
+                          self.timeshifter.r_ResidualGraphBuilder.lowleveltype)
+
 # ____________________________________________________________
 
 class __extend__(pairtype(HintTypeSystem, hintmodel.SomeLLAbstractConstant)):
 
     def rtyper_makerepr((ts, hs_c), hrtyper):
-        if hs_c.is_fixed() or hs_c.eager_concrete:
+        if (hs_c.is_fixed() or hs_c.eager_concrete or
+            hs_c.concretetype is lltype.Void):
             return hrtyper.getgreenrepr(hs_c.concretetype)
         else:
             return hrtyper.getredrepr(hs_c.concretetype)

Modified: pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/test/test_timeshift.py	Mon Aug 21 17:32:57 2006
@@ -562,7 +562,6 @@
     assert insns == {'int_is_true': 1, 'int_add': 1}
 
 def test_call_simple():
-    py.test.skip("in-progress")
     def ll_add_one(x):
         return x + 1
     def ll_function(y):

Modified: pypy/dist/pypy/jit/timeshifter/timeshift.py
==============================================================================
--- pypy/dist/pypy/jit/timeshifter/timeshift.py	(original)
+++ pypy/dist/pypy/jit/timeshifter/timeshift.py	Mon Aug 21 17:32:57 2006
@@ -22,8 +22,6 @@
         self.rtyper = rtyper
         self.hrtyper = HintRTyper(hannotator, self)
         self.latestexitindex = -1
-        self.block2jitstate = {}
-        self.return_cache = None
         self.annhelper = annlowlevel.MixLevelHelperAnnotator(rtyper)
 
         self.s_ResidualGraphBuilder, self.r_ResidualGraphBuilder = self.s_r_instanceof(ResidualGraphBuilder)
@@ -161,9 +159,12 @@
         self.annhelper.finish()
 
     def timeshift_graph(self, graph):
+        #print 'timeshift_graph START', graph
         self.graph = graph
         self.dispatch_to = []
         self.statecaches = []
+        self.block2jitstate = {}
+        self.return_cache = None
         entering_links = flowmodel.mkentrymap(graph)
 
         originalblocks = list(graph.iterblocks())
@@ -219,6 +220,7 @@
                                                              annmodel.s_None)
 
         self.insert_start_setup()
+        #print 'timeshift_graph END', graph
 
     def insert_start_setup(self):
         newstartblock = self.insert_before_block(self.graph.startblock, None, closeblock=True)



More information about the Pypy-commit mailing list