comp.lang.ada
 help / color / mirror / Atom feed
From: Martin Klaiber <martinkl@zedat.fu-berlin.de>
Subject: Re: Error-names.
Date: Sun, 29 Feb 2004 21:33:35 +0100
Date: 2004-02-29T21:33:35+01:00	[thread overview]
Message-ID: <vtu9h1-kq7.ln1@martinkl.dialup.fu-berlin.de> (raw)
In-Reply-To: 2Iq0c.15247$aT1.13123@newsread1.news.pas.earthlink.net

Jeffrey Carter <spam@spam.com> wrote:
> tmoran@acm.org wrote:

>>   subtype Exception_Codes is Interfaces.C.Int range -10 .. 1;

>>   Coded_Exception_List : constant array(Exception_Codes)
>>     := (Constraint_Error'Identity,
>>         Program_Error'Identity,
>>         Storage_Error'Identity,
>>         Tasking_Error'Identity,
>>         Ada.IO_Exceptions.Status_Error'Identity,
>>         Ada.IO_Exceptions.Mode_Error'Identity,
>>         Ada.IO_Exceptions.Name_Error'Identity,
>>         ...

>>   function Error_Code_Of(E : Ada.Exceptions.Exception_Occurrence)
>>   return Exception_Codes is
>>     use Ada.Exceptions;
>>   begin
>>     for i in Coded_Exception_List'range loop
>>       if Exception_Identity(E) = Coded_Exception_List(i) then
>>         return i;
>>       end if;
>>     end loop;
>>     raise; -- we have no code for this exception!  re-raise it
>>   end Error_Code_Of;

> This is pretty much what I would have suggested if Moran hadn't beat me 
> to it. However, I think you can't use "raise" here without an exception 
> name, since we're not necessarily in an exception handler. You could use 
> Ada.Exceptions.Raise_Exception (E), but I suspect what is really wanted, 
> based on the OP's earlier messages, is to return General_Error_Code.

Yes, General_Error_Code shall be a fallback in case there is no special
handler for a certain exception.  I implemented it like this:

    function Get_Error_Code (E : Exception_Occurrence) return C_Integer is
    begin
        if Exception_Identity (E) = Program_Error'Identity then
            return Program_Error_Code;
        elsif Exception_Identity (E) = Constraint_Error'Identity then
            return Constraint_Error_Code;
        elsif ...
            ...
        else
            return General_Error_Code;
        end if;
    end Get_Error_Code;

Not as elegant as Toms(?) code with the array but it works ok.

It's a pity that I can't use "case" instead of "if".  The compiler
moans that Exception_Id is not a discrete type.

Martin



  parent reply	other threads:[~2004-02-29 20:33 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-28 12:58 Error-names Martin Klaiber
2004-02-28 13:35 ` Error-names Martin Dowie
2004-02-28 15:26   ` Error-names Martin Klaiber
2004-02-28 17:19     ` Error-names Marius Amado Alves
2004-02-28 18:31       ` Error-names Martin Klaiber
2004-02-28 19:47         ` Error-names tmoran
2004-02-28 20:29           ` Error-names Martin Klaiber
2004-02-29 19:03           ` Error-names Jeffrey Carter
2004-02-29 20:04             ` Error-names tmoran
2004-02-29 23:24               ` Error-names Björn Persson
2004-03-01 11:29                 ` Error-names Martin Klaiber
2004-03-01 12:48                   ` Error-names Marius Amado Alves
2004-03-02  2:15                     ` Error-names Jeffrey Carter
2004-02-29 20:33             ` Martin Klaiber [this message]
2004-02-29 23:43               ` Error-names tmoran
2004-03-01 11:20                 ` Error-names Martin Klaiber
2004-03-07 15:10                   ` Error-names Björn Persson
2004-03-08  5:42                   ` Error-names Dave Thompson
2004-02-28 20:26         ` Error-names Jacob Sparre Andersen
2004-02-28 18:29 ` Error-names Alexandre E. Kopilovitch
2004-02-29  5:30 ` Error-names David Marceau
2004-02-29 12:17   ` Error-names Martin Klaiber
2004-02-29 19:56     ` Error-names David Marceau
2004-02-29 21:57       ` Error-names Martin Klaiber
2004-03-01 23:20       ` Error-names Randy Brukardt
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox