[pypy-commit] lang-smalltalk storage: pull checking for BlockContext>>ensure: primitive into the shadows
timfel
noreply at buildbot.pypy.org
Thu Jul 10 16:58:32 CEST 2014
Author: Tim Felgentreff <timfelgentreff at gmail.com>
Branch: storage
Changeset: r890:6998efebafd6
Date: 2014-07-10 16:58 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/6998efebafd6/
Log: pull checking for BlockContext>>ensure: primitive into the shadows
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -748,9 +748,7 @@
# ====== Misc ======
def _activate_unwind_context(self, interp):
- # TODO put the constant somewhere else.
- # Primitive 198 is used in BlockClosure >> ensure:
- if self.is_closure_context() or self.w_method().primitive() != 198:
+ if self.is_closure_context() or not self.is_BlockClosure_ensure():
self.mark_returned()
return
# The first temp is executed flag for both #ensure: and #ifCurtailed:
diff --git a/spyvm/shadow.py b/spyvm/shadow.py
--- a/spyvm/shadow.py
+++ b/spyvm/shadow.py
@@ -777,6 +777,9 @@
def is_closure_context(self):
raise NotImplementedError()
+ def is_BlockClosure_ensure(self):
+ raise NotImplementedError()
+
def home_is_self(self):
raise NotImplementedError()
@@ -998,6 +1001,9 @@
def is_closure_context(self):
return True
+ def is_BlockClosure_ensure(self):
+ return False
+
def home_is_self(self):
return False
@@ -1080,7 +1086,7 @@
return '[] in %s' % self.w_method().get_identifier_string()
class MethodContextShadow(ContextPartShadow):
- _attrs_ = ['closure', '_w_receiver', '_w_method']
+ _attrs_ = ['closure', '_w_receiver', '_w_method', '_is_BlockClosure_ensure']
repr_classname = "MethodContextShadow"
# === Initialization ===
@@ -1102,6 +1108,7 @@
self.init_stack_and_temps()
else:
self._w_method = None
+ self._is_BlockClosure_ensure = False
argc = len(arguments)
for i0 in range(argc):
@@ -1174,6 +1181,9 @@
def store_w_method(self, w_method):
assert isinstance(w_method, model.W_CompiledMethod)
self._w_method = w_method
+ if w_method:
+ # Primitive 198 is used in BlockClosure >> ensure:
+ self._is_BlockClosure_ensure = (w_method.primitive() == 198)
def w_receiver(self):
return self._w_receiver
@@ -1192,6 +1202,9 @@
def is_closure_context(self):
return self.closure is not None
+ def is_BlockClosure_ensure(self):
+ return self._is_BlockClosure_ensure
+
def home_is_self(self):
return not self.is_closure_context()
diff --git a/spyvm/test/jittest/base.py b/spyvm/test/jittest/base.py
--- a/spyvm/test/jittest/base.py
+++ b/spyvm/test/jittest/base.py
@@ -18,7 +18,7 @@
def run(self, spy, tmpdir, code):
logfile = str(tmpdir.join("x.pypylog"))
proc = subprocess.Popen(
- [str(spy), "-r", code.replace("\n", "\r\n"), BenchmarkImage],
+ [str(spy), BenchmarkImage, "-r", code.replace("\n", "\r\n")],
cwd=str(tmpdir),
env={"PYPYLOG": "jit-log-opt:%s" % logfile,
"SDL_VIDEODRIVER": "dummy"}
More information about the pypy-commit
mailing list