Example #1
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);
 }
Example #2
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);
 }
Example #3
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);
        }