[PATCH 6/6] widl: Support WinRT parameterized interface type.

Jacek Caban jacek at codeweavers.com
Wed Feb 17 15:10:54 CST 2021


On 17.02.2021 22:06, Rémi Bernon wrote:
> On 2/17/21 8:40 PM, Jacek Caban wrote:
>> On 17.02.2021 19:33, Rémi Bernon wrote:
>>> @@ -116,6 +116,7 @@ static struct namespace global_namespace = {
>>>   static struct namespace *current_namespace = &global_namespace;
>>>   static struct namespace *parameters_namespace = NULL;
>>> +static statement_list_t *parameterized_type_stmts = NULL;
>>
>>
>> Sorry for not catching this earlier, but what's the reason for having 
>> this? Is for delaying specialization? It seems to me that you could 
>> just specialize the type as soon as it appears in 'declare' statement 
>> and avoid additional global list maintenance.
>>
>>
>> Thanks,
>>
>> Jacek
>>
>
> Yes, this is because we need to delay the instantiation.
>
> I don't remember precisely, but I believe it's because the 
> parameterized types generate their UUIDs from a signature computed 
> recursively from their type parameters.
>
> The signature includes the types UUIDs among other things, but so it 
> can only be computed after the declaration of the types that are 
> passed as parameters, and not in the declare block which can work with 
> the forward declarations.
>
> FWIW MIDL also generates the parameterized types specialized 
> interfaces at the bottom of the headers, I guess maybe for the same 
> reasons.


Sounds good to me.


Jacek




More information about the wine-devel mailing list