Exceptions

    Green supports not only exception as objects but also catch objects responsible to catch thrown exceptions making the exception system completely object oriented.

    We will present the Green exception system using an example. In Java, we would use

try {
  makeJuice();
}
catch ( BananaException exc ) {
  ...
}
catch ( FruitException exc ) {
  ...
}

to catch exceptions thrown by makeJuice which should have been declared as
     void makeJuice()
          throws FruitException, BananaException;

In Green, this code is written as

catch = CatchFruitBananaException.new();
try(catch)
  makeJuice();
end

in which makeJuice is declared as

     proc makeJuice()
                   ( exception : CatchFruitBananaException )

and CatchFruitBananaException declared as

class CatchFruitBananaException subclassOf CatchUncheckedException
  public:
    proc throw( x : FruitException )
      begin
      ...
      end
    proc throw( x : BananaException )
      begin
      ...
      end
end

    The exception treatment should be put in the throw methods. If an exception is thrown inside makeJuice, a message throw is sent to object catch that treats the exception. An exception is thrown by sending a message to exception:
     exception.throw( FruitException.new() );

    The previous example might have been written as follows if the method bodies of CatchFruitBananaException were empty. That is, the exception treatment is put in the case statement.

try( catch = CatchFruitBananaException.new() )
  makeJuice();
end
case catch.getClassException() of
  FruitException :
    begin
    ...
    end
  BananaException :
    begin
    ...
    end
end { case }

The hierarchy of predefined Green exceptions is in the table that follows.
 
 
Exception
  TypeErrorException
  WrongParametersException
  NotFoundException
  PackedException
  TooManyDimensionsException
  
  MetaException
    ClassNotInAllowedSetException
    NoShellException
    NoExtensionException
    
  UncheckedException
    StackOverflowException
    IllegalArrayIndexException
    OutOfMemoryException
    InternalErrorException
    MessageSendToNilException
    
    NoReflectiveInfoException
      NoReflectiveBodyInfoException
      NoReflectiveCallInfoException
      
    ArithmeticException
      DivisionByZeroException
      RealOverflowException
      RealUnderflowException

    AssertionException
      AssertionAfterException
      AssertionBeforeException
      AssertionCastCharException
      AssertionCastBooleanException
      AssertionCastByteException
      AssertionCastIntegerException
      AssertionCastLongException
      AssertionCastRealException
      AssertionCastDoubleException
 

Hierarchy of predefined Green Exceptions

 

What is new ?

    The whole power of object-oriented programming is brought to the exception system:


Return