Author: Lars Wassermann <lars.wasserm...@gmail.com> Branch: Changeset: r292:0cff3f71df5a Date: 2013-04-17 17:11 +0200 http://bitbucket.org/pypy/lang-smalltalk/changeset/0cff3f71df5a/
Log: merge the different approaches to exiting using a new exception: Exit implemented Quit-Primitive (139) diff --git a/spyvm/display.py b/spyvm/display.py --- a/spyvm/display.py +++ b/spyvm/display.py @@ -80,9 +80,8 @@ else: pass # XXX: Todo? elif c_type == RSDL.QUIT: - from spyvm.interpreter import ReturnFromTopLevel - print "Window closed.." - raise SystemExit() + from spyvm.error import Exit + raise Exit("Window closed..") finally: lltype.free(event, flavor='raw') diff --git a/spyvm/error.py b/spyvm/error.py --- a/spyvm/error.py +++ b/spyvm/error.py @@ -24,4 +24,8 @@ self.msg = msg class BlockCannotReturnError(SmalltalkException): - pass \ No newline at end of file + pass + +class Exit(Exception): + def __init__(self, msg): + self.msg = msg diff --git a/spyvm/primitives.py b/spyvm/primitives.py --- a/spyvm/primitives.py +++ b/spyvm/primitives.py @@ -325,10 +325,9 @@ @expose_primitive(FAIL) def func(interp, s_frame, argcount): - from spyvm.interpreter import ReturnFromTopLevel + from spyvm.error import Exit if s_frame.w_method()._likely_methodname == 'doesNotUnderstand:': - print 'Probably Debugger called...' - raise ReturnFromTopLevel(interp.space.wrap_string("debugger called")) + raise Exit('Probably Debugger called...') raise PrimitiveFailedError() # ___________________________________________________________________________ @@ -743,10 +742,14 @@ @expose_primitive(QUIT, unwrap_spec=[object]) def func(interp, s_frame, w_rcvr): - raise PrimitiveNotYetWrittenError() + from spyvm.error import Exit + raise Exit('Quit-Primitive called..') @expose_primitive(EXIT_TO_DEBUGGER, unwrap_spec=[object]) def func(interp, s_frame, w_rcvr): + from rpython.rlib import objectmodel + if not objectmodel.we_are_translated(): + import pdb; pdb.set_trace() raise PrimitiveNotYetWrittenError() @expose_primitive(CHANGE_CLASS, unwrap_spec=[object, object], no_result=True) diff --git a/targetimageloadingsmalltalk.py b/targetimageloadingsmalltalk.py --- a/targetimageloadingsmalltalk.py +++ b/targetimageloadingsmalltalk.py @@ -4,7 +4,8 @@ from rpython.rlib.streamio import open_file_as_stream from rpython.rlib import jit -from spyvm import model, interpreter, squeakimage, objspace, wrapper, model +from spyvm import model, interpreter, squeakimage, objspace, wrapper, model, \ + error from spyvm.tool.analyseimage import create_image @@ -15,6 +16,8 @@ w_result = interp.perform(w_object, benchmark) except interpreter.ReturnFromTopLevel, e: w_result = e.object + except error.Exit, e: + print e.msg t2 = time.time() if w_result: if isinstance(w_result, model.W_BytesObject): @@ -30,7 +33,10 @@ w_ctx = ap.suspended_context() assert isinstance(w_ctx, model.W_PointersObject) ap.store_suspended_context(space.w_nil) - interp.interpret_with_w_frame(w_ctx) + try: + interp.interpret_with_w_frame(w_ctx) + except error.Exit, e: + print e.msg return 0 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit