[pypy-commit] lang-smalltalk default: Merge default
timfel
noreply at buildbot.pypy.org
Fri Mar 8 10:16:59 CET 2013
Author: Tim Felgentreff <timfelgentreff at gmail.com>
Branch:
Changeset: r142:189f3b3f83e5
Date: 2013-03-08 10:16 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/189f3b3f83e5/
Log: Merge default
diff --git a/.hgignore b/.hgignore
--- a/.hgignore
+++ b/.hgignore
@@ -1,3 +1,7 @@
syntax: glob
*.py[co]
*~
+pypy-c-jit-62116-b027d4428675-linux
+images/Squeak*
+targetimageloadingsmalltalk-c
+images/package-cache
diff --git a/images/minitest.image b/images/minitest.image
index 5753d32adc6e5ca83c6b7bf990258090ca1812d7..11fbf4e52f946020cefb4e771afc7a950f001596
GIT binary patch
[cut]
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -33,7 +33,7 @@
get_printable_location=get_printable_location
)
- def __init__(self, space, image=None, image_name="", max_stack_depth=500):
+ def __init__(self, space, image=None, image_name="", max_stack_depth=100):
self.space = space
self.image = image
self.image_name = image_name
@@ -72,10 +72,17 @@
s_new_context.push(nlr.value)
def c_loop(self, s_context):
+ # padding = ' ' * (self.max_stack_depth - self.remaining_stack_depth)
+ # print padding + s_context.short_str()
+ old_pc = 0
while True:
pc = s_context._pc
method = s_context.s_method()
-
+ if pc < old_pc:
+ self.jit_driver.can_enter_jit(
+ pc=pc, self=self, method=method,
+ s_context=s_context)
+ old_pc = pc
self.jit_driver.jit_merge_point(
pc=pc, self=self, method=method,
s_context=s_context)
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -532,6 +532,7 @@
self._temps_and_stack[ptr] = w_v
self._stack_ptr = ptr + 1
+ @jit.unroll_safe
def push_all(self, lst):
for elt in lst:
self.push(elt)
@@ -690,6 +691,10 @@
# A blockcontext doesn't have any temps
return 0
+ def short_str(self):
+ return 'BlockContext of %s (%i)' % (self.w_method().get_identifier_string(),
+ self.pc() + 1)
+
class MethodContextShadow(ContextPartShadow):
_attr_ = ['w_closure_or_nil', '_w_receiver', '__w_method']
@@ -836,6 +841,10 @@
retval += "\nStack : " + str(self.stack())
return retval
+ def short_str(self):
+ block = '[] of' if self.is_closure_context() else ''
+ return '%s %s (%i)' % (block, self.w_method().get_identifier_string(), self.pc() + 1)
+
class CompiledMethodShadow(object):
_immutable_fields_ = ["_w_self", "bytecode",
"literals[*]", "bytecodeoffset",
diff --git a/spyvm/test/jit.py b/spyvm/test/jit.py
--- a/spyvm/test/jit.py
+++ b/spyvm/test/jit.py
@@ -4,7 +4,7 @@
# view jit.
#
-import sys
+import sys, os
from rpython import conftest
class o:
view = False
@@ -15,8 +15,9 @@
from spyvm import model, interpreter, primitives, shadow
-from spyvm import objspace
+from spyvm import objspace, squeakimage
from spyvm.tool.analyseimage import create_squeakimage, create_testimage
+from rpython.rlib.streamio import open_file_as_stream
mockclass = objspace.bootstrap_class
@@ -46,7 +47,7 @@
# Tests
#
-# sys.setrecursionlimit(100000)
+sys.setrecursionlimit(5000)
class TestLLtype(LLJitMixin):
@@ -54,19 +55,12 @@
from spyvm import objspace
space = objspace.ObjSpace()
+
image = create_testimage(space)
interp = interpreter.Interpreter(space, image)
-
-
- counter = 0
-
- w_selector = interp.perform(space.wrap_string("loopTest"), "asSymbol")
- w_object = model.W_SmallInteger(0)
- s_class = w_object.shadow_of_my_class(space)
- s_method = s_class.lookup(w_selector)
- s_frame = s_method.create_frame(space, w_object, [])
-
+ w_selector = interp.perform(space.wrap_string('loopTest'), "asSymbol")
+ assert isinstance(w_selector, model.W_BytesObject)
def interp_w():
- interp.loop(s_frame.w_self())
+ interp.perform(model.W_SmallInteger(1000), w_selector)
self.meta_interp(interp_w, [], listcomp=True, listops=True, backendopt=True, inline=True)
diff --git a/targetimageloadingsmalltalk.py b/targetimageloadingsmalltalk.py
--- a/targetimageloadingsmalltalk.py
+++ b/targetimageloadingsmalltalk.py
@@ -11,10 +11,12 @@
def _run_benchmark(interp, number, benchmark):
w_object = model.W_SmallInteger(number)
try:
- interp.perform(w_object, benchmark)
+ w_result = interp.perform(w_object, benchmark)
except interpreter.ReturnFromTopLevel, e:
w_result = e.object
+ if w_result:
assert isinstance(w_result, model.W_BytesObject)
+ print '\n'
print w_result.as_string()
return 0
return -1
More information about the pypy-commit
mailing list