This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
Re: Cast to a struct in expressions
--On Friday, April 27, 2001 8:42 PM +0300 Eli Zaretskii
<eliz@is.elta.co.il> wrote:
>> From: Daniel Berlin <dan@cgsoftware.com>
>> Date: 27 Apr 2001 11:23:55 -0400
>>
>> > A parse error in expression, near `long foo; unsigned bar} *)foobar
>> >
>> > Seems like the parser chokes on the struct declaration?
>> Yes.
>> > Am I missing something?
>> Yes, I think. The parser only handles expressions, nothing more.
>> This is why it's c-exp.y, and not c.y.
>> :)
>>
>> If you have a real struct already defined, of course, and di
>>
>> p/x *(sturct foostruct *)foobar
>>
>> then *that* should work.
>
> No, there's no such struct, otherwise I wouldn't be opting for this
> complication ;-)
>
> I'm still missing something, because I don't see how "*(struct foo *)x"
> differs from "*(struct {long foo; unsigned bar;} *)x". Both are valid
> C expression syntax, so the parser should be able to parse them both.
No, they aren't both *expressions*, only one is.
One is a statement/declaration, and the other is an expression.
>
> I guess someone just stopped short of making this part of the parser,
> because it looks like "struct <name>" is the only syntax it accepts.
> Right?
No. It's done on purpose. We aren't supposed to be handling statements and
declarations, only expressions.
Doing more would require making the C parser into a mini-C compiler.
You'd have to start injecting types into the symbol table and whatnot.
>
> Anyway, thanks for the feedback.
NP.