[pypy-commit] lang-smalltalk storage: Changed the receiver of top-level methods (executed with -r) to nil (like a DoIt in the workspace).
anton_gulenko
noreply at buildbot.pypy.org
Wed May 7 21:16:21 CEST 2014
Author: Anton Gulenko <anton.gulenko at googlemail.com>
Branch: storage
Changeset: r809:6b8d21d604c3
Date: 2014-05-07 16:43 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/6b8d21d604c3/
Log: Changed the receiver of top-level methods (executed with -r) to nil
(like a DoIt in the workspace).
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -108,7 +108,7 @@
self.step(s_context)
except Return, nlr:
if nlr.s_target_context is not s_context:
- if not s_context.is_closure_context() and s_context.w_method().primitive() == 198:
+ if not s_context.is_closure_context() and method.primitive() == 198:
s_context.activate_unwind_context(self)
s_context.mark_returned()
raise nlr
@@ -201,18 +201,19 @@
"asSymbol")
else:
w_selector = selector
-
+
w_method = model.W_CompiledMethod(self.space, header=512)
w_method.literalatput0(self.space, 1, w_selector)
assert len(arguments_w) <= 7
w_method.setbytes([chr(131), chr(len(arguments_w) << 5 + 0), chr(124)]) #returnTopFromMethod
+ w_method.set_lookup_class_and_name(w_receiver.getclass(self.space), "Interpreter.perform")
s_frame = MethodContextShadow(self.space, None, w_method, w_receiver, [])
s_frame.push(w_receiver)
s_frame.push_all(list(arguments_w))
-
+
self.interrupt_check_counter = self.interrupt_counter_size
return self.interpret_toplevel(s_frame.w_self())
-
+
class ReturnFromTopLevel(Exception):
_attrs_ = ["object"]
def __init__(self, object):
diff --git a/spyvm/test/jit.py b/spyvm/test/jit.py
--- a/spyvm/test/jit.py
+++ b/spyvm/test/jit.py
@@ -52,7 +52,7 @@
s_frame = shadow.MethodContextShadow(space, None, w_method, w_receiver, [])
w_frame = s_frame.w_self()
def interp_execute_frame():
- return interp.loop(w_frame)
+ return interp.interpret_toplevel(w_frame)
return interp_execute_frame
# ==== The following will pre-load images and build a jit based on methods from the entry-point module
diff --git a/targetimageloadingsmalltalk.py b/targetimageloadingsmalltalk.py
--- a/targetimageloadingsmalltalk.py
+++ b/targetimageloadingsmalltalk.py
@@ -68,26 +68,29 @@
def _run_code(interp, code, as_benchmark=False):
import time
- selector = "codeTest%d" % int(time.time())
+ selector = "DoIt%d" % int(time.time())
space = interp.space
+ w_receiver = space.w_nil
+ w_receiver_class = w_receiver.getclass(space)
try:
w_result = interp.perform(
- space.w_SmallInteger,
+ w_receiver_class,
"compile:classified:notifying:",
space.wrap_string("%s\r\n%s" % (selector, code)),
space.wrap_string("spy-run-code"),
space.w_nil
)
+ w_receiver_class.as_class_get_shadow(space).s_methoddict().sync_method_cache()
except interpreter.ReturnFromTopLevel, e:
print e.object
return 1
except error.Exit, e:
print e.msg
return 1
-
+
if not as_benchmark:
try:
- w_result = interp.perform(space.wrap_int(0), selector)
+ w_result = interp.perform(w_receiver, selector)
except interpreter.ReturnFromTopLevel, e:
print e.object
return 1
More information about the pypy-commit
mailing list