www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - ArrayMemberInitialization, StructMemberInitializer

Currently, the spec describes ArrayMemberInitialization so:

ArrayMemberInitialization:
	AssignExpression
	AssignExpression : AssignExpression

However, considering the following:

struct test
{
	int i;
}

static test[] tests = [
	{1},
];

Compiles just fine, I believe the spec to be incorrect.  Instead, it 
might be:

ArrayMemberInitialization:
	AssignExpression
	AssignExpression : AssignExpression
	StructInitializer
	AssignExpression : StructInitializer
	ArrayInitializer
	AssignExpression : ArrayInitializer

That said, this compiles too:

struct test
{
	int[] i;
}

static test tests = {
	[1, 2, 3]
};

So it might seem that StructMemberInitializer would need the reverse 
change, becoming:

StructMemberInitializer:
	AssignExpression
	Identifier : AssignExpression
	ArrayInitializer
	Identifier : ArrayInitializer
	StructInitializer
	Identifier : StructInitializer

However, this may still not be entirely correct.  Especially if we ever 
get any form of array literals in non-constant expressions.

Thanks,
-[Unknown]
Mar 04 2006