widl: Error if an array is in the middle of a structure.

Fix detection of conformant arrays and output an error if the array
isn't at the end of the structure.
This commit is contained in:
Robert Shearman 2006-01-24 11:12:20 +01:00 committed by Alexandre Julliard
parent 362d42e082
commit e9c771f98b
1 changed files with 14 additions and 1 deletions

View File

@ -1257,9 +1257,13 @@ static int get_struct_type(var_t *field)
continue;
}
if (is_array_type(field->attrs, field->ptr_level, field->array))
if (is_array_type(field->attrs, field->ptr_level, field->array) &&
field->array && !field->array->is_const)
{
has_conformant_array = 1;
if (PREV_LINK(field))
yyerror("field %s deriving from a conformant array must be the last field in the structure\n",
field->name);
continue;
}
@ -1303,6 +1307,9 @@ static int get_struct_type(var_t *field)
break;
case RPC_FC_CARRAY:
has_conformant_array = 1;
if (PREV_LINK(field))
yyerror("field %s deriving from a conformant array must be the last field in the structure\n",
field->name);
break;
case RPC_FC_C_CSTRING:
case RPC_FC_C_WSTRING:
@ -1320,11 +1327,17 @@ static int get_struct_type(var_t *field)
case RPC_FC_CPSTRUCT:
has_conformant_array = 1;
if (PREV_LINK(field))
yyerror("field %s deriving from a conformant array must be the last field in the structure\n",
field->name);
has_pointer = 1;
break;
case RPC_FC_CSTRUCT:
has_conformant_array = 1;
if (PREV_LINK(field))
yyerror("field %s deriving from a conformant array must be the last field in the structure\n",
field->name);
break;
case RPC_FC_PSTRUCT: