[pypy-svn] r61963 - pypy/branch/pyjitpl5/pypy/jit/tl

fijal at codespeak.net fijal at codespeak.net
Tue Feb 17 10:04:23 CET 2009


Author: fijal
Date: Tue Feb 17 10:04:22 2009
New Revision: 61963

Modified:
   pypy/branch/pyjitpl5/pypy/jit/tl/tlc.py
Log:
a bit weird - attach framestack to virtualizable to promise
noone from the outside is playing with our framestack


Modified: pypy/branch/pyjitpl5/pypy/jit/tl/tlc.py
==============================================================================
--- pypy/branch/pyjitpl5/pypy/jit/tl/tlc.py	(original)
+++ pypy/branch/pyjitpl5/pypy/jit/tl/tlc.py	Tue Feb 17 10:04:22 2009
@@ -224,11 +224,17 @@
         self.args  = args
         self.pc    = pc
         self.stack = []
+
+class Framestack(object):
+    _virtualizable2_ = True
+
+    def __init__(self):
+        self.s = []
         
 def make_interp(supports_call, jitted=True):
     myjitdriver = JitDriver(greens = ['code', 'pc'],
                             reds = ['frame', 'framestack', 'pool'],
-                            virtualizables = ['frame'])
+                            virtualizables = ['frame', 'framestack'])
     def interp(code='', pc=0, inputarg=0, pool=None):
         if not isinstance(code,str):
             raise TypeError("code '%s' should be a string" % str(code))
@@ -240,7 +246,7 @@
 
     def interp_eval(code, pc, args, pool):
         assert isinstance(pc, int)
-        framestack = []
+        framestack = Framestack()
         frame = Frame(args, pc)
         pc = frame.pc
 
@@ -378,18 +384,18 @@
                 offset = char2int(code[pc])
                 pc += 1
                 frame.pc = pc
-                framestack.append(frame)
+                framestack.s.append(frame)
                 frame = Frame([zero], pc + offset)
                 pc = frame.pc
 
             elif opcode == RETURN:
-                if not framestack:
+                if not framestack.s:
                     break
                 if stack:
                     res = stack.pop()
                 else:
                     res = None
-                frame = framestack.pop()
+                frame = framestack.s.pop()
                 stack = frame.stack
                 pc = frame.pc
                 if res:
@@ -438,7 +444,7 @@
                 a = meth_args[0]
                 meth_pc = a.send(name)
                 frame.pc = pc
-                framestack.append(frame)
+                framestack.s.append(frame)
                 frame = Frame(meth_args, meth_pc)
                 pc = meth_pc
 



More information about the Pypy-commit mailing list