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); }
public Type ToType() { Type t; if (!ILReader2.TryGetType(Name, out t)) { return(null); } return(t); }
public void DeclareLocals(ILGenerator ilg) { foreach (string local in Locals) { Type t; if (!ILReader2.TryGetType(local, out t)) { break; } ilg.DeclareLocal(t); } }