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 :).
next prev parent 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