public void Dump(IrPrintingPolicy printingPolicy)
        {
            if (!printingPolicy.ColorEnabled)
            {
                Console.Out.Write(printingPolicy.IndentationString + this);
                return;
            }

            Console.Out.Write(printingPolicy.IndentationString);
            Console.ForegroundColor = ConsoleColor.DarkGray;
            Console.Out.Write(Label + ": ");
            Console.ResetColor();

            Console.ForegroundColor = ConsoleColor.Blue;
            Console.Out.Write(" " + OutputRegisterString);
            Console.ResetColor();

            if (OutputRegisters.Count() > 0)
            {
                Console.Out.Write(" <- ");
            }

            Console.ForegroundColor = ConsoleColor.Magenta;
            Console.Out.Write(this.OpCodeAndOperandString + " ");
            Console.ResetColor();

            Console.ForegroundColor = ConsoleColor.Blue;
            Console.Out.Write(InputRegisterString);
            Console.ResetColor();
        }
        /// <summary>
        ///  Dumps the linear ir representation of a method to stdout.
        /// </summary>
        public void Dump(IrPrintingPolicy printingPolicy)
        {
            var @out = Console.Out;

            @out.WriteLine(printingPolicy.IndentationString + MethodDefinition.FullName);
            @out.WriteLine(printingPolicy.IndentationString + "{");
            printingPolicy.IncrementIndentation();
            foreach (var instruction in this.Instructions)
            {
                instruction.Dump(printingPolicy);
                @out.WriteLine();
            }
            printingPolicy.DecrementIndentation();
            @out.WriteLine(printingPolicy.IndentationString + "}");
        }
        /// <summary>
        ///   Dumps linear ir for a type definition.
        /// </summary>
        public void Dump(TypeDefinition typeDefinition)
        {
            var @out = Console.Out;

            @out.WriteLine(typeDefinition.FullName);
            @out.WriteLine("{");
            IrPrintingPolicy.IncrementIndentation();
            foreach (var methodDefinition in typeDefinition.Methods.Where(x => x.HasBody))
            {
                Dump(methodDefinition);
                @out.WriteLine();
            }
            IrPrintingPolicy.DecrementIndentation();
            @out.WriteLine("}");
        }
 /// <summary>
 ///   Construct an object based on a module filename and a printing policy.
 /// </summary>
 public LinearIrDump(String filename, IrPrintingPolicy policy)
     : this(filename)
 {
     IrPrintingPolicy = policy;
 }
 /// <summary>
 ///   Construct an object based on a module filename.
 /// </summary>
 /// <param name="filename"> The module filename </param>
 public LinearIrDump(String filename)
 {
     moduleDefinition = ModuleDefinition.ReadModule(filename);
     IrPrintingPolicy = new IrPrintingPolicy();
 }