Example #1
0
        public static void PrintModule(ModuleDefinition moduleDef, Gtk.TextView textView)
        {
            textView.Buffer.Clear();
            ILFormatter writer = new ILFormatter(textView.Buffer);

            if (moduleDef.Types.Count > 0)
            {
                writer.NewLine();
                writer.Write("// Types");
                writer.NewLine();
                writer.NewLine();
            }

            foreach (TypeDefinition typeDef in moduleDef.Types)
            {
                writer.Write(typeDef.Name);
                writer.NewLine();
            }
        }
Example #2
0
        public static void PrintAssembly(AssemblyDefinition assemblyDef, Gtk.TextView textView)
        {
            textView.Buffer.Clear();
            ILFormatter writer = new ILFormatter(textView.Buffer);

            foreach (CustomAttribute attr in assemblyDef.CustomAttributes)
            {
                writer.Write(attr.AttributeType.Name);
                writer.Write("(\"");
                if (attr.ConstructorArguments.Count > 0)
                {
                    writer.Write(attr.ConstructorArguments[0].Value.ToString());
                }
                else
                {
                    writer.Write("");
                }
                writer.Write("\")");
                writer.NewLine();
            }
        }
Example #3
0
        private static void PrintType(TypeDefinition typeDef, Gtk.TextView textView)
        {
            textView.Buffer.Clear();

            ILFormatter writer = new ILFormatter(textView.Buffer);

            if (typeDef.Fields.Count > 0)
            {
                writer.NewLine();
                writer.Write("// Fields");
                writer.NewLine();
                writer.NewLine();
            }

            foreach (FieldDefinition fieldDef in typeDef.Fields)
            {
                if (fieldDef.IsPublic)
                {
                    writer.WriteMethodAttribute("public");
                }
                else if (fieldDef.IsPrivate)
                {
                    writer.WriteMethodAttribute("private");
                }
                writer.Write(" ");

                if (fieldDef.IsStatic)
                {
                    writer.WriteMethodAttribute("static");
                }
                writer.Write(" ");

                writer.WriteType(fieldDef.FieldType.Name);
                writer.Write(" ");

                writer.WriteName(fieldDef.Name);

                writer.NewLine();
            }

            if (typeDef.Properties.Count > 0)
            {
                writer.NewLine();
                writer.Write("// Properties");
                writer.NewLine();
                writer.NewLine();
            }

            foreach (PropertyDefinition property in typeDef.Properties)
            {
                writer.WriteType(property.PropertyType.Name);
                writer.Write(" ");
                writer.WriteName(property.Name);
                writer.Write(" ");

                if ((property.GetMethod) != null || (property.SetMethod != null))
                {
                    writer.Write("{");
                    writer.NewLine();
                    if (property.GetMethod != null)
                    {
                        writer.Write("  ");
                        writer.WriteType(property.GetMethod.Name);
                        writer.NewLine();
                    }
                    if (property.SetMethod != null)
                    {
                        writer.Write("  ");
                        writer.WriteType(property.SetMethod.Name);
                        writer.NewLine();
                    }
                    writer.Write("}");
                }

                writer.NewLine();
            }

            if (typeDef.Methods.Count > 0)
            {
                writer.NewLine();
                writer.Write("// Methods");
                writer.NewLine();
                writer.NewLine();
            }

            foreach (MethodDefinition method in typeDef.Methods)
            {
                if (method.IsPublic)
                {
                    writer.WriteMethodAttribute("public");
                }
                else if (method.IsPrivate)
                {
                    writer.WriteMethodAttribute("private");
                }
                writer.Write(" ");

                if (method.IsAbstract)
                {
                    writer.Write("abstract");
                }
                else if (method.IsVirtual)
                {
                    writer.Write("virtual");
                }
                writer.Write(" ");

                if (method.IsStatic)
                {
                    writer.WriteMethodAttribute("static");
                }
                writer.Write(" ");

                if (method.IsFinal)
                {
                    writer.Write("final");
                }
                writer.Write(" ");

                writer.WriteType(method.ReturnType.Name);
                writer.Write(" ");

                writer.WriteName(method.Name);
                writer.Write("(");


                foreach (ParameterDefinition paramDef in method.Parameters)
                {
                    writer.WriteType(paramDef.ParameterType.Name);
                    writer.Write(" ");

                    writer.Write(paramDef.ToString());
                    writer.Write(" ");
                }

                writer.Write(")");
                writer.NewLine();
            }
        }
Example #4
0
        private static void PrintMethod(MethodDefinition methodDef, Gtk.TextView textView)
        {
            textView.Buffer.Clear();

            ILFormatter writer = new ILFormatter(textView.Buffer);

            writer.Indent();
            writer.WriteMethodAttribute(".method");

            if (methodDef.IsPublic)
            {
                writer.WriteMethodAttribute("public");
            }
            if (methodDef.IsPrivate)
            {
                writer.WriteMethodAttribute("private");
            }
            if (methodDef.IsHideBySig)
            {
                writer.WriteMethodAttribute("hidebysig");
            }
            if (methodDef.IsStatic)
            {
                writer.WriteMethodAttribute("static");
            }
            else
            {
                writer.WriteMethodAttribute("instance");
            }

            writer.WriteType(methodDef.ReturnType.Name);
            writer.WriteName(methodDef.Name);
            writer.Write(" (");
            if (methodDef.Parameters.Count > 0)
            {
                for (int i = 0; i < methodDef.Parameters.Count; i++)
                {
                    writer.WriteType(methodDef.Parameters[i].ParameterType.ToString());
                    writer.WriteName(methodDef.Parameters[i].Name.ToString());
                    writer.Write(" ");
                }
            }
            writer.Write(") ");
            if (methodDef.IsIL)
            {
                writer.WriteImplementationAttribute("cil");
            }
            else if (methodDef.IsNative)
            {
                writer.WriteImplementationAttribute("native");
            }

            if (methodDef.IsManaged)
            {
                writer.WriteImplementationAttribute("managed");
            }
            else if (methodDef.IsUnmanaged)
            {
                writer.WriteImplementationAttribute("unmanaged");
            }

            writer.NewLine();
            writer.Write("{");
            writer.NewLine();

            if (methodDef.Body.Variables.Count > 0)
            {
                writer.WriteKeyword(".locals init");
                writer.Write("(");
                for (int i = 0; i < methodDef.Body.Variables.Count; i++)
                {
                    writer.WriteType(methodDef.Body.Variables[i].VariableType.Name.ToString());
                    writer.WriteName(methodDef.Body.Variables[i].ToString());
                    if (i + 1 != methodDef.Body.Variables.Count)
                    {
                        writer.Write(", ");
                    }
                }
                writer.Write(")");
                writer.NewLine();
            }

            foreach (Instruction inst in methodDef.Body.Instructions)
            {
                //if (method.Body.HasExceptionHandlers) {
                foreach (ExceptionHandler handler in methodDef.Body.ExceptionHandlers)
                {
                    if (handler.FilterStart == inst)
                    {
                        writer.Indent();
                        writer.WriteExceptionDirective(".filter {");
                    }

                    //if (handler.FilterEnd == inst) {
                    //  writer.Outdent();
                    //  writer.WriteExceptionDirective("}");
                    //}

                    if (handler.TryStart == inst)
                    {
                        writer.WriteExceptionDirective(".try {");
                        writer.Indent();
                    }

                    if (handler.TryEnd == inst)
                    {
                        writer.Outdent();
                        writer.WriteExceptionDirective("}");
                    }

                    if (handler.HandlerStart == inst)
                    {
                        writer.WriteExceptionDirective(handler.HandlerType.ToString() + " {");
                        writer.Indent();
                    }

                    if (handler.HandlerEnd == inst)
                    {
                        writer.Outdent();
                        writer.WriteExceptionDirective("}");
                    }
                }
                writer.WriteInstruction(inst);
            }
            writer.Outdent();
            writer.Write("}");
        }