Re: [RFC/RFA?] Should break FILE:LINENO skip prologue?

Jim Blandy
2008-01-17T22:09:32Z

Michael Snyder <msnyder at specifix.com> writes:
> On Thu, 2008-01-17 at 10:45 +0100, Mark Kettenis wrote:
>> > From: Michael Snyder <msnyder@specifix.com>
>> > Date: Wed, 16 Jan 2008 20:18:03 -0800
>> >
>> > On Thu, 2008-01-17 at 06:13 +0200, Eli Zaretskii wrote:
>> > > > Cc: Mark Kettenis <mark.kettenis@xs4all.nl>, uweigand@de.ibm.com,
>> > > > brobecker@adacore.com, msnyder@specifix.com,
>> > > > gdb-patches@sourceware.org
>> > > > From: Jim Blandy <jimb@codesourcery.com>
>> > > > Date: Wed, 16 Jan 2008 13:36:11 -0800
>> > > >
>> > > > GDB allows 'FILENAME'::FUNCTION in C expressions:
>> > >
>> > > Thanks.
>> > >
>> > > But if "break *'FILENAME'::FUNCTION" works, why is it wrong to expect
>> > > that "break *FILENAME:FUNCTION" should also work. None of them is a
>> > > valid C expression, it's just something GDB does to help the user,
>> > > right?
>> >
>> > Right. It is a separate parser, the LINEINFO parser, as
>> > opposed to the expression parser. It defines a superset
>> > of the expression syntax. It is used mainly by the 'break'
>> > and 'list' commands.
>>
>> That isn't quite true. The LINESPEC (I assume that's what you meant
>> with LINEINFO) parser only parses the '*' and then hands things off to
>> the standard expression parser.
>>
>> This of course is a good thing, because it means expressions are
>> handled uniformly all over GDB.
>
> We're on the same page, possibly not the same paragraph.
>
> I'm not looking at the code, just going from memory --
> but I think the LINESPEC parser used to do a bit more
> than just parse the "*". For instance, it would have to
> parse that "::" up there, n'est ce pas?

Actually, :: is actually a GDB extension to the C expression syntax.
If you look at the example interaction in the message at the link, you
can see this in the two 'print' commands, where I use the :: operator.

http://sourceware.org/ml/gdb-patches/2008-01/msg00417.html

> Anyway, yes, the LINESPEC parser does call the expression
> parser, but it also does some syntax itself, thus generating
> a superset of the language-specified expression syntax.
> We're all agreed on that much.

Once it has recognized the '*', linespec.c passes things off directly
to the language expression parser, with no further munging; see the
code fragments I posted here:

http://sourceware.org/ml/gdb-patches/2008-01/msg00354.html

So, the syntax of things that may appear after the '*' is exactly an
expression, no less or more.