Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2019-12

Refactoring TVMTBuilder

2 messages · 2 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Unknown author

1) Currently, the following snippet

vmtbuilder:=TVMTBuilder.Create(...); vmtbuilder.generate_vmt; vmtbuilder.free;

is present @
types_dec :objectdef
generate_specialization_phase2 :objectdef
jvm_maybe_create_enum_class
jvm_create_procvar_class_intern
and there will be the fifth instance for closures. The first patch extracts the above into a separate routine -- build_vmt.

2) Because of SVN r41884, I strongly suggest that build_vmt be actually named insert_hidden_paras_and_build_vmt (the second patch), in order that the tight coupling of these two unrelated operations be reflected in the name. Unless you are ready for something generic like postprocess_object, that mouthful is better than simple "build_vmt". Should this be rejected, at the very least, add the following comment

	// Despite the name, this also inserts method's hidden parameters

above the interface declaration of build_vmt.

3) I would like to draw a strong terminological distinction between creating/building data structures within the compiler, and generating code/data in object files. NCGVMT.TVMTWriter is the one concerned with VMT /generation/, not NObj.TVMTBuilder, which creates & builds the data structures. The third patch renames
TVMTBuilder.generate_vmt_def -> .create_vmtdef // or, maybe, build_vmtdef TVMTBuilder.generate_vmt -> .build
Also, .build_interface_mappings becomes private and it is grouped within the TVMTBuilder declaration with the methods it uses.

(This submission is only split into three patches for easy cherry-picking; in my book, they are just fine becoming a single SVN commit.)

βþ

Reply by email

Sven Barth
to Unknown author

Am 05.12.2019 um 13:48 schrieb

Show quoted text 36 lines
1) Currently, the following snippet >     vmtbuilder:=TVMTBuilder.Create(...); >     vmtbuilder.generate_vmt; >     vmtbuilder.free; is present @     types_dec :objectdef     generate_specialization_phase2 :objectdef     jvm_maybe_create_enum_class     jvm_create_procvar_class_intern and there will be the fifth instance for closures. The first patch extracts the above into a separate routine -- build_vmt. 2) Because of SVN r41884, I strongly suggest that build_vmt be actually named insert_hidden_paras_and_build_vmt (the second patch), in order that the tight coupling of these two unrelated operations be reflected in the name. Unless you are ready for something generic like postprocess_object, that mouthful is better than simple "build_vmt". Should this be rejected, at the very least, add the following comment     // Despite the name, this also inserts method's hidden parameters above the interface declaration of build_vmt. 3) I would like to draw a strong terminological distinction between creating/building data structures within the compiler, and generating code/data in object files. NCGVMT.TVMTWriter is the one concerned with VMT /generation/, not NObj.TVMTBuilder, which creates & builds the data structures. The third patch renames     TVMTBuilder.generate_vmt_def -> .create_vmtdef    // or, maybe, build_vmtdef     TVMTBuilder.generate_vmt -> .build Also, .build_interface_mappings becomes private and it is grouped within the TVMTBuilder declaration with the methods it uses. (This submission is only split into three patches for easy cherry-picking; in my book, they are just fine becoming a single SVN commit.)

Done in r43673 to r43676.

Regards,
Sven

Reply by email