From: Daniel Jacobowitz <drow@false.org>
To: Fred Fish <fnf@specifix.com>
Cc: Jim Blandy <jimb@red-bean.com>, gdb-patches@sourceware.org
Subject: Re: [PATCH] Fix ptype problem printing typedefs defined differently in different compilation units
Date: Mon, 20 Feb 2006 16:23:00 -0000 [thread overview]
Message-ID: <20060220162320.GF16058@nevyn.them.org> (raw)
In-Reply-To: <200602201046.08713.fnf@specifix.com>
On Mon, Feb 20, 2006 at 10:46:08AM -0500, Fred Fish wrote:
> OK, here is a patch. I'm not entirely happy with it but I'm not familiar
> enough with parser generator input and output to see any obviously
> better way.
>
> The basic problem is that it's easy to handle 'file'::variable. The
> existing code for this is:
>
> block : block COLONCOLON name
> { struct symbol *tem
> = lookup_symbol (copy_name ($3), $1,
> VAR_DOMAIN, (int *) NULL,
> (struct symtab **) NULL);
>
> What happens is that "name" is handled by a lookup_symbol call with
> no context block specified, and then the above calls lookup_symbol
> again with the context specified by $1 (block).
>
> But for types, the parser generator input is:
>
> type : ptype
> | block COLONCOLON ptype
> { $$ = $3; }
>
> Setting expression_context_block for the duration of parsing the
> input expression was the only obvious way I saw to work around
> not being able to call lookup_symbol again, with the right block.
>
> I tried setting expression_context_block on the lexer code when it
> returned BLOCKNAME or FILENAME and that broke some other stuff.
>
> Any suggestions on better ways to handle this would be great.
Yuck. In general futzing with global variables in a parser is bad
news. And here's another good hint that this isn't happening in the
right place:
type : ptype
+ | block COLONCOLON ptype
+ { $$ = $3; }
but ptype : typebase, and typebase : INT_KEYWORD. So this will allow
"ptype var.c:int". I don't think that's a great idea (especially since
we won't use the debug info to look up "int" in that case anyway so we
still won't detect a mismatch).
The problem you're having is that the lexer looks up symbols without
knowing their context. I think you're going to have some fragile
failure modes with things that are types in one file and not in
another, which it would be nice to support if we could. The fact
that we try to differentiate between these two in the lexer is
a bit problematic.
One easy way to improve here would be to just look up the symbol
again. But that still relies on the lexer having decided this
was a typename.
I'm not sure what to suggest. Really this parser needs some more
thorough love and care.
--
Daniel Jacobowitz
CodeSourcery
next prev parent reply other threads:[~2006-02-20 16:23 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-03 20:17 Fred Fish
2006-01-03 23:15 ` Jim Blandy
2006-01-04 2:46 ` Fred Fish
2006-01-04 3:45 ` Jim Blandy
2006-01-04 11:15 ` Fred Fish
2006-01-04 21:04 ` Fred Fish
2006-01-05 0:21 ` Jim Blandy
2006-01-05 0:26 ` Jim Blandy
2006-01-05 0:54 ` Daniel Jacobowitz
2006-01-05 4:47 ` Jim Blandy
2006-01-15 18:48 ` Daniel Jacobowitz
2006-01-16 4:22 ` Jim Blandy
2006-01-23 15:27 ` Fred Fish
2006-01-23 16:12 ` Daniel Jacobowitz
2006-01-23 16:43 ` Fred Fish
2006-01-23 19:17 ` Jim Blandy
2006-01-23 19:35 ` Fred Fish
2006-01-23 20:45 ` Jim Blandy
2006-02-11 0:39 ` Fred Fish
2006-02-11 0:39 ` Fred Fish
2006-02-11 18:35 ` Daniel Jacobowitz
2006-02-11 19:08 ` Eli Zaretskii
2006-02-11 20:13 ` Daniel Jacobowitz
2006-02-11 20:01 ` Fred Fish
2006-02-11 20:21 ` Daniel Jacobowitz
2006-02-12 18:49 ` Fred Fish
2006-02-14 14:11 ` Daniel Jacobowitz
2006-02-14 18:47 ` Fred Fish
2006-02-17 0:17 ` Fred Fish
2006-02-17 9:15 ` Eli Zaretskii
2006-02-17 13:36 ` Fred Fish
2006-02-17 20:32 ` Fred Fish
2006-02-18 9:27 ` Eli Zaretskii
2006-02-18 22:19 ` Daniel Jacobowitz
2006-02-20 15:47 ` Fred Fish
2006-02-20 16:23 ` Daniel Jacobowitz [this message]
2006-05-17 19:04 ` Fred Fish
2006-01-24 15:23 ` [commit] " Fred Fish
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=20060220162320.GF16058@nevyn.them.org \
--to=drow@false.org \
--cc=fnf@specifix.com \
--cc=gdb-patches@sourceware.org \
--cc=jimb@red-bean.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