Trying to get parameter info of an overloaded method, it doesn't return the names. The same code works fine for a free function.

        Id = foo
        TypeName =
        FullName = main.foo
        ModuleName = main
        MangledName = _D4main3fooFiKdfZv
        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))
        ]



vs





        Methods = [
                Id = foo
                TypeName = int()
                FullName = mModel.cDerived!(int).foo
                ModuleName = mModel
                MangledName = 6mModel__T8cDerivedTiZQm3foo
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("A", "string")]
                Signature = int()
                NumArgs = 0
                Linkage = D
                ReturnType = int
                Parameters = []
                DType = delegate
                Overloads = []
                ,
                Id = foo
                TypeName = pure nothrow @nogc @safe int(int, inout(float))
                FullName = mModel.cDerived!(int).foo
                ModuleName = mModel
                MangledName = 6mModel__T8cDerivedTiZQm3foo
                Protection = public
                Body =
                Uses = []
                Attributes = [sAttributeReflection("A", "string")]
                Signature = pure nothrow @nogc @safe int(int, inout(float))
                NumArgs = 2
                Linkage = D
                ReturnType = int
                Parameters = [
sParameterReflection("", "int", "void", "void", sStorageClass(false, false, false, false, false, false)), sParameterReflection("", "inout(float)", "void", "void", sStorageClass(false, false, false, false, false, false))
                ]
                DType = delegate
                Overloads = []
                ,




sParameterReflection("z", "float", "43234.3F", "float", sStorageClass(false, false, false, false, false, false))

vs

sParameterReflection("", "int", "void", "void", sStorageClass(false, false, false, false, false, false)),

notice that some info is field out but not all.

The code is here:
https://github.com/IncipientDesigns/Dlang_Reflect/blob/master/mReflect.d

The Base, Aggregate, Function, and Method classes are the appropriate ones to look at. cFunctionReflection does all the work though

[Field reflunkory]

Also, with

cFieldReflection I cannot pass the field as a type on to the base class to reduce code duplication. Ideally I should be able to pass a field around as a type so that reflection can occur on it. This seems like a language design issue but maybe there is a trick?




Reply via email to