[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