Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Jim Blandy <jimb@redhat.com>
To: Daniel Jacobowitz <drow@mvista.com>
Cc: gdb@sources.redhat.com, Benjamin Kosnik <bkoz@redhat.com>,
	Daniel Berlin <dan@dberlin.org>
Subject: Re: C++ nested classes, namespaces, structs, and compound statements
Date: Mon, 08 Apr 2002 17:03:00 -0000	[thread overview]
Message-ID: <np1ydpspql.fsf@zwingli.cygnus.com> (raw)
In-Reply-To: <20020406013408.A4570@nevyn.them.org>


Daniel Jacobowitz <drow@mvista.com> writes:
> GDB already does a great deal of this by the very simple method of
> using fully qualified names.  It's served us remarkably well, although
> of course we're hitting its limits now.  But let's not be too quick to
> discard that approach, for the present at least.

Oh dear.  I think that's exactly what I'm proposing we replace.  As
Per said:

Per Bothner <per@bothner.com> writes:
> Nothing much to add, except that namespace support is even
> more critical for Java, in which *all* code uses namespaces
> (aka "packages").  We kludge around it, by treating a compound
> name like 'java.lang.Object' as a single name, but this doesn't
> work all that well, especially with mixed Java/C++ code.

It just seems natural to represent something like:

   namespace A
   {
     int x;
   };

as a binding in the top-level environment for the symbol A, saying
it's a namespace.  That binding would have another environment object
representing the contents of A; there we'd find a binding for 'x',
saying it's a global variable of type `int'.  Presented with something
like `A::x', we'd first look up `A', check that it is a namespace or
struct or something else that can qualify names, and then look in A's
environment for `x'.

Think about how namespace aliases need to work:

    namespace A
    {
      int x;
    };

    int y;

    namespace B
    {
      namespace A2 = A;
    }

    int
    foo (int y)
    {
      namespace B2 = B;
      return B2::A2::x + y;
    }

The `namespace A2 = A' declaration in `namespace B' really should
create a new entry in B's environment which binds A2 to the same
namespace object A is bound to.  The `namespace B2 = B' declaration
should modify foo's local variable environment to bind B2 to the same
namespace object B is bound to.

In that situation, we can look up things like `B2::A2::x' in a
straightforward way: look up B2, look up A2 there, and look up x
there.  With a symbol table full of fully qualified names, how do we
do this?

Can you talk more about why we shouldn't evolve away from placing
fully qualified names in the symbol table directly, and towards
representing them more explicitly?


  parent reply	other threads:[~2002-04-09  0:03 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-04-05 20:42 Jim Blandy
2002-04-05 22:05 ` Daniel Berlin
2002-04-05 22:34 ` Daniel Jacobowitz
2002-04-05 23:49   ` Daniel Berlin
2002-04-06  7:18     ` Dan Kegel
2002-04-06  9:26     ` Gianni Mariani
2002-04-06 11:57       ` Daniel Berlin
2002-04-08 17:24       ` Jim Blandy
2002-04-08 17:03   ` Jim Blandy [this message]
2002-04-08 18:59     ` Daniel Jacobowitz
2002-04-09 18:35       ` Jim Blandy
2002-04-09 20:56         ` Daniel Jacobowitz
2002-04-12 15:08           ` Jim Blandy
2002-04-12 16:32             ` Daniel Jacobowitz
2002-04-08 17:19   ` Jim Blandy
2002-04-08 18:49     ` Daniel Jacobowitz
2002-04-10 10:31       ` Jim Blandy
2002-04-10 12:08         ` Daniel Jacobowitz
2002-04-12 13:58           ` Jim Blandy
2002-04-12 16:56             ` Daniel Jacobowitz
2002-04-16 12:08               ` Jim Blandy
2002-04-16 14:01                 ` Daniel Jacobowitz
2002-04-16 14:52               ` Jim Blandy
2002-04-16 14:58                 ` Daniel Jacobowitz
2002-04-06  6:31 ` Andrew Cagney
2002-04-06  7:58   ` Daniel Berlin
2002-04-08  0:59   ` Joel Brobecker
2002-04-08  2:01     ` Doubt in GDB SathisKanna k
2002-04-06  8:49 ` C++ nested classes, namespaces, structs, and compound statements Per Bothner
2002-04-08 16:29 ` Jim Blandy
2002-04-08 16:48   ` Daniel Jacobowitz
2002-04-09  6:55   ` Petr Sorfa
2002-04-10 10:34     ` Jim Blandy
2002-04-10 12:31       ` Daniel Berlin
2002-04-10 12:53         ` Petr Sorfa
2002-04-05 22:02 Michael Elizabeth Chastain
2002-04-05 22:13 ` Daniel Berlin
2002-04-05 22:30   ` Daniel Berlin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=np1ydpspql.fsf@zwingli.cygnus.com \
    --to=jimb@redhat.com \
    --cc=bkoz@redhat.com \
    --cc=dan@dberlin.org \
    --cc=drow@mvista.com \
    --cc=gdb@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox