예제 #1
0
 public Instruction CopyTo(Dictionary <object, object> ops, Instruction instr)
 {
     instr.OpCode        = this.Code.ToOpCode();
     instr.Operand       = BodyUtils.ToOperandModel(ops, this.Operand);
     instr.SequencePoint = this.SequencePoint;
     return(instr);
 }
예제 #2
0
        protected override void CopyItemsAsText(LocalVM[] locals)
        {
            Array.Sort(locals, (a, b) => a.Index.CompareTo(b.Index));

            var output = new PlainTextOutput();

            for (int i = 0; i < locals.Length; i++)
            {
                if (i > 0)
                {
                    output.WriteLine();
                }

                var local = locals[i];
                output.Write(local.Index.ToString(), TextTokenType.Number);
                output.Write('\t', TextTokenType.Text);
                output.Write(local.IsPinned ? "P" : string.Empty, TextTokenType.Text);
                output.Write('\t', TextTokenType.Text);
                output.Write(local.IsCompilerGenerated ? "C" : string.Empty, TextTokenType.Text);
                output.Write('\t', TextTokenType.Text);
                output.Write(local.Name ?? string.Empty, TextTokenType.Local);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, local.Type);
            }
            if (locals.Length > 1)
            {
                output.WriteLine();
            }

            Clipboard.SetText(output.ToString());
        }
예제 #3
0
 public ExceptionHandlerOptions(Dictionary <object, object> ops, ExceptionHandler eh)
 {
     this.TryStart     = (InstructionVM)BodyUtils.TryGetVM(ops, eh.TryStart);
     this.TryEnd       = (InstructionVM)BodyUtils.TryGetVM(ops, eh.TryEnd);
     this.FilterStart  = (InstructionVM)BodyUtils.TryGetVM(ops, eh.FilterStart);
     this.HandlerStart = (InstructionVM)BodyUtils.TryGetVM(ops, eh.HandlerStart);
     this.HandlerEnd   = (InstructionVM)BodyUtils.TryGetVM(ops, eh.HandlerEnd);
     this.CatchType    = eh.CatchType;
     this.HandlerType  = eh.HandlerType;
 }
예제 #4
0
 public ExceptionHandler CopyTo(Dictionary <object, object> ops, ExceptionHandler eh)
 {
     eh.TryStart     = BodyUtils.TryGetModel(ops, this.TryStart) as Instruction;
     eh.TryEnd       = BodyUtils.TryGetModel(ops, this.TryEnd) as Instruction;
     eh.FilterStart  = BodyUtils.TryGetModel(ops, this.FilterStart) as Instruction;
     eh.HandlerStart = BodyUtils.TryGetModel(ops, this.HandlerStart) as Instruction;
     eh.HandlerEnd   = BodyUtils.TryGetModel(ops, this.HandlerEnd) as Instruction;
     eh.CatchType    = this.CatchType;
     eh.HandlerType  = this.HandlerType;
     return(eh);
 }
예제 #5
0
        protected override void CopyItemsAsText(ExceptionHandlerVM[] ehs)
        {
            Array.Sort(ehs, (a, b) => a.Index.CompareTo(b.Index));

            var output = new PlainTextOutput();

            for (int i = 0; i < ehs.Length; i++)
            {
                if (i > 0)
                {
                    output.WriteLine();
                }

                var eh = ehs[i];
                output.Write(eh.Index.ToString(), TextTokenType.Number);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.TryStartVM.SelectedItem);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.TryEndVM.SelectedItem);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.FilterStartVM.SelectedItem);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.HandlerStartVM.SelectedItem);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.HandlerEndVM.SelectedItem);
                output.Write('\t', TextTokenType.Text);
                output.Write(((EnumVM)eh.HandlerTypeVM.Items[eh.HandlerTypeVM.SelectedIndex]).Name, TextTokenType.Text);
                output.Write('\t', TextTokenType.Text);
                BodyUtils.WriteObject(output, eh.CatchType);
            }
            if (ehs.Length > 1)
            {
                output.WriteLine();
            }

            Clipboard.SetText(output.ToString());
        }
예제 #6
0
        public static void CopyItemsAsTextToClipboard(InstructionVM[] instrs)
        {
            var output = new PlainTextOutput();

            for (int i = 0; i < instrs.Length; i++)
            {
                if (i > 0)
                {
                    output.WriteLine();
                }

                var instr = instrs[i];
                output.Write(instr.Index.ToString(), TextTokenType.Number);
                output.Write('\t', TextTokenType.Text);
                output.Write(string.Format("{0:X4}", instr.Offset), TextTokenType.Label);
                output.Write('\t', TextTokenType.Text);
                output.Write(instr.Code.ToOpCode().ToString(), TextTokenType.OpCode);

                switch (instr.InstructionOperandVM.InstructionOperandType)
                {
                case InstructionOperandType.None:
                    break;

                case InstructionOperandType.SByte:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.SByte.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.Byte:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.Byte.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.Int32:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.Int32.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.Int64:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.Int64.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.Single:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.Single.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.Double:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.Double.StringValue, TextTokenType.Number);
                    break;

                case InstructionOperandType.String:
                    output.Write('\t', TextTokenType.Text);
                    output.Write(instr.InstructionOperandVM.String.StringValue, TextTokenType.String);
                    break;

                case InstructionOperandType.Field:
                case InstructionOperandType.Method:
                case InstructionOperandType.Token:
                case InstructionOperandType.Type:
                case InstructionOperandType.MethodSig:
                case InstructionOperandType.BranchTarget:
                case InstructionOperandType.SwitchTargets:
                case InstructionOperandType.Local:
                case InstructionOperandType.Parameter:
                    output.Write('\t', TextTokenType.Text);
                    BodyUtils.WriteObject(output, instr.InstructionOperandVM.Value);
                    break;

                default: throw new InvalidOperationException();
                }
            }
            if (instrs.Length > 1)
            {
                output.WriteLine();
            }

            Clipboard.SetText(output.ToString());
        }
예제 #7
0
 public InstructionOptions(Dictionary <object, object> ops, Instruction instr)
 {
     this.Code          = instr.OpCode.Code;
     this.Operand       = BodyUtils.ToOperandVM(ops, instr.Operand);
     this.SequencePoint = instr.SequencePoint;
 }