On Friday, 5 April 2019 at 15:38:18 UTC, Adam D. Ruppe wrote:
BTW `T.stringof` is usually a bug waiting to happen. You are using mixin in a lot of places where you shouldn't be and this is going to lead to name conflicts, import problems, and more. Just use `T`.

If you need a member, use __traits(getMember, T, "name").

I fixed the parameter info issue and rewrote a large portion of the code to work better, the main problem was that I was doing

static foreach (f; typeof(__traits(getOverloads, T, m)))

but now I get

Error: variable `std.traits.ParameterDefaults!(foo).Get!1u.Get` only parameters or stack based variables can be `inout`

sParameterReflection("y", "inout(float)", "void", "void", sStorageClass(false, false, false, false, false, false)),

for

pure nothrow @nogc @safe int(int x, inout(float) y = 4.00000F, double x7 = 434.3)

inout clearly has a default value but an error is given. All other default values are returning correctly.


        static if (__traits(compiles, typeof(ParameterDefaults!T[k])))
                {
                        enum pd = ParameterDefaults!T[k];
                        alias dt = typeof(pd);

                }
                else
                {
                        alias dt = void;
                        alias pd = void;
                }

t.Parameters ~= sParameterReflection(ParameterIdentifierTuple!T[k], a.stringof, pd.stringof, dt.stringof);

Without the __traits compiles the error occurs in the enum by simply taking ParameterDefaults.


---------------------------------------------------
The mixin code with T are to build compound names. I never use a mixin for just accessing T alone as far as I know, you are going to have to be more clear on what you are talking about here.

probably 90% of the mixins are of the form

mixin(`Protection = __traits(getProtection, (`~T.stringof~`).`~name~`);`);

Where I have to build the type info, such things as

Protection = __traits(getProtection, T.name);

will definitely not work.



-------------------------

This is now the output of the code and everything seems to basically work now except the above issue.



        Id = cDerived
        TypeName = cDerived!int
        FullName = mModel.cDerived!(int)
        ModuleName = mModel
        MangledName = C6mModel__T8cDerivedTiZQm
        Protection = public
        Body =
        Uses = []
        Attributes = [
                sAttributeReflection("fdsa", "string"),
                sAttributeReflection("8", "int")
        ]
        IsNested = false
        IsInnerClass = false
        HasUnsharedAliasing = true
        HasNested = false
        HasIndirections = true
        HasElaborateDestructor = false
        HasElaborateCopyConstructor = false
        HasElaborateAssign = false
        HasAliasing = true
        TypeParameters = []
        AliasThis = [sTypeReflection("type", "cType")]
        NestedAggregates = []
        DerivedClasses = []
        Fields = [
                Id = type
                TypeName = cDerived!int.type
                FullName = mModel.cDerived!(int).type
                ModuleName = mModel
                MangledName = C6mModel__T8cDerivedTiZQm
                Protection = public
                Body =
                Uses = []
                Attributes = []
                DType = field
                ,
                Id = testField1
                TypeName = cDerived!int.testField1
                FullName = mModel.cDerived!(int).testField1
                ModuleName = mModel
                MangledName = C6mModel__T8cDerivedTiZQm
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("XXXRRERES", "string")]
                DType = field
                ,
                Id = testField2
                TypeName = cDerived!int.testField2
                FullName = mModel.cDerived!(int).testField2
                ModuleName = mModel
                MangledName = C6mModel__T8cDerivedTiZQm
                Protection = private
                Body =
                Uses = []
                Attributes = [sAttributeReflection("XXXRRERES4", "string")]
                DType = field
        ]
        Methods = [
                Id = foo
                TypeName =
                FullName = mModel.cDerived!(int).foo
                ModuleName = mModel
                MangledName = _D6mModel__T8cDerivedTiZQm3fooMFZi
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("A", "string")]
                Signature = int()
                NumArgs = 0
                Linkage = D
                ReturnType = int
                Parameters = []
                Overloads = [
                        Id = foo
                        TypeName =
                        FullName = mModel.cDerived!(int).foo
                        ModuleName = mModel
                        MangledName = 
_D6mModel__T8cDerivedTiZQm3fooMFNaNbNiNfiNgfdZi
                        Protection = private
                        Body =
                        Uses = []
                        Attributes = [sAttributeReflection("B", "string")]
                        DType = function
Signature = pure nothrow @nogc @safe int(int x, inout(float) y = 4.00000F, double x7 = 434.3)
                        NumArgs = 3
                        Linkage = D
                        ReturnType = int
                        Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "inout(float)", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("x7", "double", "void", "void", sStorageClass(false, false, false, false, false, false))
                        ]
                        ,
                        Id = foo
                        TypeName =
                        FullName = mModel.cDerived!(int).foo
                        ModuleName = mModel
                        MangledName = _D6mModel__T8cDerivedTiZQm3fooMFiKdlfZi
                        Protection = public
                        Body =
                        Uses = []
                        Attributes = [
sAttributeReflection("attr!string(\"test\", 432)", "attr!string"),
                                sAttributeReflection("4", "int")
                        ]
                        DType = function
Signature = int(int x, ref double y, long q = 3L, float z = 43234.3F)
                        NumArgs = 4
                        Linkage = D
                        ReturnType = int
                        Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "double", "void", "void", sStorageClass(false, false, false, true, false, false)), sParameterReflection("q", "long", "3L", "long", sStorageClass(false, false, false, false, false, false)), sParameterReflection("z", "float", "43234.3F", "float", sStorageClass(false, false, false, false, false, false))
                        ]
                ]
                DType = delegate
                ,
                Id = foo
                TypeName =
                FullName = mModel.cDerived!(int).foo
                ModuleName = mModel
                MangledName = _D6mModel__T8cDerivedTiZQm3fooMFZi
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("A", "string")]
                Signature = int()
                NumArgs = 0
                Linkage = D
                ReturnType = int
                Parameters = []
                Overloads = [
                        Id = foo
                        TypeName =
                        FullName = mModel.cDerived!(int).foo
                        ModuleName = mModel
                        MangledName = 
_D6mModel__T8cDerivedTiZQm3fooMFNaNbNiNfiNgfdZi
                        Protection = private
                        Body =
                        Uses = []
                        Attributes = [sAttributeReflection("B", "string")]
                        DType = function
Signature = pure nothrow @nogc @safe int(int x, inout(float) y = 4.00000F, double x7 = 434.3)
                        NumArgs = 3
                        Linkage = D
                        ReturnType = int
                        Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "inout(float)", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("x7", "double", "void", "void", sStorageClass(false, false, false, false, false, false))
                        ]
                        ,
                        Id = foo
                        TypeName =
                        FullName = mModel.cDerived!(int).foo
                        ModuleName = mModel
                        MangledName = _D6mModel__T8cDerivedTiZQm3fooMFiKdlfZi
                        Protection = public
                        Body =
                        Uses = []
                        Attributes = [
sAttributeReflection("attr!string(\"test\", 432)", "attr!string"),
                                sAttributeReflection("4", "int")
                        ]
                        DType = function
Signature = int(int x, ref double y, long q = 3L, float z = 43234.3F)
                        NumArgs = 4
                        Linkage = D
                        ReturnType = int
                        Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "double", "void", "void", sStorageClass(false, false, false, true, false, false)), sParameterReflection("q", "long", "3L", "long", sStorageClass(false, false, false, false, false, false)), sParameterReflection("z", "float", "43234.3F", "float", sStorageClass(false, false, false, false, false, false))
                        ]
                ]
                DType = delegate
                ,
                Id = ValueProp
                TypeName =
                FullName = mModel.cDerived!(int).ValueProp
                ModuleName = mModel
                MangledName = _D6mModel__T8cDerivedTiZQm9ValuePropMFNdZi
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("VP att", "string")]
                Signature = @property int()
                NumArgs = 0
                Linkage = D
                ReturnType = int
                Parameters = []
                Overloads = []
                DType = delegate
        ]
        InheritedInterfaces = [
                Id = iX
                TypeName = iX
                FullName = mModel.iX
                ModuleName = mModel
                MangledName = C6mModel2iX
                Protection = public
                Body =
                Uses = []
                Attributes = []
                IsNested = false
                IsInnerClass = false
                HasUnsharedAliasing = true
                HasNested = false
                HasIndirections = true
                HasElaborateDestructor = false
                HasElaborateCopyConstructor = false
                HasElaborateAssign = false
                HasAliasing = true
                TypeParameters = []
                AliasThis = []
                NestedAggregates = []
                DerivedClasses = []
                Fields = [
                        Id =
                        TypeName =
                        FullName =
                        ModuleName =
                        MangledName =
                        Protection =
                        Body =
                        Uses = []
                        Attributes = []
                        DType = field
                ]
                Methods = []
                DType = interface
                InheritedInterfaces = []
                ,
                Id = iY
                TypeName = iY
                FullName = mModel.iY
                ModuleName = mModel
                MangledName = C6mModel2iY
                Protection = public
                Body =
                Uses = []
                Attributes = []
                IsNested = false
                IsInnerClass = false
                HasUnsharedAliasing = true
                HasNested = false
                HasIndirections = true
                HasElaborateDestructor = false
                HasElaborateCopyConstructor = false
                HasElaborateAssign = false
                HasAliasing = true
                TypeParameters = []
                AliasThis = []
                NestedAggregates = []
                DerivedClasses = []
                Fields = [
                        Id =
                        TypeName =
                        FullName =
                        ModuleName =
                        MangledName =
                        Protection =
                        Body =
                        Uses = []
                        Attributes = []
                        DType = field
                ]
                Methods = []
                DType = interface
                InheritedInterfaces = []
        ]
        DType = class
        IsAbstract = false
        Alignment = 8
        InheritedClasses = [
                Id = cBase
                TypeName = cBase
                FullName = mModel.cBase
                ModuleName = mModel
                MangledName = C6mModel5cBase
                Protection = public
                Body =
                Uses = []
                Attributes = []
                IsNested = false
                IsInnerClass = false
                HasUnsharedAliasing = true
                HasNested = false
                HasIndirections = true
                HasElaborateDestructor = false
                HasElaborateCopyConstructor = false
                HasElaborateAssign = false
                HasAliasing = true
                TypeParameters = []
                AliasThis = []
                NestedAggregates = []
                DerivedClasses = []
                Fields = [
                        Id = testField
                        TypeName = cBase.testField
                        FullName = mModel.cBase.testField
                        ModuleName = mModel
                        MangledName = C6mModel5cBase
                        Protection = public
                        Body =
                        Uses = []
                        Attributes = []
                        DType = field
                ]
                Methods = [
                        Id = fooBase
                        TypeName =
                        FullName = mModel.cBase.fooBase
                        ModuleName = mModel
                        MangledName = _D6mModel5cBase7fooBaseMFCQy5iBaseZCQBiQBe
                        Protection = public
                        Body =
                        Uses = []
                        Attributes = []
                        Signature = cBase(iBase c)
                        NumArgs = 1
                        Linkage = D
                        ReturnType = cBase
                        Parameters = [
sParameterReflection("c", "iBase", "void", "void", sStorageClass(false, false, false, false, false, false))
                        ]
                        Overloads = []
                        DType = delegate
                ]
                InheritedInterfaces = [
                        Id = iBase
                        TypeName = iBase
                        FullName = mModel.iBase
                        ModuleName = mModel
                        MangledName = C6mModel5iBase
                        Protection = public
                        Body =
                        Uses = []
                        Attributes = [
                                sAttributeReflection("fdsa", "string"),
                                sAttributeReflection("4", "int")
                        ]
                        IsNested = false
                        IsInnerClass = false
                        HasUnsharedAliasing = true
                        HasNested = false
                        HasIndirections = true
                        HasElaborateDestructor = false
                        HasElaborateCopyConstructor = false
                        HasElaborateAssign = false
                        HasAliasing = true
                        TypeParameters = []
                        AliasThis = []
                        NestedAggregates = []
                        DerivedClasses = []
                        Fields = [
                                Id =
                                TypeName =
                                FullName =
                                ModuleName =
                                MangledName =
                                Protection =
                                Body =
                                Uses = []
                                Attributes = []
                                DType = field
                        ]
                        Methods = [
                                Id = fooBase
                                TypeName =
                                FullName = mModel.iBase.fooBase
                                ModuleName = mModel
                                MangledName = _D6mModel5iBase7fooBaseMFCQyQtZQg
                                Protection = public
                                Body =
                                Uses = []
                                Attributes = []
                                Signature = iBase(iBase)
                                NumArgs = 1
                                Linkage = D
                                ReturnType = iBase
                                Parameters = [
sParameterReflection("", "iBase", "void", "void", sStorageClass(false, false, false, false, false, false))
                                ]
                                Overloads = []
                                DType = delegate
                        ]
                        DType = interface
                        InheritedInterfaces = []
                ]
                DType = class
                IsAbstract = false
                Alignment = 4
                InheritedClasses = [Object]
        ]

        Id = bar
        TypeName =
        FullName = mMain.bar
        ModuleName = mMain
        MangledName = _D5mMain3barFiKdfZv
        Protection = public
        Body =
        Uses = []
        Attributes = [
sAttributeReflection("attr!string(\"test\", 432)", "attr!string"),
                sAttributeReflection("4", "int")
        ]
        DType = function
        Signature = void(int x, ref double y, float z = 43234.3F)
        NumArgs = 3
        Linkage = D
        ReturnType = void
        Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "double", "void", "void", sStorageClass(false, false, false, true, false, false)), sParameterReflection("z", "float", "43234.3F", "float", sStorageClass(false, false, false, false, false, false))
        ]
        Overloads = [
                Id = bar
                TypeName =
                FullName = mMain.bar
                ModuleName = mMain
                MangledName = _D5mMain3barFiKdlfZv
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("564", "int")]
                DType = function
Signature = void(int x, ref double y, long q = 3L, float z = 43234.3F)
                NumArgs = 4
                Linkage = D
                ReturnType = void
                Parameters = [
sParameterReflection("x", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("y", "double", "void", "void", sStorageClass(false, false, false, true, false, false)), sParameterReflection("q", "long", "3L", "long", sStorageClass(false, false, false, false, false, false)), sParameterReflection("z", "float", "43234.3F", "float", sStorageClass(false, false, false, false, false, false))
                ]
        ]



Reply via email to