[pypy-commit] lang-smalltalk default: merge the different approaches to exiting using a new exception: Exit
lwassermann
noreply at buildbot.pypy.org
Wed Apr 17 18:27:49 CEST 2013
Author: Lars Wassermann <lars.wassermann at 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
More information about the pypy-commit
mailing list