On Dec 6, 3:49 pm, Karan Sev <[EMAIL PROTECTED]> wrote:
> Hi,
> Currently ILDASM does not display the generic parameter in class
> declaration but uses it in method declaration. e.g.
>
> .class public auto ansi beforefieldinit Test.CollectionBase`1
>
> instead of
>
> .class public auto ansi beforefieldinit Test.CollectionBase`1<T>
>
> To fix this in
> Mono.Disassembler.ReflectionDisassembler::WriteTypeHeader replace
>
> m_writer.WriteLine (Formater.Escape (type.Name));
>
> with
> //Emit the name of the class without terminating the line
> m_writer.Write(Formater.Escape (type.Name));
> if (type.HasGenericParameters) {
> m_writer.Write("<");
> for (int i = 0; i < type.GenericParameters.Count; i++)
> {
> m_writer.Write(type.GenericParameters
> [i].FullName);
> //If there are more than one Generic Parameters
> //separate them by commas.
> if (i < type.GenericParameters.Count - 1) {
> m_writer.Write(",");
> }
> }
> m_writer.Write(">");
> }
> m_writer.WriteLine();
>
> Regards,
> Karan Sev
> p.s. I am not sure what the convention is about the paths in a patch
> file. If there is one, I would appreciate it if some could let me
> know.
>
> ========== Patch File ============
> --- D:\Source Code\Mono\Cecil\ildasm\Mono.Disassembler
> \ReflectionDisassembler.cs 2008-11-25 18:14:27.000000000 +-0530
> +++ D:\Source Code\Decompiler\Mirror\04\ReflectionDisassembler.cs
> 2008-12-06 16:11:54.000000000 +-0530
> @@ -121,13 +121,27 @@
> m_writer.WriteFlags (attributes, (int)
> TypeAttributes.LayoutMask,
> m_typeLayoutVals, m_typeLayoutMap);
> m_writer.WriteFlags (attributes, (int)
> TypeAttributes.StringFormatMask,
> m_typeFormatVals, m_typeFormatMap);
> m_writer.WriteFlags (attributes, m_typeVals,
> m_typeMap);
>
> - m_writer.WriteLine (Formater.Escape (type.Name));
> + //Emit the name of the class without terminating the line
> + m_writer.Write(Formater.Escape (type.Name));
> + if (type.HasGenericParameters) {
> + m_writer.Write("<");
> + for (int i = 0; i < type.GenericParameters.Count; i+
> +) {
> + m_writer.Write(type.GenericParameters
> [i].FullName);
> + //If there are more than one Generic Parameters
> + //separate them by commas.
> + if (i < type.GenericParameters.Count - 1) {
> + m_writer.Write(",");
> + }
> + }
> + m_writer.Write(">");
> + }
> + m_writer.WriteLine();
>
> if (type.BaseType != null) {
> m_writer.Indent ();
> m_writer.Write ("extends ");
> m_writer.WriteLine (Formater.Format
> (type.BaseType));
> m_writer.Unindent ();
Hi,
I have created a new patch file that does not have the path issue.
Sorry for the double post.
rv
Index: ReflectionDisassembler.cs
===================================================================
--- ReflectionDisassembler.cs (revision 120939)
+++ ReflectionDisassembler.cs (working copy)
@@ -124,7 +124,21 @@
m_typeFormatVals, m_typeFormatMap);
m_writer.WriteFlags (attributes, m_typeVals, m_typeMap);
- m_writer.WriteLine (Formater.Escape (type.Name));
+ //Emit the name of the class without terminating the line
+ m_writer.Write(Formater.Escape (type.Name));
+ if (type.HasGenericParameters) {
+ m_writer.Write("<");
+ for (int i = 0; i < type.GenericParameters.Count; i+
+) {
+ m_writer.Write(type.GenericParameters
[i].FullName);
+ //If there are more than one Generic Parameters
+ //separate them by commas.
+ if (i < type.GenericParameters.Count - 1) {
+ m_writer.Write(",");
+ }
+ }
+ m_writer.Write(">");
+ }
+ m_writer.WriteLine();
if (type.BaseType != null) {
m_writer.Indent ();
--~--~---------~--~----~------------~-------~--~----~
--
mono-cecil
-~----------~----~----~----~------~----~------~--~---