Exemplo n.º 1
0
        public override string TypeToString(ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null)
        {
            PlainTextOutput output = new PlainTextOutput();

            t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
            return(output.ToString());
        }
        public static void WriteTo(this ITypeDefOrRef type, ITextOutput writer, ILNameSyntax syntax = ILNameSyntax.Signature)
        {
            if (type is TypeSpec)
            {
                WriteTo(((TypeSpec)type).TypeSig, writer, syntax);
                return;
            }
            string name = PrimitiveTypeName(type.FullName);

            if (syntax == ILNameSyntax.ShortTypeName)
            {
                if (name != null)
                {
                    writer.Write(name);
                }
                else
                {
                    writer.WriteReference(Escape(type.Name), type);
                }
            }
            else if ((syntax == ILNameSyntax.Signature || syntax == ILNameSyntax.SignatureNoNamedTypeParameters) && name != null)
            {
                writer.Write(name);
            }
            else
            {
                if (syntax == ILNameSyntax.Signature || syntax == ILNameSyntax.SignatureNoNamedTypeParameters)
                {
                    writer.Write(type.IsValueType ? "valuetype " : "class ");
                }

                ITypeDefOrRef declType = type.GetDeclaringType();
                if (declType != null)
                {
                    declType.WriteTo(writer, ILNameSyntax.TypeName);
                    writer.Write('/');
                    writer.WriteReference(Escape(type.Name), type);
                }
                else
                {
                    if (!(type is TypeDef) && type.Scope != null)
                    {
                        writer.Write("[{0}]", Escape(type.Scope.GetScopeName()));
                    }
                    writer.WriteReference(Escape(type.FullName), type);
                }
            }
        }
Exemplo n.º 3
0
		public override void TypeToString(ITextOutput output, ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null)
		{
			t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
		}
Exemplo n.º 4
0
 protected override void TypeToString(IDecompilerOutput output, ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null) =>
 t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
        public static void WriteOperand(ITextOutput writer, object operand)
        {
            if (operand == null)
            {
                throw new ArgumentNullException("operand");
            }

            Instruction targetInstruction = operand as Instruction;

            if (targetInstruction != null)
            {
                WriteOffsetReference(writer, targetInstruction);
                return;
            }

            Instruction[] targetInstructions = operand as Instruction[];
            if (targetInstructions != null)
            {
                WriteLabelList(writer, targetInstructions);
                return;
            }

            Local variable = operand as Local;

            if (variable != null)
            {
                if (string.IsNullOrEmpty(variable.Name))
                {
                    writer.WriteReference(variable.Index.ToString(), variable);
                }
                else
                {
                    writer.WriteReference(Escape(variable.Name), variable);
                }
                return;
            }

            Parameter paramRef = operand as Parameter;

            if (paramRef != null)
            {
                if (string.IsNullOrEmpty(paramRef.Name))
                {
                    writer.WriteReference(paramRef.Index.ToString(), paramRef);
                }
                else
                {
                    writer.WriteReference(Escape(paramRef.Name), paramRef);
                }
                return;
            }

            MemberRef memberRef = operand as MemberRef;

            if (memberRef != null)
            {
                if (memberRef.IsMethodRef)
                {
                    memberRef.WriteMethodTo(writer);
                }
                else
                {
                    memberRef.WriteFieldTo(writer);
                }
                return;
            }

            MethodDef methodDef = operand as MethodDef;

            if (methodDef != null)
            {
                methodDef.WriteMethodTo(writer);
                return;
            }

            FieldDef fieldDef = operand as FieldDef;

            if (fieldDef != null)
            {
                fieldDef.WriteFieldTo(writer);
                return;
            }

            ITypeDefOrRef typeRef = operand as ITypeDefOrRef;

            if (typeRef != null)
            {
                typeRef.WriteTo(writer, ILNameSyntax.TypeName);
                return;
            }

            IMethod method = operand as IMethod;

            if (method != null)
            {
                method.WriteMethodTo(writer);
                return;
            }

            MethodSig sig = operand as MethodSig;

            if (sig != null)
            {
                sig.WriteTo(writer);
                return;
            }

            string s = operand as string;

            if (s != null)
            {
                writer.Write("\"" + NRefactory.CSharp.CSharpOutputVisitor.ConvertString(s) + "\"");
            }
            else if (operand is char)
            {
                writer.Write(((int)(char)operand).ToString());
            }
            else if (operand is float)
            {
                float val = (float)operand;
                if (val == 0)
                {
                    if (1 / val == float.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.Write('-');
                    }
                    writer.Write("0.0");
                }
                else if (float.IsInfinity(val) || float.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(');
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.Write(' ');
                        }
                        writer.Write(data[i].ToString("X2"));
                    }
                    writer.Write(')');
                }
                else
                {
                    writer.Write(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
                }
            }
            else if (operand is double)
            {
                double val = (double)operand;
                if (val == 0)
                {
                    if (1 / val == double.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.Write('-');
                    }
                    writer.Write("0.0");
                }
                else if (double.IsInfinity(val) || double.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(');
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.Write(' ');
                        }
                        writer.Write(data[i].ToString("X2"));
                    }
                    writer.Write(')');
                }
                else
                {
                    writer.Write(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
                }
            }
            else if (operand is bool)
            {
                writer.Write((bool)operand ? "true" : "false");
            }
            else
            {
                s = ToInvariantCultureString(operand);
                writer.Write(s);
            }
        }
Exemplo n.º 6
0
        public static void WriteOperand(ITextOutput writer, object operand, MethodDef method = null)
        {
            Instruction targetInstruction = operand as Instruction;

            if (targetInstruction != null)
            {
                WriteOffsetReference(writer, targetInstruction, method);
                return;
            }

            IList <Instruction> targetInstructions = operand as IList <Instruction>;

            if (targetInstructions != null)
            {
                WriteLabelList(writer, targetInstructions, method);
                return;
            }

            Local variable = operand as Local;

            if (variable != null)
            {
                if (string.IsNullOrEmpty(variable.Name))
                {
                    writer.WriteReference(variable.Index.ToString(), variable, TextTokenType.Number);
                }
                else
                {
                    writer.WriteReference(Escape(variable.Name), variable, TextTokenType.Local);
                }
                return;
            }

            Parameter paramRef = operand as Parameter;

            if (paramRef != null)
            {
                if (string.IsNullOrEmpty(paramRef.Name))
                {
                    if (paramRef.IsHiddenThisParameter)
                    {
                        writer.WriteReference("<hidden-this>", paramRef, TextTokenType.Parameter);
                    }
                    else
                    {
                        writer.WriteReference(paramRef.MethodSigIndex.ToString(), paramRef, TextTokenType.Parameter);
                    }
                }
                else
                {
                    writer.WriteReference(Escape(paramRef.Name), paramRef, TextTokenType.Parameter);
                }
                return;
            }

            MemberRef memberRef = operand as MemberRef;

            if (memberRef != null)
            {
                if (memberRef.IsMethodRef)
                {
                    memberRef.WriteMethodTo(writer);
                }
                else
                {
                    memberRef.WriteFieldTo(writer);
                }
                return;
            }

            MethodDef methodDef = operand as MethodDef;

            if (methodDef != null)
            {
                methodDef.WriteMethodTo(writer);
                return;
            }

            FieldDef fieldDef = operand as FieldDef;

            if (fieldDef != null)
            {
                fieldDef.WriteFieldTo(writer);
                return;
            }

            ITypeDefOrRef typeRef = operand as ITypeDefOrRef;

            if (typeRef != null)
            {
                typeRef.WriteTo(writer, ILNameSyntax.TypeName);
                return;
            }

            IMethod m = operand as IMethod;

            if (m != null)
            {
                m.WriteMethodTo(writer);
                return;
            }

            MethodSig sig = operand as MethodSig;

            if (sig != null)
            {
                sig.WriteTo(writer);
                return;
            }

            string s = operand as string;

            if (s != null)
            {
                writer.Write("\"" + NRefactory.CSharp.TextWriterTokenWriter.ConvertString(s) + "\"", TextTokenType.String);
            }
            else if (operand is char)
            {
                writer.Write(((int)(char)operand).ToString(), TextTokenType.Number);
            }
            else if (operand is float)
            {
                float val = (float)operand;
                if (val == 0)
                {
                    if (1 / val == float.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.Write("-0.0", TextTokenType.Number);
                    }
                    else
                    {
                        writer.Write("0.0", TextTokenType.Number);
                    }
                }
                else if (float.IsInfinity(val) || float.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(', TextTokenType.Operator);
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.WriteSpace();
                        }
                        writer.Write(data[i].ToString("X2"), TextTokenType.Number);
                    }
                    writer.Write(')', TextTokenType.Operator);
                }
                else
                {
                    writer.Write(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture), TextTokenType.Number);
                }
            }
            else if (operand is double)
            {
                double val = (double)operand;
                if (val == 0)
                {
                    if (1 / val == double.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.Write("-0.0", TextTokenType.Number);
                    }
                    else
                    {
                        writer.Write("0.0", TextTokenType.Number);
                    }
                }
                else if (double.IsInfinity(val) || double.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(', TextTokenType.Operator);
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.WriteSpace();
                        }
                        writer.Write(data[i].ToString("X2"), TextTokenType.Number);
                    }
                    writer.Write(')', TextTokenType.Operator);
                }
                else
                {
                    writer.Write(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture), TextTokenType.Number);
                }
            }
            else if (operand is bool)
            {
                writer.Write((bool)operand ? "true" : "false", TextTokenType.Keyword);
            }
            else
            {
                s = ToInvariantCultureString(operand);
                writer.Write(s, TextTokenHelper.GetTextTokenType(operand));
            }
        }
Exemplo n.º 7
0
 public static void WriteTo(this ITypeDefOrRef type, ITextOutput writer, ILNameSyntax syntax = ILNameSyntax.Signature)
 {
     type.WriteTo(writer, syntax, 0);
 }
Exemplo n.º 8
0
		protected override void TypeToString(IDecompilerOutput output, ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null) =>
			t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
Exemplo n.º 9
0
 public override void TypeToString(ITextOutput output, ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null)
 {
     t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
 }
Exemplo n.º 10
0
        public static void WriteOperand(ITextOutput writer, object operand)
        {
            if (operand == null)
            {
                throw new ArgumentNullException("operand");
            }

            Instruction targetInstruction = operand as Instruction;

            if (targetInstruction != null)
            {
                WriteOffsetReference(writer, targetInstruction);
                return;
            }

            Instruction[] targetInstructions = operand as Instruction[];
            if (targetInstructions != null)
            {
                WriteLabelList(writer, targetInstructions);
                return;
            }

            Local local = operand as Local;

            if (local != null)
            {
                if (string.IsNullOrEmpty(local.Name))
                {
                    writer.WriteReference("[" + local.Index.ToString() + "]", local, true);
                }
                else
                {
                    writer.WriteReference(Escape(local.Name), local, true);
                }
                return;
            }

            Parameter param = operand as Parameter;

            if (param != null)
            {
                if (string.IsNullOrEmpty(param.Name))
                {
                    writer.WriteReference("[" + param.Index.ToString() + "]", param, true);
                }
                else
                {
                    writer.WriteReference(Escape(param.Name), param, true);
                }
                return;
            }

            IMethod methodRef = operand as IMethod;

            if (methodRef != null && dnlibExtensions.IsMethod(methodRef))
            {
                methodRef.WriteTo(writer);
                writer.WriteComment(" // 0x" + methodRef.MDToken.Raw.ToString("x8"));
                return;
            }

            ITypeDefOrRef typeRef = operand as ITypeDefOrRef;

            if (typeRef != null)
            {
                typeRef.WriteTo(writer, ILNameSyntax.TypeName);
                writer.WriteComment(" // 0x" + typeRef.MDToken.Raw.ToString("x8"));
                return;
            }

            IField fieldRef = operand as IField;

            if (fieldRef != null && dnlibExtensions.IsField(fieldRef))
            {
                fieldRef.WriteTo(writer);
                writer.WriteComment(" // 0x" + fieldRef.MDToken.Raw.ToString("x8"));
                return;
            }

            string s = operand as string;

            if (s != null)
            {
                writer.WriteLiteral("\"" + NRefactory.CSharp.CSharpOutputVisitor.ConvertString(s) + "\"");
            }
            else if (operand is char)
            {
                writer.WriteLiteral(((int)(char)operand).ToString());
            }
            else if (operand is float)
            {
                float val = (float)operand;
                if (val == 0)
                {
                    if (1 / val == float.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.WriteLiteral("-");
                    }
                    writer.WriteLiteral("0.0");
                }
                else if (float.IsInfinity(val) || float.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(');
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.WriteLiteral(" ");
                        }
                        writer.WriteLiteral(data[i].ToString("X2"));
                    }
                    writer.Write(')');
                }
                else
                {
                    writer.WriteLiteral(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
                }
            }
            else if (operand is double)
            {
                double val = (double)operand;
                if (val == 0)
                {
                    if (1 / val == double.NegativeInfinity)
                    {
                        // negative zero is a special case
                        writer.WriteLiteral("-");
                    }
                    writer.WriteLiteral("0.0");
                }
                else if (double.IsInfinity(val) || double.IsNaN(val))
                {
                    byte[] data = BitConverter.GetBytes(val);
                    writer.Write('(');
                    for (int i = 0; i < data.Length; i++)
                    {
                        if (i > 0)
                        {
                            writer.WriteLiteral(" ");
                        }
                        writer.WriteLiteral(data[i].ToString("X2"));
                    }
                    writer.Write(')');
                }
                else
                {
                    writer.WriteLiteral(val.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
                }
            }
            else if (operand is bool)
            {
                writer.WriteLiteral((bool)operand ? "true" : "false");
            }
            else
            {
                s = ToInvariantCultureString(operand);
                writer.WriteLiteral(s);
            }
        }
Exemplo n.º 11
0
 public override string TypeToString(ITypeDefOrRef t, bool includeNamespace, IHasCustomAttribute attributeProvider = null)
 {
     PlainTextOutput output = new PlainTextOutput();
     t.WriteTo(output, includeNamespace ? ILNameSyntax.TypeName : ILNameSyntax.ShortTypeName);
     return output.ToString();
 }