Exemplo n.º 1
0
        //FIXME: Move to ReflectionDisassembler ?
        public void DisassembleMethod(MethodDefinition method, CilWriter writer)
        {
            m_writer = writer;
            //    .method public hidebysig  specialname
            //               instance default class [mscorlib]System.IO.TextWriter get_BaseWriter ()  cil managed
            //

            // write method header
            m_writer.Write(".method ");

            //emit flags
            WriteMethodVisibility(method.Attributes);
            WriteMethodAttributes(method.Attributes);

            m_writer.WriteLine();
            m_writer.Indent();

            if (method.HasThis)
            {
                m_writer.Write("instance ");
            }

            //call convention
            WriteMethodCallingConvention(method.CallingConvention);

            //return type
            //method.ReturnType.ReturnType.Accept (m_reflectDis);
            //FIXME: another visitor for printing names (refs to methoddef/typedef/typeref etc
            m_writer.Write(Formater.Signature(method.ReturnType.ReturnType, false, true));
            m_writer.Write(method.Name);

            //( params )
            m_writer.Write(" (");
            method.Parameters.Accept(m_reflectDis);
            m_writer.Write(") ");
            //cil managed
            WriteMethodCodeType(method.ImplAttributes);
            WriteMethodManagedType(method.ImplAttributes);

            m_writer.Unindent();

            m_writer.OpenBlock();
            m_reflectDis.VisitCustomAttributeCollection(method.CustomAttributes);
            m_reflectDis.VisitSecurityDeclarationCollection(method.SecurityDeclarations);

            if (method.HasBody)
            {
                VisitMethodBody(method.Body);
            }

            m_writer.CloseBlock();
        }
Exemplo n.º 2
0
        public override void VisitAssemblyDefinition(AssemblyDefinition asm)
        {
            m_writer.Write(".assembly ");
            m_writer.WriteLine(String.Concat("'", Formater.Escape(asm.Name.Name), "'"));
            m_writer.OpenBlock();
            AssemblyDetails(asm.Name);

            m_rd.VisitCustomAttributeCollection(asm.CustomAttributes);
            m_rd.VisitSecurityDeclarationCollection(asm.SecurityDeclarations);

            m_writer.CloseBlock();
            m_writer.WriteLine();
        }