From: anon@anon.org (anon)
Subject: Re: Pragma for conditional compilation? (Ada 2005 vs. 95)
Date: Fri, 28 Sep 2007 18:07:36 GMT
Date: 2007-09-28T18:07:36+00:00 [thread overview]
Message-ID: <IpbLi.148626$ax1.74784@bgtnsc05-news.ops.worldnet.att.net> (raw)
In-Reply-To: 1190929570.915553.284000@19g2000hsx.googlegroups.com
As for the "pragma Ada_05 ( name ) ;" It looks like it will not
work for your "Ada_95" user defined package and "Ada_05" Ada
defined package.
Now for conditional compilation, well I did forget to add the
sixth one. Which is the laymans answer and it always works, if you
follow the instructions.
--
-- Uncomment one and only one of the following lines:
--
-- with Package_1 ; use Package_1 ; -- Ada_95 version package
-- with Package_2 ; use Package_2 ; -- Ada_2005 version package
Now to show one example of the IF-THEN-ELSE-END concept. And it
is a lot of work if you have more than a couple of routines to
set up.
-- -------- --
-- TEST.ADB --
-- -------- --
--
-- There are a number of ways to use the "IF-THEN-ELSE-END"
-- structure, this version is one. And it does generate code
-- for the "IF-THEN-ELSE-END" statements.
--
with Test1 ;
procedure test is
--
-- True: use Alpha routines aka "user included package"
--
-- False: use Beta routine aka "system define package"
--
package IO_Package is new Test1 ( False ) ;
use IO_Package ; -- Assign default package
--
-- Use User created package
--
package Package_IO is new Test1 ( True ) ;
begin
Put_Line.all ( "This is a test" ) ;
Package_IO.Put_Line.all ( "Try this One" ) ;
end test ;
-- --------- --
-- TEST1.ADS --
-- --------- --
--
-- This Generic package defines the program global routines, the
-- redefined Ada system routines and the user created routines.
--
with Ada.Text_IO ;
generic
Configure : boolean ;
package test1 is
type Procedure_String_Type is access procedure ( item : String ) ;
-------------------------------
-- Define package procedures --
-------------------------------
Put_Line : Procedure_String_Type ;
--
-- define other declared routines/variables needed
--
private
-------------------------------
-- Emulate system procedures --
-------------------------------
procedure Alpha ( szTemp : string ) ;
-----------------------------------------------
-- Redefine/Rename system supplied procedure --
-----------------------------------------------
procedure Beta ( Item : in String ) renames Ada.Text_IO.Put_Line ;
end test1 ;
-- --------- --
-- TEST1.ADB --
-- --------- --
--
-- This Generic body package defines the user created routines and
-- this package does contain a initialize routine that configures
-- the package.
--
--
-- IF-THEN-ELSE-END -- Yes, the compiler does generate code for
-- -- this type of statament.
-- -- Also, it is easy to insert a statement in
-- -- the wrong place.
--
-- This works! Even though there is a person that says this will
-- not work.
-- If this does not you better find a different language to use.
-- Because it means the Ada "IF" statement does not work?
--
with Ada.Text_IO ;
package body test1 is
-------------------------------
-- Emulate system procedures --
-------------------------------
procedure Alpha ( szTemp : string ) is
begin
Ada.Text_IO.Put_Line ( "Alpha: " & szTemp ) ;
end ;
-----------------------
-- Initial package --
-----------------------
begin -- test1
--
-- Like I said, this is the old way of doing this by embedding
-- the configuration code in the source. But it does work.
-- Of course you could use a CASE statement instead, if you need
-- more than two options or packages set up.
--
if Configure then
Put_Line := Alpha'Access ;
else
Put_Line := Beta'Access ;
end if ;
end test1 ;
In <1190929570.915553.284000@19g2000hsx.googlegroups.com>, Jerry <lanceboyle@qwest.net> writes:
>On Sep 27, 8:26 am, a...@anon.org (anon) wrote:
>
>Thanks, anon, for the detailed answer.
>
>>
>> The third real old way is to code in the option by a "IF-THEN-ELSE-END"
>> statements and use a Global constant variable(s). Its low tech but it
>> still works.
>
>OK, but my "problem" is in declaring types which I want to be visible
>in 95 but not visible in 05, as 05 provides them itself. An "IF-THEN-
>ELSE-END" solution would have to be in the executable part of the
>program (right?).
>
>
>> The fifth is a "NON STANDARD" way that GNAT introduce with the
>> pre-release of Ada_2005 which is to use the "pragma Ada_05 ( name ) ;"
>>
>> Example:
>>
>> -- For GNAT you can create a routine that is define and is usable
>> -- only in Ada_2005 specs, by using the GNAT pragma Ada_05.
>> --
>> -- Gnat uses this concept in the Ada.Text_IO package. Just
>> -- search for "Ada_05" in the file "a-textio.ads". There are
>> -- two Get_Line functions. If the system is compiled with
>> -- "pragma Ada_83 ;" or "pragma Ada_95" the compile will not
>> -- allow a call to these routines. But under Ada_05 the routine is
>> -- visible.
>> --
>> -- Defined in the specification file.
>>
>> procedure Routine ;
>> pragma Ada_05 ( Routine ) ;
>>
>> --
>> -- Defined in the body file.
>> --
>> procedure Routine is
>> begin -- Routine
>> null ;
>> end Routine ;
>>
>Same comment as above--how would this work for type declarations?
>Could I follow the type declaration with the pragma? Also, I need to
>conditionally have a with clause. For example, if using Ada 2005, I
>need a line like this:
>
> with Ada.Numerics.Long_Real_Arrays;
> use Ada.Numerics.Long_Real_Arrays;
>
>(This is where the vector and matrix declarations are.)
>
>Jerry
>
>
next prev parent reply other threads:[~2007-09-28 18:07 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-27 7:56 Pragma for conditional compilation? (Ada 2005 vs. 95) Jerry
2007-09-27 9:31 ` Georg Bauhaus
2007-09-27 16:59 ` Pascal Obry
2007-09-27 21:56 ` Jerry
2007-09-27 9:52 ` Stephen Leake
2007-09-27 9:58 ` Brian Drummond
2007-09-27 15:26 ` anon
2007-09-27 21:46 ` Jerry
2007-09-28 4:55 ` Jeffrey R. Carter
2007-09-28 12:15 ` Jeffrey Creem
2007-09-28 14:06 ` Jean-Pierre Rosen
2007-09-28 15:24 ` Ludovic Brenta
2007-09-28 16:08 ` Jean-Pierre Rosen
2007-09-28 17:54 ` Georg Bauhaus
2007-09-28 18:19 ` Pascal Obry
2007-09-28 20:02 ` Stefan Bellon
2007-09-28 20:14 ` Pascal Obry
2007-09-28 20:26 ` Stefan Bellon
2007-09-29 10:24 ` Stephen Leake
2007-09-28 20:04 ` Simon Wright
2007-09-28 20:11 ` Pascal Obry
2007-09-29 10:29 ` Stephen Leake
2007-09-29 10:18 ` Stephen Leake
2007-09-28 18:07 ` anon [this message]
2007-09-29 22:13 ` Jerry
2007-09-30 10:54 ` Stephen Leake
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox