Can someone check the below statements for correctness please?
---------------------------------------------------
- A class itself has always some RTTI of its own. (but that does not describe all the fields/members)
- other types may also have RTTI (even if they are outside a published section, or even outside a class)
- fields/members can be found via RTTI if they are published. That is the field/member can be looked up by name within the RTTI of the class.
(and that returns the RTTI for the field's type / and the location or getter/setter of the field)
So for the "published" case the DW_TAG_Member needs to have the flag (indicating the presence of RTTI)
(actually indicating that the containing type has type info for that field, and its type)
I'll have to double check the below with the fpc team, to make sure I got the nitty gritty parts correct.
RTTI may also be available for a type. Then the type would want to have that flag, but that would not relate to the published concept.
Some types have always RTTI for the type. Such types could be declared scoped inside a class. But that would not mean they are published.
Afaik (and as I said, I am double checking that)
typeTFoo = class
public type
TMyEnum =(mon,tue,wed,thu,fri);public
FMyAnonEnumVal = (Jan, Feb, Mar, Apr);published
Value: integer;
end;TMyEnum has rtti for the type. But can't be looked up by name. (afaik enums always produce RTTI, becaues they can be printed (with writeln) using the name, rather than the stored ordinal val)
The same for FMyAnonEnumVal.
But the published "Value" can also be found by looking up the name "Value" starting from the class.
That could be distinguishable by having the flag on the type (in the 2 public cases), and on the member for the published case.
