sven did you get a look at issue 3999 since camillo started. http://code.google.com/p/pharo/issues/detail?id=3999
Stef On Apr 11, 2011, at 4: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. > > Regards, > > Sven > > >
