Author: Tim Felgentreff <timfelgentr...@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"} _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit