Author: Anton Gulenko <anton.gule...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit