comp.lang.ada
 help / color / mirror / Atom feed
From: cl1motorsports <cwlambert76@yahoo.com>
Subject: Re: how do i implement double-dispatching?
Date: Sun, 21 Dec 2003 11:40:55 -0600
Date: 2003-12-21T11:40:55-06:00	[thread overview]
Message-ID: <pan.2003.12.21.17.40.50.118571@yahoo.com> (raw)
In-Reply-To: mailman.150.1072014027.31149.comp.lang.ada@ada-france.org

On Sun, 21 Dec 2003 08:39:59 -0500, Stephen Leake wrote:

> 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.

extern int vsnprintf (char *   __s, size_t __maxlen,
		      __const char *   __format, __gnuc_va_list  __arg)
       __attribute__ ((__format__ (__printf__, 3, 0)));

the __attribute__ keyword gets processed even when -ansi is used. But from
what i can tell, that is only used in the system header files. I mean it
is not created by the preprocessor. I have a newer version of GCC since i
last checked this. so maybe it was only in one version or something like
that *shrugs*.
>
>> 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.

yes that's exactly what i meant. I also want a user to be able to select
any given #define statement in the C code and specify how that statement
is translated. This will help when the default choice chosen by the
translator is ambiguous or not what the user intended.

>
>> 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.

Actually i plan on having it preprocess the C code as a C preprocessor
normally would when the translator doesn't have a known way to convert the
#define statement to ada code directly.

> 
>> 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 :).




  reply	other threads:[~2003-12-21 17:40 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
2003-12-21 17:40         ` cl1motorsports [this message]
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