[fpc-devel] Streamlining TVMTBuilder.generate_vmt after r41716 & r41884

Sven Barth pascaldragon at googlemail.com
Sat Aug 3 14:01:53 CEST 2019


Am 02.08.2019 um 21:27 schrieb Blaise at blaise.ru:
> On 02.08.2019 21:36, Blaise at blaise.ru wrote:
>> embed a copy of the body of insert_struct_hidden_paras into 
>> TVMTBuilder.generate_vmt, then merge those two procdef-member 
>> traversals into one (hey, performance!)
>
> Would you guys oppose such a change? Then we could rename 
> insert_struct_hidden_paras back to insert_record_hidden_paras :)

In principle one could do that, though more often than not inside the 
compiler maintainability beats performance. I'd prefer an opinion of 
Florian and/or Jonas on this though...

> Aside from performance, I would like it for closures (for their 
> nameless methods, the insertion of hidden parameters cannot be 
> deferred until the VMT generation).

What difference would it make for closures? In the end you'd still need 
to ensure that handle_calling_convention isn't called twice.

> Also, handle_calling_convention would need to be changed not to 
> indirectly rely on current_filepos, but I see that as a bonus: the 
> trick of swapping current_filepos could be removed from its callers 
> (namely, insert_record_hidden_paras).

That would mean that the functions called inside 
handle_calling_convention (mainly those inside the if-clause for 
hcc_insert_hidden_paras) would have to be adjusted to handle that as 
well (especially lovely for those invoked by ForEachCall).
If this is done there should also be an overload of 
handle_calling_convention that does not take a tfileposinfo argument and 
instead passes on current_filepos so that those code parts that just 
want to use the current position don't need to be changed.

Regards,
Sven


More information about the fpc-devel mailing list