From: "Yannick Duchêne (Hibou57)" <yannick_duchene@yahoo.fr>
Subject: Re: Generic-Package Elaboration Question / Possible GNAT Bug.
Date: Wed, 23 Nov 2011 04:13:29 +0100
Date: 2011-11-23T04:13:29+01:00 [thread overview]
Message-ID: <op.v5dpwrkzule2fv@douda-yannick> (raw)
In-Reply-To: 7bf9bc32-850a-40c6-9ae2-5254fe220533@f29g2000yqa.googlegroups.com
A guess attempt: does not depend on Generic_Delete implementation, but
rather on a Generic_Delete instantiation parameters. If you could post the
instantiation snippet too… (with declarations it depends on).
Le Sat, 19 Nov 2011 22:14:44 +0100, Shark8 <onewingedshark@gmail.com> a
écrit:
> I was working on some simple little array manipulation functions when
> I encountered an interesting behavior in the compiler; it said that
> trying to instantiate a function of the form:
> Generic
> Type Element is Private;
> Type Index_Type is (<>);
> Type Array_Type is Array (Index_Type Range <>) of Element;
> Function Generic_Delete( Index : In Index_Type; Data : In
> Array_Type ) Return Array_Type;
>
> When given the following body, the compiler complained about the
> Index_Range'First/Last not being static:
>
> Function Generic_Delete( Index : In Index_Type; Data : In
> Array_Type ) Return Array_Type is
> begin
> if Index not in Data'Range then
> Raise Constraint_Error;
> else
> case Index is
> when Index_Type'First => Return
> Data( Index_Type'Succ(Index)..Data'Last );
> when Index_Type'Last => Return
> Data( Data'First..Index_Type'Pred(Index) );
> when others =>
> Return Data( Data'First..Index_Type'Pred(Index) )
> & Data( Index_Type'Succ(Index)..Data'Last );
> end case;
> end if;
> end Generic_Delete;
>
> Now, I know that the following works as a fix:
>
> Function Generic_Delete( Index : In Index_Type; Data : In
> Array_Type ) Return Array_Type is
> begin
> if Index not in Data'Range then
> Raise Constraint_Error;
> else
> if Index = Data'First then
> Return Data( Index_Type'Succ(Index)..Data'Last );
> elsif Index = Data'Last then
> Return Data( Data'First..Index_Type'Pred(Index) );
> else
> Return Data( Data'First..Index_Type'Pred(Index) )
> & Data( Index_Type'Succ(Index)..Data'Last );
> end if;
> end if;
> end Generic_Delete;
>
> But the question that came to my mind after reading the ARM section on
> the error (sorry, I forgot to write it down) is, why is it not static?
> Is it because though the elaboration-parameters *may* be known [and
> static] at compile-time that some instantiation might NOT be
> [guaranteed] to be known at compile-time? (i.e. because the compiler
> cannot guarantee that you won't throw 1..N where N is something pulled
> from the user-input?)
--
“Syntactic sugar causes cancer of the semi-colons.” [Epigrams on
Programming — Alan J. — P. Yale University]
“Structured Programming supports the law of the excluded muddle.” [Idem]
next prev parent reply other threads:[~2011-11-23 3:13 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-19 21:14 Generic-Package Elaboration Question / Possible GNAT Bug Shark8
2011-11-19 22:12 ` Robert A Duff
2011-11-19 23:36 ` Shark8
2011-11-20 9:55 ` Dmitry A. Kazakov
2011-11-21 7:25 ` AdaMagica
2011-11-21 8:43 ` Dmitry A. Kazakov
2011-11-21 10:25 ` AdaMagica
2011-11-21 13:08 ` Robert A Duff
2011-11-21 13:50 ` Dmitry A. Kazakov
2011-11-21 19:41 ` Robert A Duff
2011-11-22 8:21 ` Dmitry A. Kazakov
2011-11-21 20:40 ` J-P. Rosen
2011-11-22 8:29 ` Dmitry A. Kazakov
2011-11-22 10:25 ` Georg Bauhaus
2011-11-22 14:32 ` Dmitry A. Kazakov
2011-11-22 15:02 ` Georg Bauhaus
2011-11-22 16:23 ` Dmitry A. Kazakov
2011-11-22 17:46 ` Georg Bauhaus
2011-11-22 19:15 ` Dmitry A. Kazakov
2011-11-22 21:03 ` Randy Brukardt
2011-11-22 21:26 ` Dmitry A. Kazakov
2011-11-23 0:07 ` Georg Bauhaus
2011-11-23 8:44 ` Dmitry A. Kazakov
2011-11-23 9:32 ` Simon Wright
2011-11-23 9:56 ` Dmitry A. Kazakov
2011-11-23 11:03 ` Georg Bauhaus
2011-11-23 11:13 ` Dmitry A. Kazakov
2011-11-23 11:25 ` Georg Bauhaus
2011-11-23 13:14 ` Dmitry A. Kazakov
2011-11-23 13:59 ` Georg Bauhaus
2011-11-23 14:43 ` Dmitry A. Kazakov
2011-11-23 16:10 ` Georg Bauhaus
2011-11-23 19:51 ` Dmitry A. Kazakov
2011-11-24 0:59 ` Georg Bauhaus
2011-11-24 9:14 ` Dmitry A. Kazakov
2011-11-23 15:12 ` Simon Wright
2011-11-23 19:53 ` Dmitry A. Kazakov
2011-11-24 8:07 ` Simon Wright
2011-11-24 9:27 ` Dmitry A. Kazakov
2011-11-24 10:49 ` Georg Bauhaus
2011-11-24 13:14 ` Dmitry A. Kazakov
2011-11-24 14:31 ` Georg Bauhaus
2011-11-24 16:32 ` Dmitry A. Kazakov
2011-11-24 11:15 ` Brian Drummond
2011-11-24 18:12 ` Simon Wright
2011-11-24 23:52 ` Brian Drummond
2011-11-23 10:35 ` Brian Drummond
2011-11-23 9:54 ` Georg Bauhaus
2011-11-23 10:30 ` Dmitry A. Kazakov
2011-11-23 4:08 ` Yannick Duchêne (Hibou57)
2011-11-23 4:11 ` Yannick Duchêne (Hibou57)
2011-11-22 23:52 ` Georg Bauhaus
2011-11-23 9:04 ` Dmitry A. Kazakov
2011-11-23 11:15 ` Georg Bauhaus
2011-11-23 13:30 ` Dmitry A. Kazakov
2011-11-23 14:42 ` Georg Bauhaus
2011-11-23 19:48 ` Dmitry A. Kazakov
2011-11-24 1:36 ` Georg Bauhaus
2011-11-24 10:52 ` Dmitry A. Kazakov
2011-11-24 11:30 ` Georg Bauhaus
2011-11-24 12:52 ` Dmitry A. Kazakov
2011-11-24 14:45 ` Georg Bauhaus
2011-11-25 9:54 ` Dmitry A. Kazakov
2011-11-24 7:46 ` stefan-lucks
2011-11-24 3:07 ` Shark8
2011-11-24 6:07 ` Yannick Duchêne (Hibou57)
2011-11-24 10:10 ` Dmitry A. Kazakov
2011-11-24 11:15 ` Georg Bauhaus
2011-11-24 22:48 ` Shark8
2011-11-25 9:25 ` Yannick Duchêne (Hibou57)
2011-11-26 21:59 ` Shark8
2011-11-25 9:47 ` Dmitry A. Kazakov
2011-11-25 10:15 ` Georg Bauhaus
2011-11-25 10:51 ` Yannick Duchêne (Hibou57)
2011-11-25 15:45 ` Georg Bauhaus
2011-11-25 16:05 ` Yannick Duchêne (Hibou57)
2011-11-25 16:19 ` Yannick Duchêne (Hibou57)
2011-11-23 3:49 ` Yannick Duchêne (Hibou57)
2011-11-23 8:50 ` Georg Bauhaus
2011-11-23 9:45 ` Yannick Duchêne (Hibou57)
2011-11-23 10:55 ` Georg Bauhaus
2011-11-23 3:20 ` Yannick Duchêne (Hibou57)
2011-11-23 15:05 ` Robert A Duff
2011-11-21 17:00 ` Adam Beneschan
2011-11-23 3:13 ` Yannick Duchêne (Hibou57) [this message]
2011-11-24 3:47 ` Shark8
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox