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

Reply via email to