Actions

icon Post
text/html Subscribe
text/html Unsubscribe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [cxx-abi-dev] Name mangling question


  • To: nasgaard@xxxxxxxxxx
  • Subject: Re: [cxx-abi-dev] Name mangling question
  • From: loewis@xxxxxxxxxxxxxxxxxxxxxxx (Martin v. Löwis)
  • Date: 27 Nov 2002 17:55:52 +0100

nasgaard@xxxxxxxxxx writes:

> Martin,  Your observation may be the key here.  we are mangling ::locale::
> _Impl.  Is the following sequence of productions correct?

It is a valid production sequence, but it is irrelevant for the case
under question, and it is incomplete:

1. You have to start with <type>, not with <nested-name>.
2. You have to take compression into account *before* applying
   any production rules.
3. _Impl is not an unqualified name. In C++, in this context,
   _Impl is the same as locale::_Impl.

> <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E    <<
> there is no substitution here.  _Impl is the unqualified name

No, it is not. The parameter type is locale::_Impl, not _Impl. There is
no unqualified type _Impl in your example, as you noted yourself.

You need to understand that the names of the non-terminals are irrelevant,
it appears that you have been mislead to interpret things into the names
of production rules that they are not intended to mean:
1. <nested-name> and <unqualified-name> does *not* refer to the way
   that the names happen to appear in source code.
2. It also does *not* necessarily refer to the question whether the
   fully-qualified names are in the global namespace or not.
Instead, this is a syntactical property of the mangled name: Does
the mangled name contain qualifiers or not.

Regards,
Martin