I think this is because Magritte makes very demanding use of exceptions.
It might be that Squeak and GNU Smalltalk behave in a different way.
Can you try filing in the attached class and then evaluating:
{TestError new resumableTest: #halt outerHandler: #yourself.
TestError new resumableTest: #halt outerHandler: #resume.
TestError new beResumable; resumableTest: #pass outerHandler: #yourself.
TestError new beResumable; resumableTest: #pass outerHandler: #resume.
TestError new beResumable; resumableTest: #outer outerHandler: #yourself.
TestError new beResumable; resumableTest: #outer outerHandler: #resume.
TestError new beResumable; resumableTest: #resumeOuter outerHandler:
#yourself.
TestError new beResumable; resumableTest: #resumeOuter outerHandler:
#resume}
under Squeak?
Thanks,
Paolo
Error subclass: #TestError
instanceVariableNames: 'resumable'
classVariableNames: ''
poolDictionaries: ''
category: ''!
!TestError methodsFor: 'testing'!
isResumable
^resumable ifNil: [ false ]
!
beResumable
resumable := true
!
description
^'test'
!
resumeOuter
self resume: self outer
!
resumableTest: ifResumableSymbol outerHandler: outerHandlerSymbol
[[ self signal. ^true ]
on: TestError
do: [ :err |
err isResumable
ifTrue: [err perform: ifResumableSymbol]
ifFalse: [err beResumable; signal]]]
on: TestError
do: [ :err | err perform: outerHandlerSymbol ].
^false
! !
_______________________________________________
help-smalltalk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-smalltalk