comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: stopping a loop iteration without exiting it
Date: Fri, 5 Jan 2018 09:38:40 +0100
Date: 2018-01-05T09:38:40+01:00	[thread overview]
Message-ID: <p2ndih$pmk$1@gioia.aioe.org> (raw)
In-Reply-To: fb7qfdFnt9dU1@mid.individual.net

On 2018-01-05 00:08, Niklas Holsti wrote:
> On 18-01-04 23:17 , Dmitry A. Kazakov wrote:
> 
>     [snip]
> 
>> I thought about really important cases, but could not invent syntax:
>>
>>    if X in T'Class then
>>       declare
>>          Same_X : T'Class renames T'Class (X);
>>       begin
>>          ...
>>       end;
>>    end if;
> 
> A syntax suggestion, drawing on analogy with exception handlers:
> 
>     case X is
>     when Same_X : T'Class =>
>        ...
>     when Same_X : U'Class =>  -- other named classes
>        ...
>     when others =>  -- always required
>        ...
>     end case;
> 
> This would be legal only if no two classes in the "whens" are related 
> with "in", so that at most one "when S'Class" matches X.

It looks nice, but is inconsistent, at least logically. T'Class and 
U'Class always overlap. Differently to this case, which is logically OK:

    case X'Tag is  -- Tag to denote "type"?
       when Same_X : T =>
          ...
       when Same_X : U =>  -- other instances
          ...
       when others =>  -- always required
          ...
    end case;

>>    if P /= null then
>>       declare
>>          X : P_Type renames P.all;
>>       begin
>>          ...
>>       end;
>>    end if;
> 
> Similarly, applying an implicit dereference to the selecting expression 
> when it has an access type:
> 
>     case P is
>     when X : P_Type =>
>        ...
>     when null =>  -- or "when others =>"
>        ...
>     end case;

But as heavy weight as if-declare ...

However the idea of re-using exception handler style declarations could 
be very helpful in general cases. For example this is very frequent in 
parsers and protocol handlers:

    declare
       Symbol : constant Character := Get_Character;
    begin
       case Symbol is
          when '0'..'9' =>
             -- Process digit
          when 'A'..'Z' | 'a'..'z' =>
             -- Process letter

Much better this:

    case Get_Character is
       when Digit : '0'..'9' =>
          -- Process digit
       when Letter : 'A'..'Z' | 'a'..'z' =>
          -- Process letter

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de


  reply	other threads:[~2018-01-05  8:38 UTC|newest]

Thread overview: 80+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-01-03 16:54 stopping a loop iteration without exiting it Mehdi Saada
2018-01-03 17:23 ` Lucretia
2018-01-03 21:19   ` Randy Brukardt
2018-01-03 23:17     ` Robert A Duff
2018-01-04  8:47       ` Niklas Holsti
2018-01-05  1:31         ` Randy Brukardt
2018-01-04 10:08       ` Jeffrey R. Carter
2018-01-04 11:02         ` Dmitry A. Kazakov
2018-01-04 19:46           ` Robert A Duff
2018-01-04 20:47             ` Mehdi Saada
2018-01-04 21:17             ` Dmitry A. Kazakov
2018-01-04 23:08               ` Niklas Holsti
2018-01-05  8:38                 ` Dmitry A. Kazakov [this message]
2018-01-06 16:50                   ` Niklas Holsti
2018-01-06 17:20                     ` Dmitry A. Kazakov
2018-01-07 11:36                       ` Niklas Holsti
2018-01-07 12:05                         ` Dmitry A. Kazakov
2018-01-07 21:22                           ` Niklas Holsti
2018-01-08  8:35                             ` Dmitry A. Kazakov
2018-01-08 20:57                       ` Randy Brukardt
2018-01-08 21:19                         ` Dmitry A. Kazakov
2018-01-08 21:48                           ` Submitting requests to the ARG, was: " Simon Clubley
2018-01-09  9:45                             ` Dmitry A. Kazakov
2018-01-08 22:35                         ` Jeffrey R. Carter
2018-01-05 16:34               ` Robert A Duff
2018-01-05 19:09                 ` G. B.
2018-01-07 11:52               ` Niklas Holsti
2018-01-07 12:27                 ` Dmitry A. Kazakov
2018-01-06  0:53           ` Keith Thompson
2018-01-06  8:36             ` Dmitry A. Kazakov
2018-01-06  8:49               ` gautier_niouzes
2018-01-06  9:26                 ` Dmitry A. Kazakov
2018-01-08 11:05                 ` mockturtle
2018-01-09 11:05               ` AdaMagica
2018-01-09 11:26                 ` Dmitry A. Kazakov
2018-01-09 12:50                   ` Simon Wright
2018-01-09 13:07                     ` Dmitry A. Kazakov
2018-01-09 13:47                       ` Dennis Lee Bieber
2018-01-09 14:53                         ` Dmitry A. Kazakov
2018-01-09 20:07                           ` G. B.
2018-01-10  8:13                             ` Dmitry A. Kazakov
2018-01-10 21:14                               ` G. B.
2018-01-11 12:48                                 ` AdaMagica
2018-01-11 20:54                                   ` G. B.
2018-01-11 13:06                                 ` Dmitry A. Kazakov
2018-01-11 17:11                                   ` Simon Wright
2018-01-11 17:30                                     ` Dmitry A. Kazakov
2018-01-11 18:09                                       ` Simon Wright
2018-01-11 20:54                                   ` G. B.
2018-01-12  8:20                                     ` Dmitry A. Kazakov
2018-01-12  9:22                                       ` G. B.
2018-01-12  9:42                                         ` Dmitry A. Kazakov
2018-01-10 10:52                       ` AdaMagica
2018-01-10 11:14                         ` Dmitry A. Kazakov
2018-01-10 11:21                           ` AdaMagica
2018-01-10 13:47                             ` Dmitry A. Kazakov
2018-01-04 21:52         ` Mart van de Wege
2018-01-05 13:17           ` Jeffrey R. Carter
2018-01-05 14:35             ` Mart van de Wege
2018-01-05 15:21               ` Jeffrey R. Carter
2018-01-05 19:13                 ` Paul Rubin
2018-01-05 23:50                   ` Randy Brukardt
2018-01-06  1:19                   ` G. B.
2018-01-06  9:59                   ` Jeffrey R. Carter
2018-01-05  1:17         ` Randy Brukardt
2018-01-05 14:05           ` Jeffrey R. Carter
2018-01-05 23:58             ` Randy Brukardt
2018-01-04 12:43     ` gautier_niouzes
2018-01-03 17:28 ` Jeffrey R. Carter
2018-01-03 18:27 ` Mehdi Saada
2018-01-06  0:26 ` Matt Borchers
2018-01-06 22:04   ` J-P. Rosen
2018-01-07  2:05     ` Matt Borchers
2018-01-08 20:49   ` Randy Brukardt
2018-01-07 11:33 ` Mehdi Saada
2018-01-07 11:45   ` Simon Wright
2018-01-08  0:58   ` Matt Borchers
2018-01-07 17:47 ` Micah Waddoups
2018-01-07 21:04   ` Simon Wright
2018-01-23  3:49 ` Robert Eachus
replies disabled

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