public virtual void Insert(int addr, Bytecode opcode, string s) { //System.out.println("before insert of "+opcode+"("+s+"):"+ Arrays.toString(impl.instrs)); EnsureCapacity(1 + Instruction.OperandSizeInBytes); int instrSize = 1 + Instruction.OperandSizeInBytes; // make room for opcode, opnd Array.Copy(impl.instrs, addr, impl.instrs, addr + instrSize, ip - addr); int save = ip; ip = addr; Emit1(null, opcode, s); ip = save + instrSize; //System.out.println("after insert of "+opcode+"("+s+"):"+ Arrays.toString(impl.instrs)); // adjust addresses for BR and BRF int a = addr + instrSize; while (a < ip) { Bytecode op = (Bytecode)impl.instrs[a]; Instruction I = Instruction.instructions[(int)op]; if (op == Bytecode.INSTR_BR || op == Bytecode.INSTR_BRF) { int opnd = BytecodeDisassembler.GetShort(impl.instrs, a + 1); WriteShort(impl.instrs, a + 1, (short)(opnd + instrSize)); } a += I.nopnds * Instruction.OperandSizeInBytes + 1; } //System.out.println("after insert of "+opcode+"("+s+"):"+ Arrays.toString(impl.instrs)); }
public virtual string Disassemble() { BytecodeDisassembler dis = new BytecodeDisassembler(this); using (StringWriter sw = new StringWriter()) { sw.WriteLine(dis.Disassemble()); sw.WriteLine("Strings:"); sw.WriteLine(dis.GetStrings()); sw.WriteLine("Bytecode to template map:"); sw.WriteLine(dis.GetSourceMap()); return(sw.ToString()); } }
public virtual string GetInstructions() { BytecodeDisassembler dis = new BytecodeDisassembler(this); return(dis.GetInstructions()); }
protected virtual void Trace(TemplateFrame frame, int ip) { Template self = frame.Template; StringBuilder tr = new StringBuilder(); BytecodeDisassembler dis = new BytecodeDisassembler(self.impl); StringBuilder buf = new StringBuilder(); dis.DisassembleInstruction(buf, ip); string name = self.impl.Name + ":"; if (object.ReferenceEquals(self.impl.Name, Template.UnknownName)) name = string.Empty; tr.Append(string.Format("{0,-40}", name + buf)); tr.Append("\tstack=["); for (int i = 0; i <= sp; i++) { object o = operands[i]; PrintForTrace(tr, frame, o); } tr.Append(" ], calls="); tr.Append(frame.GetEnclosingInstanceStackString()); tr.Append(", sp=" + sp + ", nw=" + nwline); string s = tr.ToString(); if (_debug) executeTrace.Add(s); if (trace) Console.WriteLine(s); }
public virtual string GetInstructions() { BytecodeDisassembler dis = new BytecodeDisassembler(this); return dis.GetInstructions(); }
public virtual string Disassemble() { BytecodeDisassembler dis = new BytecodeDisassembler(this); using (StringWriter sw = new StringWriter()) { sw.WriteLine(dis.Disassemble()); sw.WriteLine("Strings:"); sw.WriteLine(dis.GetStrings()); sw.WriteLine("Bytecode to template map:"); sw.WriteLine(dis.GetSourceMap()); return sw.ToString(); } }