public static void WriteTo(this MethodSig sig, ITextOutput writer) { if (sig.ExplicitThis) { writer.Write("instance", TextTokenType.Keyword); writer.WriteSpace(); writer.Write("explicit", TextTokenType.Keyword); writer.WriteSpace(); } else if (sig.HasThis) { writer.Write("instance", TextTokenType.Keyword); writer.WriteSpace(); } sig.RetType.WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); writer.WriteSpace(); writer.Write('(', TextTokenType.Operator); var parameters = sig.GetParameters(); for (int i = 0; i < parameters.Count; ++i) { if (i > 0) { writer.Write(',', TextTokenType.Operator); writer.WriteSpace(); } parameters[i].WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); } writer.Write(")", TextTokenType.Operator); }
public static void WriteMethodTo(this IMethod method, ITextOutput writer) { MethodSig sig = method.MethodSig; if (sig.ExplicitThis) { writer.Write("instance explicit "); } else if (sig.HasThis) { writer.Write("instance "); } sig.RetType.WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); writer.Write(' '); if (method.DeclaringType != null) { method.DeclaringType.WriteTo(writer, ILNameSyntax.TypeName); writer.Write("::"); } MethodDef md = method as MethodDef; if (md != null && md.IsCompilerControlled) { writer.WriteReference(Escape(method.Name + "$PST" + method.MDToken.ToInt32().ToString("X8")), method); } else { writer.WriteReference(Escape(method.Name), method); } MethodSpec gim = method as MethodSpec; if (gim != null) { writer.Write('<'); for (int i = 0; i < gim.GenericInstMethodSig.GenericArguments.Count; i++) { if (i > 0) { writer.Write(", "); } gim.GenericInstMethodSig.GenericArguments[i].WriteTo(writer); } writer.Write('>'); } writer.Write("("); var parameters = sig.GetParameters(); for (int i = 0; i < parameters.Count; ++i) { if (i > 0) { writer.Write(", "); } parameters[i].WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); } writer.Write(")"); }
public void MethodTest() { Type me = typeof(Stack <GenericsUnitTest>); MethodTableCursor cur = f[TableNames.Method].GetCursor() as MethodTableCursor; foreach (MethodInfo m in me.GetMethods( BindingFlags.DeclaredOnly | BindingFlags.Static | BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)) { cur.Goto(m.MetadataToken & 0xFFFFFF); Assert.AreEqual(m.Name, f.Strings[cur.Name]); MethodSig s = cur.GetMethodSignature(); // Type instantiation is not known by looking only at metadata, we must help the resolver here! Assert.AreSame(s.ReturnType.GetReflectionType(me.GetGenericArguments()), m.ReturnType); IEnumerator <CLIType> cp = s.GetParameters().GetEnumerator(); foreach (ParameterInfo p in m.GetParameters()) { Assert.IsTrue(cp.MoveNext()); Assert.AreSame(cp.Current.GetReflectionType(me.GetGenericArguments()), p.ParameterType); } } }
public static void WriteTo(this MethodSig sig, ITextOutput writer) { if (sig.ExplicitThis) { writer.Write("instance explicit "); } else if (sig.HasThis) { writer.Write("instance "); } sig.RetType.WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); writer.Write(" ("); var parameters = sig.GetParameters(); for (int i = 0; i < parameters.Count; ++i) { if (i > 0) { writer.Write(", "); } parameters[i].WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); } writer.Write(")"); }
public static void Write(this ITextOutput writer, MethodSig sig, IMethod method = null) { if (sig == null && method != null) { sig = method.MethodSig; } if (sig == null) { return; } if (sig.ExplicitThis) { writer.Write("instance", TextTokenType.Keyword); writer.WriteSpace(); writer.Write("explicit", TextTokenType.Keyword); writer.WriteSpace(); } else if (sig.HasThis) { writer.Write("instance", TextTokenType.Keyword); writer.WriteSpace(); } sig.RetType.WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); writer.WriteSpace(); if (method != null) { if (method.DeclaringType != null) { method.DeclaringType.WriteTo(writer, ILNameSyntax.TypeName); writer.Write("::", TextTokenType.Operator); } MethodDef md = method as MethodDef; if (md != null && md.IsCompilerControlled) { writer.WriteReference(Escape(method.Name + "$PST" + method.MDToken.ToInt32().ToString("X8")), method, TextTokenHelper.GetTextTokenType(method)); } else { writer.WriteReference(Escape(method.Name), method, TextTokenHelper.GetTextTokenType(method)); } } MethodSpec gim = method as MethodSpec; if (gim != null && gim.GenericInstMethodSig != null) { writer.Write('<', TextTokenType.Operator); for (int i = 0; i < gim.GenericInstMethodSig.GenericArguments.Count; i++) { if (i > 0) { writer.Write(',', TextTokenType.Operator); writer.WriteSpace(); } gim.GenericInstMethodSig.GenericArguments[i].WriteTo(writer); } writer.Write('>', TextTokenType.Operator); } writer.Write("(", TextTokenType.Operator); var parameters = sig.GetParameters(); for (int i = 0; i < parameters.Count; ++i) { if (i > 0) { writer.Write(',', TextTokenType.Operator); writer.WriteSpace(); } parameters[i].WriteTo(writer, ILNameSyntax.SignatureNoNamedTypeParameters); } writer.Write(")", TextTokenType.Operator); }