[fpc-devel] Remnants of VMT regeneration

Sven Barth pascaldragon at googlemail.com
Mon Dec 2 23:31:06 CET 2019


Am 01.12.2019 um 19:33 schrieb Blaise at blaise.ru:
> TVMTBuilder.generate_vmt has
>>     _class.resetvmtentries;
> and TVMTBuilder.generate_vmt_def has
>>     { the VMT definition may already exist in case of generics }
>>     if assigned(try_search_current_module_type(vmtdefname)) then
>>       exit;
> Thus, it appears that VMT regeneration used to be supported/required.
>
> 1) In actuality, such regeneration does not currently happen: 
> generate_vmt_def is private and is only invoked from generate_vmt, and 
> generate_vmt is only invoked from:
>     types_dec :objectdef
>     generate_specialization_phase2 :objectdef
>     jvm_maybe_create_enum_class
>     jvm_create_procvar_class_intern
> I.e. for any given def VMT generation happens only once.
> 2) Since SVN r41884, in which the insertion of hidden parameters was 
> tightly coupled with VMT generation, the regeneration as-is cannot 
> happen anyway: the call to insert_struct_hidden_paras from 
> generate_vmt would yield
>> Error: Duplicate identifier "$self"
> 3) From the performance standpoint, VMT regeneration is bad.
>
> Given the above, I propose the remnants of VMT regeneration (or 
> whatever this is) be removed.
> Aside from leaner code, we will get a speed-up from not invoking 
> try_search_current_module_type(vmtdefname) for every VMT generation 
> (which would do addsymref, which looks suspicious to me in the context 
> of skipping the creation of vmtdef in case of VMT regeneration).

Applied in r43628.

Regards,
Sven


More information about the fpc-devel mailing list