Mono.Cecil.Tests.PdbTests.CreateMethodFromScratch C# (CSharp) Method

CreateMethodFromScratch() private method

private CreateMethodFromScratch ( ) : void
return void
        public void CreateMethodFromScratch()
        {
            IgnoreOnMono ();

            var module = ModuleDefinition.CreateModule ("Pan", ModuleKind.Dll);
            var type = new TypeDefinition ("Pin", "Pon", TypeAttributes.Public | TypeAttributes.Abstract | TypeAttributes.Sealed, module.ImportReference (typeof (object)));
            module.Types.Add (type);

            var method = new MethodDefinition ("Pang", MethodAttributes.Public | MethodAttributes.Static, module.ImportReference (typeof (string)));
            type.Methods.Add (method);

            var body = method.Body;

            body.InitLocals = true;

            var il = body.GetILProcessor ();
            var temp = new VariableDefinition (module.ImportReference (typeof (string)));
            body.Variables.Add (temp);

            il.Emit (OpCodes.Nop);
            il.Emit (OpCodes.Ldstr, "hello");
            il.Emit (OpCodes.Stloc, temp);
            il.Emit (OpCodes.Ldloc, temp);
            il.Emit (OpCodes.Ret);

            var sequence_point = new SequencePoint (body.Instructions [0], new Document (@"C:\test.cs")) {
                StartLine = 0,
                StartColumn = 0,
                EndLine = 0,
                EndColumn = 4,
            };

            method.DebugInformation.SequencePoints.Add (sequence_point);

            method.DebugInformation.Scope = new ScopeDebugInformation  (body.Instructions [0], null) {
                Variables = { new VariableDebugInformation (temp, "temp") }
            };

            var file = Path.Combine (Path.GetTempPath (), "Pan.dll");
            module.Write (file, new WriterParameters {
                SymbolWriterProvider = new PdbWriterProvider (),
            });

            module = ModuleDefinition.ReadModule (file, new ReaderParameters {
                SymbolReaderProvider = new PdbReaderProvider (),
            });

            method = module.GetType ("Pin.Pon").GetMethod ("Pang");

            Assert.AreEqual ("temp", method.DebugInformation.Scope.Variables [0].Name);
        }