Exception handling question

Stephane Ducasse ducasse at iam.unibe.ch
Sun Aug 3 06:25:38 UTC 2003


roel have you had a look in VW for comparison?

Stef

On Sunday, August 3, 2003, at 12:58 AM, Roel Wuyts wrote:

> Hah, very interesting (I shortened the mail a bit so that the question 
> is on top again). Summarizing:
>
>> The most important point however is that Exception DOES NOT
>> handle Halt (in spite of the fact that Halt is a subclass of 
>> Exception.)
>
> Because of this rule I am into trouble.
> Can somebody motivate this decision (or whether it is an unintentional 
> bug)?
>
> On Saturday, Aug 2, 2003, at 23:35 Europe/Zurich, Boris Gaertner wrote:
>
>>
>> From: Roel Wuyts <wuyts at iam.unibe.ch>
>>
>>
>>> Hello,
>>> I am trying out some things under 3.6 (updated till #5373).
>>>
>>> The following statements did exactly what I thought they would:
>>>      [self error: 'an error'] on: Error do: [:exc | Transcript show: 
>>> exc
>>> class name; cr].
>>>      [self halt: 'a halt'] on: Halt do: [:exc | Transcript show: exc
>>> class name; cr].
>>> They print 'Error' and 'Halt' on the Transcript.
>>>
>>> But the following ones did not do what I expected:
>>>      [self error: 'an error'] on: Exception do: [:exc | Transcript 
>>> show:
>>> exc class name; cr].
>>>      [self halt: 'a halt'] on: Exception do: [:exc | Transcript show:
>>> exc class name; cr].
>>> It prints 'Error' and then (this is what I consider weird)
>>> 'UnhandledError' ?!
>>>
>> In Squeak 3.4 #5170  the statement in question  opens a Debugger.
>> The 'UnhandledError' comes from  Error>>defaultAction; a
>> method that was recently changed. (ajh 9/4/2002)
>>
>> Error>>defaultAction is sent from  Exception>>signal.
>> The most important point however is that Exception DOES NOT
>> handle Halt (in spite of the fact that Halt is a subclass of 
>> Exception.)
>> The code for this exception to the general rule is in
>> Exception class>>handles: exception   where we read:
>>
>> handles: exception
>>  "Determine whether an exception handler will accept a signaled 
>> exception."
>>
>>  (exception isKindOf: Halt) ifTrue: [^ false].
>>  ^ exception isKindOf: self
>>
>> Exceptions that are a kind of a Halt are handled by Halt, but not
>> by the superclasses (Error, Exception).
>> I cannot tell you the history of that exception to the general rule
>> that the more general exception should handle specialized
>> exceptions.
>>
>>
>>> I don't know enough to say whether this is a feature, a bug, or my
>>> complete misunderstanding :-) Can somebody enlighten me?
>>>
>> I do not think that it is a bug, but I cannot explain why the
>> feature is there. Does somebody know or remember?
>>
>> Greetings, Boris
>>
>>
>>
> Roel Wuyts                                                   Software 
> Composition Group
> roel.wuyts at iam.unibe.ch                       University of Bern, 
> Switzerland
> http://www.iam.unibe.ch/~wuyts/
> Board Member of the European Smalltalk User Group: www.esug.org
>
>



More information about the Squeak-dev mailing list