Time for std.reflection
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Sat Jul 21 21:50:50 PDT 2012
On 7/21/12 8:46 PM, Andrej Mitrovic wrote:
> On 7/21/12, Andrei Alexandrescu<SeeWebsiteForEmail at erdani.org> wrote:
>> class ModuleInfo {
>> @property:
>> string name();
>> ImportInfo[] imports();
>> DataInfo[] data();
>> FunctionInfo[] functions();
>> ClassInfo[] classes();
>> StructInfo[] structs(); // includes unions
>> TemplateInfo[] templates();
>> EnumInfo[] enums();
>> bool hasStaticCtor(), hasStaticDtor(),
>> hasSharedCtor(), hasSharedDtor();
>> }
>
> Are class/struct/function/etc templates going to be stored in the
> templates field? Then you'd have to tag each template with a type,
> e.g. "class template" vs "function template" to be able to filter them
> out.
Perhaps we could accommodate parameterized types together with
non-parameterized types by having e.g. additional properties that are
null for non-parameterized types.
> Otherwise classes/functions/etc could have an optional
> "TemplateTypeInfo[] typeParams" field so you could filter out
> templated from non-templated types by checking their typeParams field,
> e.g.: auto tempClasses = filter!(a => !empty(a.typeParams)
> )(modinfo.classes);
>
> I use a similar structure to what you've defined for my code generator
> and it worked out nicely for me.
That sounds great!
Andrei
More information about the Digitalmars-d
mailing list