> On Jan 22, 2025, at 11:22, Martin Uecker <uec...@tugraz.at> wrote:
> 
> 
> Hello Michael,
> 
> Am Mittwoch, dem 22.01.2025 um 16:54 +0100 schrieb Michael Matz:
>> On Wed, 22 Jan 2025, Martin Uecker wrote:
>> 
>>>>> So you do not need to look further.  But maybe I am missing something 
>>>>> else.
>>>> 
>>>> Like ...
>>>> 
>>>>>> Note further that you may have '{ .y[1][3].z }', which is still not a 
>>>>>> designation, but an expression under your proposal, whereas
>>>>>> '{ .y[1][3].z = 1 }' would remain a designation.  This shows that you 
>>>>>> now need arbitrary look-ahead to disambiguate the two.  A Very Bad Idea.
>>>> 
>>>> ... this?
>>> 
>>> In .y[1][3].z  after .y you can decide whether y is a member of the
>>> struct being initialized.  If it is, it is a designator and if not
>>> it must be an expression.
>> 
>> If y is not a member it must be an expression, true.  But if it's a member 
>> you don't know, it may be a designation or an expression.
> 
> In an initializer I know all the members.

I am not familiar with the parser, so, I am a little confused about the 
following:

Suppose we have:

struct foo {
  int z;
  float f;
}

struct bar {
  char *array __attribute__ ((counted_by (.y[1][3].z + 4)));
  struct foo y[5][10];
}

So, in the above, when parsing the above expression inside counted_by, can the 
current parser be easily to be extended to parse it?

thanks.

Qing
> 
> Martin 
> 
> 

Reply via email to