Why is IllegalResumeAttempt not an Error?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Why is IllegalResumeAttempt not an Error?

Christoph Thiede

Hi all!


I was just wondering why IllegalResumeAttempt is not an error. An IllegalResumeAttempt is signaled when you try to #resume from an exception that is not resumable.


In my opinion, this should pretty clearly be an Error. Just like "nil + 1", "#() at: 0", or "'hello' at: 1 put: $H", the programmer is trying to perform an illegal operation so the EHS notices this error. Why should "Error new resume" (pseudo, of course) not be an Error?


I could imagine that in ancient days, when nested exception handling did not yet work as flawlessly as today (thanks Jaromir and Nicolas for all the work on this field!), the original designers tried to prevent the case in which a second exception was handled on the stack. Nevertheless, this limitation does not exist any longer today. It would not even be a problem (although not a recommended pattern) to say something like:


[self error + 1]
    on: Error
    do: [:ex1 |
        [ex1 resume: 42]
            on: IllegalResumeAttempt
            do: [:ex2 |
                "Well, then return instead"
                ex1 return: 42] ].

So why don't we just go and make IllegalResumeAttempt an Error? Its defaultAction is already completely compatible.

Best,
Christoph



Carpe Squeak!
Reply | Threaded
Open this post in threaded view
|

Re: Why is IllegalResumeAttempt not an Error?

Jaromir Matas
Hi Christoph,

There's a funny method under IllegalResumeAttempt:

#readMe

        "Never handle this exception!"

Author: The Fourth Estate, Inc., 1999

I can't see anything wrong with your example, the logic is clean so I'm very
curious what more experienced people have to say :)


Christoph Thiede wrote

> It would not even be a problem (although not a recommended pattern) to say
> something like:
>
>
> [self error + 1]
>     on: Error
>     do: [:ex1 |
>         [ex1 resume: 42]
>             on: IllegalResumeAttempt
>             do: [:ex2 |
>                 "Well, then return instead"
>                 ex1 return: 42] ].

best,



-----
^[^ Jaromir
--
Sent from: http://forum.world.st/Squeak-Dev-f45488.html

^[^ Jaromir