Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Export to a Namespace?

8 views
Skip to first unread message

Jeremy T. Smith

unread,
Sep 27, 2002, 1:02:23 PM9/27/02
to
I'm supporting a large mass of legacy Ada and my boss wants to add new
functions using C++. There are about 2000 constants defined in the Ada
code that we'll need visible to C++. Not a problem, a quick Perl script
will add a pragma Export after each declaration. The values being
exported are resolved at compile time, otherwise I'd just duplicat the
declarations in C++.

BUT, our system architect is a stickler about not polluting the global
namespace, so can I export from Ada to a C++ namespace? Perhaps
something like (though this won't compile on my Green Hills compiler):

C++ Side:
namespace My_Wrapper {
extern int First_Val;
extern int Next_Val;
}

Ada Side:
First_Val : constant integer := Some_Withed_In_Named_Number;
pragma Export(CPP, First_Val, "My_Wrapper::First_Val");
Next_Val : constant integer := First_Val'Succ;
pragma Export(CPP, Next_Val, "My_Wrapper::Next_Val");

Any help would be much appreciated, even if it's just a "You can't do
that"!

Thanks

Jeremy

Pascal Obry

unread,
Sep 27, 2002, 2:15:35 PM9/27/02
to

"Jeremy T. Smith" <jeremy....@boeing.com> writes:

> I'm supporting a large mass of legacy Ada and my boss wants to add new
> functions using C++.

This is the problem, do not fix the code, fix your boss :)

Pascal.

--

--|------------------------------------------------------
--| Pascal Obry Team-Ada Member
--| 45, rue Gabriel Peri - 78114 Magny Les Hameaux FRANCE
--|------------------------------------------------------
--| http://perso.wanadoo.fr/pascal.obry
--| "The best way to travel is by means of imagination"
--|
--| gpg --keyserver wwwkeys.pgp.net --recv-key C1082595

Stephen Leake

unread,
Sep 27, 2002, 2:52:49 PM9/27/02
to
"Jeremy T. Smith" <jeremy....@boeing.com> writes:

Find out how the C++ compiler mangles the C++ name to the link name;
it may be something like My_Wrapper@Next_Val, but it's probably
worse. Then use the Link_Name parameter of Export to specify that link
name.

As Pascal said, it would be better to fix your boss!

--
-- Stephe

Matthew Heaney

unread,
Oct 2, 2002, 11:35:01 AM10/2/02
to

"Jeremy T. Smith" <jeremy....@boeing.com> wrote in message
news:3D948F1F...@boeing.com...

>
> BUT, our system architect is a stickler about not polluting the global
> namespace, so can I export from Ada to a C++ namespace? Perhaps
> something like (though this won't compile on my Green Hills compiler):
>
> C++ Side:
> namespace My_Wrapper {
> extern int First_Val;
> extern int Next_Val;
> }

The problem is you don't know how the compiler mangles names.

What I would do is use extern but with C linkage, e.g.

extern "C" {
extern int My_Wrapper_First_Val;
extern int My_Wrapper_Next_Val;
}

or something like that.

I'm not sure external linkage and C++ namespaces are really compatible.

If you really want to keep the namespace, you could try something like:

namespace My_Wrapper {
int First_Val();
int Next_Val();
}

inline int My_Wrapper::First_Val()
{
return My_Wrapper_First_Val;
}

inline int My_Wrapper::Next_Val()
{
return My_Wrapper_Next_Val;
}

or something like that.


0 new messages