[fpc-devel] RTTI generating
Adriaan van Os
fpc at microbizz.nl
Fri Sep 19 12:24:53 CEST 2014
This is a copy of a post on the macpascal mailing list, where it was suggested to re-ask on the
fpc-devel list.
-----
The RTTI generating logic in the FPC compiler puzzles me ....
Chapter 40 of FreePascal Run-Time Library Reference guide describes the typinfo unit. It says
; The TypeInfo unit contains many routines which can be used for the querying of the Run-Time
; Type Information (RTTI) which is generated by the compiler for classes that are compiled under the
; {$M+} switch
Great so far !
; This information can be used to retrieve or set property values for published properties
; for totally unknown classes. In particular, it can be used to stream classes
This is what I fail to understand. Why is RTTI information tied to properties and why is it
restricted to what is in the published/public sections of classes (or objects in macpas mode) ? For
example, when I want to implement an object browser for debugging purposes, I want to see anything.
What I am allowed in the code to do with the methods and fields is irrelevant and whether fields
are properties or not is irrelevant too.
When I try it, $M+ refuses public non-property class fields. With $M- ClassInfo, GetTypeData and
the ParentInfo field work. However, FieldAddress and MethodName do not work. The field count in the
FieldTable field of the VMT is 0.
Is there a special reason why the compiler can't fill in the VMT's FieldTable ?
-----
Jonas Maebe replied that RTTI information has been implemented according to Delphi conventions.
Marco van de Voort mentioned D2010 and work being done on the extended RTTI ($RTTI directive). Paul
Ishenin remembered Joost implemented some prototype in a branch, that had some problems and was
not merged to trunk yet.
Regards,
Adriaan van Os
More information about the fpc-devel
mailing list