コード例 #1
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
        private void WriteMethodLocals(MethodDefinition definition, ISourceCodeOutput output)
        {
            if (definition == null || !definition.HasBody || !definition.Body.InitLocals)
            {
                return;
            }

            var body = definition.Body;

            output.WriteLine(".locals init (");
            output.Indent();

            for (int i = 0; i < body.Variables.Count; i++)
            {
                var variable = body.Variables[i];
                if (i > 0)
                {
                    output.WriteLine(",");
                }
                output.Write("[{0}] {1} {2}", variable.Index, variable.VariableType.ToShortTypeName(), variable);
            }

            output.WriteLine(")");
            output.Unindent();
        }
コード例 #2
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
 private void CloseBlock(ISourceCodeOutput output)
 {
     output.Unindent();
     output.WriteLine("}");
 }
コード例 #3
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
        public void WriteType(TypeDefinition definition, ISourceCodeOutput output, DecompilerOptions options)
        {
            output.WriteDefinition(".class ", definition);

            //if (definition.IsClass || definition.IsInterface) builder.AppendFormat("{0}.class ", indent);
            if (definition.IsPublic || definition.IsNestedPublic)
            {
                output.Write("public ");
            }
            if (definition.IsNotPublic || definition.IsNestedPrivate)
            {
                output.Write("private ");
            }
            if (definition.IsInterface)
            {
                output.Write("interface ");
            }
            if (definition.IsAbstract)
            {
                output.Write("abstract ");
            }
            if (definition.IsSequentialLayout)
            {
                output.Write("sequential ");
            }
            if (definition.IsAutoLayout)
            {
                output.Write("auto ");
            }
            if (definition.IsAnsiClass)
            {
                output.Write("ansi ");
            }
            if (definition.IsSealed)
            {
                output.Write("sealed ");
            }
            if (definition.IsNested)
            {
                output.Write("nested ");
            }
            if (definition.IsNestedFamily)
            {
                output.Write("family ");
            }
            if (definition.IsBeforeFieldInit)
            {
                output.Write("beforefieldinit ");
            }

            output.Write(definition.ToShortTypeName());

            if (definition.BaseType != null)
            {
                output.WriteLine();
                output.Indent();
                output.Write("extends {0}", definition.BaseType.ToShortTypeName());
                output.Unindent();
            }

            if (definition.HasInterfaces)
            {
                output.WriteLine();
                output.Indent();
                output.Write("implements ");

                for (int i = 0; i < definition.Interfaces.Count; i++)
                {
                    if (i > 0)
                    {
                        output.Write(", ");
                    }
                    output.Write(definition.Interfaces[i].FullName);
                }
                output.Unindent();
            }

            OpenBlock(output);

            if (definition.HasCustomAttributes)
            {
                WriteCustomAttributes(definition.CustomAttributes, output);
                output.WriteLine();
            }

            if (options != null && options.FullDecompilation)
            {
                if (definition.HasNestedTypes)
                {
                    foreach (var nestedType in definition.NestedTypes.OrderBy(t => t.Name))
                    {
                        WriteType(nestedType, output, options);
                        output.WriteLine();
                    }
                }

                if (definition.HasMethods)
                {
                    foreach (var method in definition.Methods.OrderBy(m => m.Name))
                    {
                        if (method.IsGetter || method.IsSetter)
                        {
                            continue;
                        }
                        if (method.IsAddOn || method.IsRemoveOn)
                        {
                            continue;
                        }
                        WriteMethod(method, output, null);
                        output.WriteLine();
                    }
                }

                if (definition.HasProperties)
                {
                    foreach (var property in definition.Properties.OrderBy(p => p.Name))
                    {
                        WriteProperty(property, output, null);
                        output.WriteLine();
                    }
                }

                if (definition.HasEvents)
                {
                    foreach (var eventDefinition in definition.Events.OrderBy(e => e.Name))
                    {
                        WriteEvent(eventDefinition, output, null);
                        output.WriteLine();
                    }
                }

                if (definition.HasFields)
                {
                    foreach (var field in definition.Fields.OrderBy(f => f.Name))
                    {
                        WriteField(field, output, null);
                        output.WriteLine();
                    }
                }
            }

            CloseBlock(output);
        }
コード例 #4
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
 private void CloseBlock(ISourceCodeOutput output)
 {
   output.Unindent();
   output.WriteLine("}");
 }
コード例 #5
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
    public void WriteType(TypeDefinition definition, ISourceCodeOutput output, DecompilerOptions options)
    {
      output.WriteDefinition(".class ", definition);

      //if (definition.IsClass || definition.IsInterface) builder.AppendFormat("{0}.class ", indent);
      if (definition.IsPublic || definition.IsNestedPublic) output.Write("public ");
      if (definition.IsNotPublic || definition.IsNestedPrivate) output.Write("private ");
      if (definition.IsInterface) output.Write("interface ");
      if (definition.IsAbstract) output.Write("abstract ");
      if (definition.IsSequentialLayout) output.Write("sequential ");
      if (definition.IsAutoLayout) output.Write("auto ");
      if (definition.IsAnsiClass) output.Write("ansi ");
      if (definition.IsSealed) output.Write("sealed ");
      if (definition.IsNested) output.Write("nested ");
      if (definition.IsNestedFamily) output.Write("family ");
      if (definition.IsBeforeFieldInit) output.Write("beforefieldinit ");

      output.Write(definition.ToShortTypeName());

      if (definition.BaseType != null)
      {
        output.WriteLine();
        output.Indent();
        output.Write("extends {0}", definition.BaseType.ToShortTypeName());
        output.Unindent();
      }

      if (definition.HasInterfaces)
      {
        output.WriteLine();
        output.Indent();
        output.Write("implements ");

        for (int i = 0; i < definition.Interfaces.Count; i++)
        {
          if (i > 0) output.Write(", ");
          output.Write(definition.Interfaces[i].FullName);
        }
        output.Unindent();
      }

      OpenBlock(output);

      if (definition.HasCustomAttributes)
      {
        WriteCustomAttributes(definition.CustomAttributes, output);
        output.WriteLine();
      }

      if (options != null && options.FullDecompilation)
      {
        if (definition.HasNestedTypes)
        {
          foreach (var nestedType in definition.NestedTypes.OrderBy(t => t.Name))
          {
            WriteType(nestedType, output, options);
            output.WriteLine();
          }
        }

        if (definition.HasMethods)
        {
          foreach (var method in definition.Methods.OrderBy(m => m.Name))
          {
            if (method.IsGetter || method.IsSetter) continue;
            if (method.IsAddOn || method.IsRemoveOn) continue;
            WriteMethod(method, output, null);
            output.WriteLine();
          }
        }

        if (definition.HasProperties)
        {
          foreach (var property in definition.Properties.OrderBy(p => p.Name))
          {
            WriteProperty(property, output, null);
            output.WriteLine();
          }
        }

        if (definition.HasEvents)
        {
          foreach (var eventDefinition in definition.Events.OrderBy(e => e.Name))
          {
            WriteEvent(eventDefinition, output, null);
            output.WriteLine();
          }
        }

        if (definition.HasFields)
        {
          foreach (var field in definition.Fields.OrderBy(f => f.Name))
          {
            WriteField(field, output, null);
            output.WriteLine();
          }
        }
      }

      CloseBlock(output);
    }
コード例 #6
0
ファイル: ILCodeWriter.cs プロジェクト: nnieslan/IL.View
    private void WriteMethodLocals(MethodDefinition definition, ISourceCodeOutput output)
    {
      if (definition == null || !definition.HasBody || !definition.Body.InitLocals) return;

      var body = definition.Body;

      output.WriteLine(".locals init (");
      output.Indent();

      for (int i = 0; i < body.Variables.Count; i++)
      {
        var variable = body.Variables[i];
        if (i > 0) output.WriteLine(",");
        output.Write("[{0}] {1} {2}", variable.Index, variable.VariableType.ToShortTypeName(), variable);
      }

      output.WriteLine(")");
      output.Unindent();
    }