[pypy-commit] lang-smalltalk storage: Changed perform/create_toplevel_context methods of interpreter to work better with RPython.
anton_gulenko
noreply at buildbot.pypy.org
Thu Jul 10 12:56:51 CEST 2014
Author: Anton Gulenko <anton.gulenko at googlemail.com>
Branch: storage
Changeset: r874:01a714785a05
Date: 2014-07-07 17:35 +0200
http://bitbucket.org/pypy/lang-smalltalk/changeset/01a714785a05/
Log: Changed perform/create_toplevel_context methods of interpreter to
work better with RPython.
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -211,20 +211,18 @@
except ReturnFromTopLevel, e:
return e.object
- def perform(self, w_receiver, selector, *w_arguments):
- s_frame = self.create_toplevel_context(w_receiver, selector, *w_arguments)
+ def perform(self, w_receiver, selector="", w_selector=None, w_arguments=[]):
+ s_frame = self.create_toplevel_context(w_receiver, selector, w_selector, w_arguments)
self.interrupt_check_counter = self.interrupt_counter_size
return self.interpret_toplevel(s_frame.w_self())
- def create_toplevel_context(self, w_receiver, selector, *w_arguments):
- if isinstance(selector, str):
+ def create_toplevel_context(self, w_receiver, selector="", w_selector=None, w_arguments=[]):
+ if w_selector is None:
+ assert selector, "Need either string or W_Object selector"
if selector == "asSymbol":
w_selector = self.image.w_asSymbol
else:
- w_selector = self.perform(self.space.wrap_string(selector),
- "asSymbol")
- else:
- w_selector = selector
+ w_selector = self.perform(self.space.wrap_string(selector), "asSymbol")
w_method = model.W_CompiledMethod(self.space, header=512)
w_method.literalatput0(self.space, 1, w_selector)
diff --git a/spyvm/test/jit.py b/spyvm/test/jit.py
--- a/spyvm/test/jit.py
+++ b/spyvm/test/jit.py
@@ -36,7 +36,7 @@
def preload_perform(imagename, receiver, selector, *args):
interp = load(imagename)
def interp_miniloop():
- return interp.perform(receiver, selector, *args)
+ return interp.perform(receiver, selector, w_arguments=list(args))
return interp_miniloop
# This will build a jit executing a synthetic method composed of the given bytecodes and literals,
diff --git a/spyvm/test/test_largeinteger.py b/spyvm/test/test_largeinteger.py
--- a/spyvm/test/test_largeinteger.py
+++ b/spyvm/test/test_largeinteger.py
@@ -7,7 +7,6 @@
def setup_module():
space, interp, _, _ = read_image('bootstrapped.image')
w = space.w
- perform = interp.perform
copy_to_module(locals(), __name__)
interp.trace = False
space.initialize_class(space.w_String, interp)
diff --git a/spyvm/test/test_miniimage.py b/spyvm/test/test_miniimage.py
--- a/spyvm/test/test_miniimage.py
+++ b/spyvm/test/test_miniimage.py
@@ -5,7 +5,10 @@
def setup_module():
space, interp, image, reader = read_image("mini.image")
w = space.w
- perform = interp.perform
+ def perform_wrapper(receiver, selector, *args):
+ w_selector = None if isinstance(selector, str) else selector
+ return interp.perform(receiver, selector, w_selector, list(args))
+ perform = perform_wrapper
copy_to_module(locals(), __name__)
def teardown_module():
@@ -191,7 +194,7 @@
w_abs = interp.perform(interp.space.w("abs"), "asSymbol")
for value in [10, -3, 0]:
w_object = model.W_SmallInteger(value)
- w_res = interp.perform(w_object, w_abs)
+ w_res = interp.perform(w_object, w_selector=w_abs)
assert w_res.value == abs(value)
def test_lookup_abs_in_integer():
diff --git a/spyvm/test/util.py b/spyvm/test/util.py
--- a/spyvm/test/util.py
+++ b/spyvm/test/util.py
@@ -266,5 +266,5 @@
def initialize_class(self, w_class, interp):
initialize_symbol = find_symbol_in_methoddict_of("initialize",
w_class.class_shadow(self))
- interp.perform(w_class, initialize_symbol)
+ interp.perform(w_class, w_selector=initialize_symbol)
\ No newline at end of file
More information about the pypy-commit
mailing list