comp.lang.ada
 help / color / mirror / Atom feed
From: Stephen Leake <stephen_leake@acm.org>
To: cl1motorsports <cwlambert76@yahoo.com>
Cc: comp.lang.ada@ada-france.org
Subject: Re: how do i implement double-dispatching?
Date: 21 Dec 2003 08:39:59 -0500
Date: 2003-12-21T08:39:59-05:00	[thread overview]
Message-ID: <mailman.150.1072014027.31149.comp.lang.ada@ada-france.org> (raw)
In-Reply-To: <pan.2003.12.20.17.00.33.831421@yahoo.com>

cl1motorsports <cwlambert76@yahoo.com> writes:

> On Sat, 20 Dec 2003 10:56:07 +0100, Martin Krischik wrote:
> 
> > Have you considered to send the C file thrue the C preprocessors
> > and convert the output? #if #define etc. pp. will be cone by then.
> 
> What's the fun in that? Seriously though, the most common preprocessor is
> the one that comes with gcc, and it puts alot of non standard C stuff in
> its output. 

Hmm. I never noticed anything that was not in the ANSI C standard. Are
you sure it is truly not in that standard? Or is it just something you
are not familiar with? In any case, you can disable any non-standard
stuff by specifying -ansi.

> That is one reason I didn't want to do that. Another reason is
> because some people may want to convert a whole project and want to
> keep the preprocessed code. 

I think you mean "translate the preprocessor statements into Ada, to
preserve structure". That is a good idea.

> I already have some ideas on this
> 
> #define FOO
> Foo : constant Boolean := True
> 
> #define FOO "i'm a string"
> Foo : constant String(1..12") := "i'm a string";
> 
> #define FOO 12
> Foo : constant := 12;
> 
> #define MAX(a,b) (a < b) b ? a;
> generic
> 	type blah is <>;
> function Max(a : blah; b : blah) return blah is
> begin
> 	if (a < b) then
> 		return b;
> 	else
> 		return a;
> 	end if;
> end Max;
> function 
> 
> that's just a few examples. 

This will work for many common uses of the preprocessor. Of course, it
will not be possible for _all_ uses of the preprocessor. But then your
translator can either run the C preprocessor and use the output, or
issue an error about untranslatable code.

> I also want to use the define statements to be able to produce
> generic packages. I've got a direct conversion for most types of
> #define statements (i think) except ones with the stringize and
> concatination operators, and the ones that are just down right messy
> (garbage in garbage out). 

Right. Those should be re-written anyway :).

-- 
-- Stephe




  reply	other threads:[~2003-12-21 13:39 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-12-17 18:08 how do i implement double-dispatching? cl1motorsports
2003-12-18  2:17 ` Stephen Leake
2003-12-18  9:48 ` Dmitry A. Kazakov
2003-12-18 15:13 ` Martin Krischik
2003-12-20  6:27 ` cl1motorsports
2003-12-20  9:56   ` Martin Krischik
2003-12-20 17:00     ` cl1motorsports
2003-12-21 13:39       ` Stephen Leake [this message]
2003-12-21 17:40         ` cl1motorsports
2003-12-22 22:47           ` Stephen Leake
2003-12-22 21:41   ` cl1motorsports
2003-12-22 21:47     ` cl1motorsports
2003-12-23 11:03       ` Dmitry A. Kazakov
2003-12-22 22:49     ` Stephen Leake
2003-12-22 23:04       ` cl1motorsports
replies disabled

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