Пример #1
0
    public DMethodInfo GetMethod(string iface, string name)
    {
        DMethodInfo dmi = new DMethodInfo();

        dmi.Name = name;
        dmi.DeclaringInterface = new DTypeInfo(iface);

        Type       declType = dmi.DeclaringInterface.ToType();
        MethodInfo mi       = declType.GetMethod(name);

        List <string> locals = new List <string>();
        MethodBody    body   = mi.GetMethodBody();

        foreach (LocalVariableInfo lvar in body.LocalVariables)
        {
            locals.Add(lvar.LocalType.FullName);
        }
        dmi.Body.Locals = locals.ToArray();

        List <DTypeInfo> parms = new List <DTypeInfo>();

        foreach (ParameterInfo parm in mi.GetParameters())
        {
            parms.Add(new DTypeInfo(parm.ParameterType.FullName));
        }
        dmi.Parameters = parms.ToArray();

        dmi.ReturnType = new DTypeInfo(mi.ReturnType.FullName);

        ILReader2 ilr = new ILReader2(mi);

        dmi.Body.Code = ilr.Iterate();

        return(dmi);
    }
Пример #2
0
    public Type ToType()
    {
        Type t;

        if (!ILReader2.TryGetType(Name, out t))
        {
            return(null);
        }
        return(t);
    }
Пример #3
0
 public void DeclareLocals(ILGenerator ilg)
 {
     foreach (string local in Locals)
     {
         Type t;
         if (!ILReader2.TryGetType(local, out t))
         {
             break;
         }
         ilg.DeclareLocal(t);
     }
 }