On 04/11/2011 04:10 PM, Sven Van Caekenberghe wrote:
> Hi All,
> 
> I have this idea that I would like to discuss on the next Pharo sprint and 
> maybe start to implement if there is some consensus on it.
> 
> It has been mentioned many times before on this list that Object>>#error: 
> should be replaced by signalling specific Exceptions in as many cases as 
> possible (or where it makes sense). Even today, there was 
> http://code.google.com/p/pharo/issues/detail?id=3987 !
> 
> I think the core system should set the example here, by defining a number of 
> general purpose exceptions and by using them. Going over #error: senders will 
> be a lot of work but can be done in incremental/Pharo steps.
> 
> So I went over the current hierarchy, scanned quickly through their 
> references and some #error: senders by fundamental classes and looked at some 
> other Smalltalks. I came up with the following very rough draft of an 
> extended hierarchy (** marks new exceptions). In between brackets are the 
> instance variables. Of course, we have to discuss about naming, instance 
> variables and opportunities for reuse and inheritance (could be fun). 
> 
> I am no expert on exceptions and would certainly like to learn more. I am 
> probably overlooking some aspects. We have to keep this Smalltalk like, 
> flexible, dynamic, not start mimicing other languages. 
> 
> Any step in this direction will be an improvement over the current situation. 
> Really using them correctly throughout the system will take some time. 
> Defining the hierarchy could be done rather quickly. Refactoring is always 
> possible later on.
> 
> Exception (messageText)
>   Abort
>   Error
>     ArithemticError
>       ZeroDivide (dividend)   
>       FloatingPointException
>       RangeError ** (from, to)
>       NaNError **
>     FileStreamException (fileName)
>       FileDoesNotExistException (readOnly)
>       FileExistsException (fileClass)
>       CannotDeleteFileException
>       FileWriteError
>       FileReadError **
>       FileClosedException **
>       CannotAccessFileException **
>       ReadonlyFileException **
>     MessageNotUnderstood (message, receiver)
>     NonBooleanReceiver (object)
>     OutOfMemory
>     Halt
>       AssertionFailure
>       BreakPoint
>     SyntaxError ** !exists! (input, position)
>       NumberFormatException **
>     HeadlessError **
>     TimedOut ** (object, operation, timeout)
>     VerificationException
>     IllegalOperation ** (operation, object)
>     SizeMismatch (objects)
>     LowMemory ** (percentageFree)
>     SubclassResponsibility ** (message, receiver)
>     NotYetImplemented ** (message, receiver)
>     CannotInstanciate ** (class)
>     ReadOnlyObject ** (object)
>     OutOfFreeSpace ** (object, size)
>     InvalidArgument ** (message, receiver, argument)
>     NotIndexable ** (object)    
>     NoKeyedAccess ** (object)
>     NonIntegerIndex ** (receiver, index)
>     SubscriptOutOfBounds ** (receiver, index, from, to)
>     NotFoundException ** (receiver, object)
>       KeyNotFound **
>       ValueNotFound **
>       ElementNotFound **
>     StreamException (stream)
>       PositionError ** (index, from, to) 
>       EndOfStream **
>       BeginOfStream ** 
> 
> All feedback is welcome.

PrimitiveFailed for #primitiveFailed would be nice as well.

Cheers
Philippe


Reply via email to