Example source (run against latest github pull):

        class MainClass
        {
                public static void Main (string[] args)
                {
                        var mod = 
ModuleDefinition.ReadModule("/usr/lib/mono/2.0/
System.dll");
                        var crashOn =
mod.GetType("Microsoft.VisualBasic.VBCodeGenerator").GetMethods().First(m
=> m.Name == "OutputTypeNamePair");
                        ILParser.Parse(crashOn, new EmptyVisitor());
                        // Find other crash sites:
//                      foreach (var m in mod.GetAllTypes().SelectMany(t =>
t.Methods).Where(mt => mt.HasBody))
//                      {
//                              ILParser.Parse(m, new EmptyVisitor());
//                      }

                }
                public class EmptyVisitor: IILVisitor {
                        #region IILVisitor implementation
                        public void OnInlineNone (Mono.Cecil.Cil.OpCode opcode)
                        {}

                        public void OnInlineSByte (Mono.Cecil.Cil.OpCode 
opcode, sbyte
value)
                        { }

                        public void OnInlineByte (Mono.Cecil.Cil.OpCode opcode, 
byte value)
                        { }

                        public void OnInlineInt32 (Mono.Cecil.Cil.OpCode 
opcode, int value)
                        { }

                        public void OnInlineInt64 (Mono.Cecil.Cil.OpCode 
opcode, long
value)
                        { }

                        public void OnInlineSingle (Mono.Cecil.Cil.OpCode 
opcode, float
value)
                        { }

                        public void OnInlineDouble (Mono.Cecil.Cil.OpCode 
opcode, double
value)
                        { }

                        public void OnInlineString (Mono.Cecil.Cil.OpCode 
opcode, string
value)
                        { }

                        public void OnInlineBranch (Mono.Cecil.Cil.OpCode 
opcode, int
offset)
                        { }

                        public void OnInlineSwitch (Mono.Cecil.Cil.OpCode 
opcode, int[]
offsets)
                        { }

                        public void OnInlineVariable (Mono.Cecil.Cil.OpCode 
opcode,
Mono.Cecil.Cil.VariableDefinition variable)
                        { }

                        public void OnInlineArgument (Mono.Cecil.Cil.OpCode 
opcode,
ParameterDefinition parameter)
                        { }

                        public void OnInlineSignature (Mono.Cecil.Cil.OpCode 
opcode,
CallSite callSite)
                        { }

                        public void OnInlineType (Mono.Cecil.Cil.OpCode opcode,
TypeReference type)
                        { }

                        public void OnInlineField (Mono.Cecil.Cil.OpCode opcode,
FieldReference field)
                        { }

                        public void OnInlineMethod (Mono.Cecil.Cil.OpCode 
opcode,
MethodReference method)
                        { }
                        #endregion


                }
        }


Stacktrace on exception:
Mono.Cecil.Mixin.GetParameter (self=(null), index=2)
Mono.Cecil.Cil.CodeReader.GetParameter (index=2)
Mono.Cecil.Rocks.ILParser.ParseCode (code_size=54,
context={Mono.Cecil.Rocks.ILParser.ParseContext})
Mono.Cecil.Rocks.ILParser.ParseFatMethod
(context={Mono.Cecil.Rocks.ILParser.ParseContext})
Mono.Cecil.Rocks.ILParser.Parse (method={System.Void
Microsoft.VisualBasic.VBCodeGenerator::OutputTypeNamePair(System.CodeDom.CodeTypeReference,System.String)},
visitor={CrashMethodParser.MainClass.EmptyVisitor})


Am I using the visitor wrong? (In this example I do nothing, except
let them get invoked).


Cheers,
Davy

-- 
--
mono-cecil

Reply via email to