[PATCH 1/4] widl: Support partially specialized parameterized type.

Jacek Caban jacek at codeweavers.com
Tue Feb 16 12:31:49 CST 2021


Hi Rémi,

On 15.02.2021 11:09, Rémi Bernon wrote:
> +parameterized_type: qualified_type '<' parameterized_type_args '>'
> +						{ $$ = find_parameterized_type($1, $3); }
> +	;
> +
> +parameterized_type_args:
> +	  base_type				{ $$ = append_type(NULL, $1); }
> +	| qualified_type			{ $$ = append_type(NULL, $1); }
> +	| qualified_type '*'			{ $$ = append_type(NULL, type_new_pointer($1)); }
> +	| parameterized_type			{ $$ = append_type(NULL, $1); }
> +	| parameterized_type '*'		{ $$ = append_type(NULL, type_new_pointer($1)); }
> +	| parameterized_type_args ',' parameterized_type_args
> +						{ $$ = append_types($1, $3); }
> +	;
> +
>   coclass:  tCOCLASS typename			{ $$ = type_coclass_declare($2); }
>   	;
>   
> @@ -965,6 +982,7 @@ dispinterfacedef:


(...)


> @@ -1839,6 +1860,16 @@ static type_list_t *append_type(type_list_t *list, type_t *type)
>       return entry;
>   }
>   
> +static type_list_t *append_types(type_list_t *list, type_list_t *types)
> +{
> +    type_list_t *entry;
> +    if (!list) return types;
> +    if (!types) return list;
> +    for (entry = list; entry->next; entry = entry->next) {}
> +    entry->next = types;
> +    return list;
> +}


The usual practice in such cases would be to write grammatical rule 
(probably with a separate parameterized_type_arg rule) to append one 
element at a time to the list. This would avoid need for append_types 
(and its additional list traversal).


Thanks,

Jacek




More information about the wine-devel mailing list