Пример #1
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, MethodDef method, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(method.Name), TextTokenKindUtils.GetTextTokenType(method));
     output.Write("(", TextTokenKind.Operator);
     foreach (var p in method.Parameters)
     {
         if (p.IsHiddenThisParameter)
         {
             continue;
         }
         if (p.MethodSigIndex > 0)
         {
             output.WriteCommaSpace();
         }
         language.WriteType(output, p.Type.ToTypeDefOrRef(), false, p.ParamDef);
     }
     if (method.CallingConvention == CallingConvention.VarArg || method.CallingConvention == CallingConvention.NativeVarArg)
     {
         if (method.MethodSig.GetParamCount() > 0)
         {
             output.WriteCommaSpace();
         }
         output.Write("...", TextTokenKind.Operator);
     }
     output.Write(")", TextTokenKind.Operator);
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, method.ReturnType.ToTypeDefOrRef(), false, method.Parameters.ReturnParameter.ParamDef);
     WriteToken(output, method, showToken);
 }
Пример #2
0
 static void WriteLong(this ISyntaxHighlightOutput output, InstructionVM instr)
 {
     output.WriteShort(instr);
     output.WriteSpace();
     output.Write(instr.Code.ToOpCode().Name, TextTokenKind.OpCode);
     output.WriteSpace();
     Write(output, instr.InstructionOperandVM);
 }
Пример #3
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, EventDef @event, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(@event.Name), TextTokenKindUtils.GetTextTokenType(@event));
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, @event.EventType, false);
     WriteToken(output, @event, showToken);
 }
Пример #4
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, PropertyDef property, bool showToken, bool?isIndexer)
 {
     language.WriteName(output, property, isIndexer);
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, property.PropertySig.GetRetType().ToTypeDefOrRef(), false);
     WriteToken(output, property, showToken);
 }
Пример #5
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, FieldDef field, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(field.Name), TextTokenKindUtils.GetTextTokenType(field));
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, field.FieldType.ToTypeDefOrRef(), false);
     WriteToken(output, field, showToken);
 }
Пример #6
0
		protected override void Write(ISyntaxHighlightOutput output) {
			output.Write(dnSpy_AsmEditor_Resources.HexNode_PE_Section, TextTokenKind.Keyword);
			output.WriteSpace();
			output.Write("#", TextTokenKind.Operator);
			output.Write(sectionNumber.ToString(), TextTokenKind.Number);
			output.Write(":", TextTokenKind.Operator);
			output.WriteSpace();
			output.Write(string.Format("{0}", imageSectionHeaderVM.NameVM.String), TextTokenKind.Type);
		}
Пример #7
0
		protected override void Write(ISyntaxHighlightOutput output) {
			output.Write(string.Format("{0}", index + 1), TextTokenKind.Number);
			if (infoTuple != null) {
				output.WriteSpace();
				output.Write("-", TextTokenKind.Operator);
				output.WriteSpace();
				infoTuple.Item2(output);
			}
		}
Пример #8
0
 protected override void Write(ISyntaxHighlightOutput output)
 {
     output.Write(dnSpy_AsmEditor_Resources.HexNode_StorageStream, TextTokenKind.InstanceField);
     output.WriteSpace();
     output.Write("#", TextTokenKind.Operator);
     output.Write(streamNumber.ToString(), TextTokenKind.Number);
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     output.Write(string.Format("{0}", storageStreamVM.RCNameVM.StringZ), storageStreamType == StorageStreamType.None ? TextTokenKind.Error : TextTokenKind.Type);
 }
Пример #9
0
 protected override void Write(ISyntaxHighlightOutput output)
 {
     output.Write(string.Format("{0:X2}", (byte)tablesStreamVM.Table), TextTokenKind.Number);
     output.WriteSpace();
     output.Write(string.Format("{0}", tablesStreamVM.Table), TextTokenKind.Type);
     output.WriteSpace();
     output.Write("(", TextTokenKind.Operator);
     output.Write(string.Format("{0}", tablesStreamVM.Rows), TextTokenKind.Number);
     output.Write(")", TextTokenKind.Operator);
 }
Пример #10
0
 protected override void Write(ISyntaxHighlightOutput output)
 {
     output.Write(dnSpy_AsmEditor_Resources.HexNode_PE_Section, TextTokenKind.Keyword);
     output.WriteSpace();
     output.Write("#", TextTokenKind.Operator);
     output.Write(sectionNumber.ToString(), TextTokenKind.Number);
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     output.Write(string.Format("{0}", imageSectionHeaderVM.NameVM.String), TextTokenKind.Type);
 }
Пример #11
0
 protected override void Write(ISyntaxHighlightOutput output)
 {
     output.Write(string.Format("{0}", index + 1), TextTokenKind.Number);
     if (infoTuple != null)
     {
         output.WriteSpace();
         output.Write("-", TextTokenKind.Operator);
         output.WriteSpace();
         infoTuple.Item2(output);
     }
 }
Пример #12
0
        public void WriteName(BreakpointVM vm)
        {
            var ilbp = vm.Breakpoint as ILCodeBreakpoint;

            if (ilbp != null)
            {
                vm.NameError = false;
                bool printedToken = false;
                if (vm.Context.ShowTokens)
                {
                    WriteToken(output, ilbp.SerializedDnToken.Token);
                    output.WriteSpace();
                    printedToken = true;
                }
                // If this is a method in a dynamic module and the module hasn't been loaded yet,
                // this call will try to load it, and then open a dialog box showing the progress.
                // But in rare cases we can't show the dialog box because of Dispatcher limitations,
                // so if we must load the module, fail. Passing in false will prevent loading
                // dynamic modules.
                var method = vm.GetMethodDef(false);
                if (method == null)
                {
                    vm.NameError = true;
                    if (printedToken)
                    {
                        output.Write("???", TextTokenKind.Error);
                    }
                    else
                    {
                        output.Write(string.Format("0x{0:X8}", ilbp.SerializedDnToken.Token), TextTokenKind.Number);
                    }
                }
                else
                {
                    MethodLanguage.Write(output, method, GetFlags(vm.Context));
                }
                output.WriteSpace();
                output.Write("+", TextTokenKind.Operator);
                output.WriteSpace();
                WriteILOffset(output, ilbp.ILOffset);
                return;
            }

            var debp = vm.Breakpoint as DebugEventBreakpoint;

            if (debp != null)
            {
                //TODO:
                return;
            }

            Debug.Fail(string.Format("Unknown breakpoint type: {0}", vm.Breakpoint.GetType()));
        }
Пример #13
0
 static void WriteShort(this ISyntaxHighlightOutput output, InstructionVM instr)
 {
     output.Write(instr.Index.ToString(), TextTokenKind.Number);
     output.WriteSpace();
     output.Write("(", TextTokenKind.Operator);
     output.Write(string.Format("{0:X4}", instr.Offset), TextTokenKind.Number);
     output.Write(")", TextTokenKind.Operator);
 }
Пример #14
0
 void WriteToken(ISyntaxHighlightOutput output, IMDTokenProvider tok, bool showToken)
 {
     if (!showToken)
     {
         return;
     }
     output.WriteSpace();
     output.Write("@", TextTokenKind.Operator);
     output.Write(string.Format("{0:X8}", tok.MDToken.Raw), TextTokenKind.Number);
 }
Пример #15
0
		protected override void Write(ISyntaxHighlightOutput output, ILanguage language) {
			if (hidesParent) {
				output.Write("(", TextTokenKind.Operator);
				output.Write(dnSpy_Analyzer_Resources.HidesParent, TextTokenKind.Text);
				output.Write(")", TextTokenKind.Operator);
				output.WriteSpace();
			}
			language.WriteType(output, analyzedMethod.DeclaringType, true);
			output.Write(".", TextTokenKind.Operator);
			new NodePrinter().Write(output, language, analyzedMethod, Context.ShowToken);
		}
Пример #16
0
 protected override void Write(ISyntaxHighlightOutput output, ILanguage language)
 {
     if (hidesParent)
     {
         output.Write("(", TextTokenKind.Operator);
         output.Write(dnSpy_Analyzer_Resources.HidesParent, TextTokenKind.Text);
         output.Write(")", TextTokenKind.Operator);
         output.WriteSpace();
     }
     language.WriteType(output, analyzedEvent.DeclaringType, true);
     output.Write(".", TextTokenKind.Operator);
     new NodePrinter().Write(output, language, analyzedEvent, Context.ShowToken);
 }
Пример #17
0
 static void Write(this ISyntaxHighlightOutput output, IList <InstructionVM> instrs)
 {
     output.Write("[", TextTokenKind.Operator);
     for (int i = 0; i < instrs.Count; i++)
     {
         if (i > 0)
         {
             output.Write(",", TextTokenKind.Operator);
             output.WriteSpace();
         }
         output.WriteShort(instrs[i]);
     }
     output.Write("]", TextTokenKind.Operator);
 }
Пример #18
0
        void WriteNamespaceName(ISyntaxHighlightOutput output, int nsIndex, int nameIndex)
        {
            var ns   = ReadStringsHeap(nsIndex);
            var name = ReadStringsHeap(nameIndex);

            output.Write(name, TextTokenKind.Type);

            if (!string.IsNullOrEmpty(ns))
            {
                output.WriteSpace();
                output.Write("-", TextTokenKind.Operator);
                output.WriteSpace();

                var parts = ns.Split('.');
                for (int i = 0; i < parts.Length; i++)
                {
                    output.Write(parts[i], TextTokenKind.NamespacePart);
                    if (i + 1 < parts.Length)
                    {
                        output.Write(".", TextTokenKind.Operator);
                    }
                }
            }
        }
Пример #19
0
        public void Write(ISyntaxHighlightOutput output, ILanguage language, AssemblyDef asm, bool showToken, bool showAssemblyVersion, bool showAssemblyPublicKeyToken)
        {
            output.Write(asm.Name, IsExe(asm.ManifestModule) ? TextTokenKind.AssemblyExe : TextTokenKind.Assembly);

            bool showAsmVer         = showAssemblyVersion;
            bool showPublicKeyToken = showAssemblyPublicKeyToken && !PublicKeyBase.IsNullOrEmpty2(asm.PublicKeyToken);

            if (showAsmVer || showPublicKeyToken)
            {
                output.WriteSpace();
                output.Write("(", TextTokenKind.Operator);

                bool needComma = false;
                if (showAsmVer)
                {
                    if (needComma)
                    {
                        output.WriteCommaSpace();
                    }
                    needComma = true;

                    output.Write(asm.Version);
                }

                if (showPublicKeyToken)
                {
                    if (needComma)
                    {
                        output.WriteCommaSpace();
                    }
                    needComma = true;

                    var pkt = asm.PublicKeyToken;
                    if (PublicKeyBase.IsNullOrEmpty2(pkt))
                    {
                        output.Write("null", TextTokenKind.Keyword);
                    }
                    else
                    {
                        output.Write(pkt.ToString(), TextTokenKind.Number);
                    }
                }

                output.Write(")", TextTokenKind.Operator);
            }

            WriteToken(output, asm, showToken);
        }
Пример #20
0
        public void Write(ISyntaxHighlightOutput output, ILanguage language, AssemblyDef asm, bool showToken, bool showAssemblyVersion, bool showAssemblyPublicKeyToken)
        {
            output.Write(asm.Name, IsExe(asm.ManifestModule) ? TextTokenKind.AssemblyExe : TextTokenKind.Assembly);

            bool showAsmVer = showAssemblyVersion;
            bool showPublicKeyToken = showAssemblyPublicKeyToken && !PublicKeyBase.IsNullOrEmpty2(asm.PublicKeyToken);

            if (showAsmVer || showPublicKeyToken) {
                output.WriteSpace();
                output.Write("(", TextTokenKind.Operator);

                bool needComma = false;
                if (showAsmVer) {
                    if (needComma)
                        output.WriteCommaSpace();
                    needComma = true;

                    output.Write(asm.Version);
                }

                if (showPublicKeyToken) {
                    if (needComma)
                        output.WriteCommaSpace();
                    needComma = true;

                    var pkt = asm.PublicKeyToken;
                    if (PublicKeyBase.IsNullOrEmpty2(pkt))
                        output.Write("null", TextTokenKind.Keyword);
                    else
                        output.Write(pkt.ToString(), TextTokenKind.Number);
                }

                output.Write(")", TextTokenKind.Operator);
            }

            WriteToken(output, asm, showToken);
        }
Пример #21
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, PropertyDef property, bool showToken, bool? isIndexer)
 {
     language.WriteName(output, property, isIndexer);
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, property.PropertySig.GetRetType().ToTypeDefOrRef(), false);
     WriteToken(output, property, showToken);
 }
Пример #22
0
		protected override void Write(ISyntaxHighlightOutput output) {
			output.Write(dnSpy_AsmEditor_Resources.HexNode_StorageStream, TextTokenKind.InstanceField);
			output.WriteSpace();
			output.Write("#", TextTokenKind.Operator);
			output.Write(streamNumber.ToString(), TextTokenKind.Number);
			output.Write(":", TextTokenKind.Operator);
			output.WriteSpace();
			output.Write(string.Format("{0}", storageStreamVM.RCNameVM.StringZ), storageStreamType == StorageStreamType.None ? TextTokenKind.Error : TextTokenKind.Type);
		}
Пример #23
0
        public static void WriteObject(ISyntaxHighlightOutput output, object obj, WriteObjectFlags flags = WriteObjectFlags.None)
        {
            if (IsNull(obj))
            {
                output.Write("null", TextTokenKind.Keyword);
                return;
            }

            var mr = obj as IMemberRef;

            if (mr != null)
            {
                if (simpleILPrinter.Write(SyntaxHighlightOutputToTextOutput.Create(output), mr))
                {
                    return;
                }
            }

            var local = obj as LocalVM;

            if (local != null)
            {
                output.Write(IdentifierEscaper.Escape(GetLocalName(local.Name, local.Index)), TextTokenKind.Local);
                output.WriteSpace();
                output.WriteLocalParameterIndex(local.Index);
                return;
            }

            var parameter = obj as Parameter;

            if (parameter != null)
            {
                if (parameter.IsHiddenThisParameter)
                {
                    output.Write("this", TextTokenKind.Keyword);
                }
                else
                {
                    output.Write(IdentifierEscaper.Escape(GetParameterName(parameter.Name, parameter.Index)), TextTokenKind.Parameter);
                    output.WriteSpace();
                    output.WriteLocalParameterIndex(parameter.Index);
                }
                return;
            }

            var instr = obj as InstructionVM;

            if (instr != null)
            {
                if ((flags & WriteObjectFlags.ShortInstruction) != 0)
                {
                    output.WriteShort(instr);
                }
                else
                {
                    output.WriteLong(instr);
                }
                return;
            }

            var instrs = obj as IList <InstructionVM>;

            if (instrs != null)
            {
                output.Write(instrs);
                return;
            }

            var methodSig = obj as MethodSig;

            if (methodSig != null)
            {
                simpleILPrinter.Write(SyntaxHighlightOutputToTextOutput.Create(output), methodSig);
                return;
            }

            if (obj is TypeSig)
            {
                simpleILPrinter.Write(SyntaxHighlightOutputToTextOutput.Create(output), obj as TypeSig);
                return;
            }

            if (obj is Code)
            {
                output.Write(((Code)obj).ToOpCode().Name, TextTokenKind.OpCode);
                return;
            }

            // This code gets called by the combobox and it sometimes passes in the empty string.
            // It's never shown in the UI.
            Debug.Assert(string.Empty.Equals(obj), "Shouldn't be here");
            output.Write(obj.ToString(), TextTokenKind.Text);
        }
Пример #24
0
		void WriteNamespaceName(ISyntaxHighlightOutput output, int nsIndex, int nameIndex) {
			var ns = ReadStringsHeap(nsIndex);
			var name = ReadStringsHeap(nameIndex);

			output.Write(name, TextTokenKind.Type);

			if (!string.IsNullOrEmpty(ns)) {
				output.WriteSpace();
				output.Write("-", TextTokenKind.Operator);
				output.WriteSpace();

				var parts = ns.Split('.');
				for (int i = 0; i < parts.Length; i++) {
					output.Write(parts[i], TextTokenKind.NamespacePart);
					if (i + 1 < parts.Length)
						output.Write(".", TextTokenKind.Operator);
				}
			}
		}
Пример #25
0
 void WriteToken(ISyntaxHighlightOutput output, IMDTokenProvider tok, bool showToken)
 {
     if (!showToken)
         return;
     output.WriteSpace();
     output.Write("@", TextTokenKind.Operator);
     output.Write(string.Format("{0:X8}", tok.MDToken.Raw), TextTokenKind.Number);
 }
Пример #26
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, MethodDef method, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(method.Name), TextTokenKindUtils.GetTextTokenType(method));
     output.Write("(", TextTokenKind.Operator);
     foreach (var p in method.Parameters) {
         if (p.IsHiddenThisParameter)
             continue;
         if (p.MethodSigIndex > 0)
             output.WriteCommaSpace();
         language.WriteType(output, p.Type.ToTypeDefOrRef(), false, p.ParamDef);
     }
     if (method.CallingConvention == CallingConvention.VarArg || method.CallingConvention == CallingConvention.NativeVarArg) {
         if (method.MethodSig.GetParamCount() > 0)
             output.WriteCommaSpace();
         output.Write("...", TextTokenKind.Operator);
     }
     output.Write(")", TextTokenKind.Operator);
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, method.ReturnType.ToTypeDefOrRef(), false, method.Parameters.ReturnParameter.ParamDef);
     WriteToken(output, method, showToken);
 }
Пример #27
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, EventDef @event, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(@event.Name), TextTokenKindUtils.GetTextTokenType(@event));
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, @event.EventType, false);
     WriteToken(output, @event, showToken);
 }
Пример #28
0
 public void Write(ISyntaxHighlightOutput output, ILanguage language, FieldDef field, bool showToken)
 {
     output.Write(NameUtils.CleanIdentifier(field.Name), TextTokenKindUtils.GetTextTokenType(field));
     output.WriteSpace();
     output.Write(":", TextTokenKind.Operator);
     output.WriteSpace();
     language.WriteType(output, field.FieldType.ToTypeDefOrRef(), false);
     WriteToken(output, field, showToken);
 }
Пример #29
0
		protected override void Write(ISyntaxHighlightOutput output) {
			output.Write(string.Format("{0:X2}", (byte)tablesStreamVM.Table), TextTokenKind.Number);
			output.WriteSpace();
			output.Write(string.Format("{0}", tablesStreamVM.Table), TextTokenKind.Type);
			output.WriteSpace();
			output.Write("(", TextTokenKind.Operator);
			output.Write(string.Format("{0}", tablesStreamVM.Rows), TextTokenKind.Number);
			output.Write(")", TextTokenKind.Operator);
		}