comp.lang.ada
 help / color / mirror / Atom feed
From: Natasha Kerensikova <lithiumcat@gmail.com>
Subject: Re: Dispatching callback handed over to C
Date: Sat, 7 Apr 2012 08:55:49 +0000 (UTC)
Date: 2012-04-07T08:55:49+00:00	[thread overview]
Message-ID: <slrnjo007l.1lme.lithiumcat@sigil.instinctive.eu> (raw)
In-Reply-To: jll327$i0i$1@munin.nbi.dk

On 2012-04-05, Randy Brukardt <randy@rrsoftware.com> wrote:
> In particular, we're talking about the mapping of C to Ada here, and not the 
> underlying design of the C API (which is out of our control anyway). The 
> question is how to map "void *" to Ada?
>
> 1) Some convention C access type designating an appropriate Ada type.
>
> 2) Some convention C access type designating a dummy Ada type (use 
> unchecked_conversion as needed on the real types).

What I'm still struggling with is why do I have to settle for #2, or
what is preventing me from going for #1?

   type Callback_Access is access all Event_Callback'Class;
   pragma Convention (C, Callback_Access);

Using Callback_Access in a subprogram imported from C trigged the
following GNAT warning:

        >>> warning: "Imported_Subprogram.Arg" involves a tagged type
which does not correspond to any C type

I guess since it's "only" a warning, I could just silence. However I
can't bring myself to silence something I don't understand.

If it's only about the fact that Callback_Access is a C pointer to an
object with which C subprograms has no way for dealing properly, then
fine (since in that particular case C code considers it as an opaque
pointer).

However it's worded like "warning: you're mixing C and Ada", to which
I'm tempted to answer "breaking news ! writing a binding involves mixing
two languages", but that would be rude and there is no point in telling
a compiler things in a human language anyway.

On the other hand, solution #2 allows the import package to not know
about Event_Callback type, and potentially be used with other Ada
callback implementation.


Thanks for your insights,
Natasha



  reply	other threads:[~2012-04-07  8:55 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-03  7:19 Dispatching callback handed over to C Natasha Kerensikova
2012-04-03  9:04 ` Brian Drummond
2012-04-03  9:21   ` Thomas Locke
2012-04-03  9:37 ` Maciej Sobczak
2012-04-03 12:02   ` Natasha Kerensikova
2012-04-03 14:42     ` Maciej Sobczak
2012-04-03 20:20       ` Randy Brukardt
2012-04-04  7:26         ` Georg Bauhaus
2012-04-04  7:56         ` Natasha Kerensikova
2012-04-04 19:28           ` Randy Brukardt
2012-04-05  8:59             ` Natasha Kerensikova
2012-04-05 21:04               ` Randy Brukardt
2012-04-04 19:55           ` Simon Wright
2012-04-04 11:34         ` Maciej Sobczak
2012-04-04 19:16           ` Randy Brukardt
2012-04-05  7:28             ` Maciej Sobczak
2012-04-05 21:32               ` Randy Brukardt
2012-04-07  8:55                 ` Natasha Kerensikova [this message]
2012-04-07 11:32                   ` Simon Wright
2012-04-07 13:28                     ` Robert A Duff
2012-04-05  9:13             ` Natasha Kerensikova
2012-04-05 21:06               ` Randy Brukardt
2012-04-06  7:30               ` Maciej Sobczak
2012-04-06 11:41                 ` Simon Wright
2012-04-10  7:15                   ` Maciej Sobczak
replies disabled

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