public override void print(Output @out) { Decompiler d = new Decompiler(function); @out.print("function"); printMain(@out, d, true); }
private void printMain(Output @out, Decompiler d, bool includeFirst) { @out.print("("); int Start = includeFirst ? 0 : 1; if (function.numParams > Start) { new VariableTarget(d.declList[Start]).print(@out); for (int i = Start + 1; i < function.numParams; i++) { @out.print(", "); new VariableTarget(d.declList[i]).print(@out); } } if ((function.vararg & 1) == 1) { if (function.numParams > Start) { @out.print(", ..."); } else { @out.print("..."); } } @out.print(")"); @out.println(); @out.indent(); d.decompile(); d.print(@out); @out.dedent(); @out.print("end"); //out.println(); //This is an extra space for formatting }
public override void printClosure(Output @out, Target name) { Decompiler d = new Decompiler(function); @out.print("function "); if(function.numParams >= 1 && d.declList[0].name.Equals("self") && name is TableTarget) { name.printMethod(@out); printMain(@out, d, false); } else { name.print(@out); printMain(@out, d, true); } }
public override void printClosure(Output @out, Target name) { Decompiler d = new Decompiler(function); @out.print("function "); if (function.numParams >= 1 && d.declList[0].name.Equals("self") && name is TableTarget) { name.printMethod(@out); printMain(@out, d, false); } else { name.print(@out); printMain(@out, d, true); } }
public SetBlockOperationOther(int line, Branch _branch, Decompiler _d, int _target) : base(line) { branch = _branch; d = _d; target = _target; }
public override Operation process(Decompiler d) { if(empty) { Expression expression = r.getExpression(branch.setTarget, end); branch.useExpression(expression); return new RegisterSet(end - 1, branch.setTarget, branch.asExpression(r)); } else if(assign != null) { branch.useExpression(assign.getFirstValue()); Target target1 = assign.getFirstTarget(); Expression @value = Value; return new SetBlockOperation(end - 1, target1, @value); } else { return new SetBlockOperationOther(end - 1,branch,d,target); //JAVA TO VB & C# CONVERTER TODO TASK: Anonymous inner classes are not converted to .NET: //return super.process(); } // // if(sblock.branch.begin == sblock.branch.end && r.isLocal(sblock.target, line)) { // sblock.useAssignment(new Assignment(r.getTarget(sblock.target, line), r.getExpression(sblock.target, line))); // } else if(sblock.branch.begin == sblock.branch.end) { // sblock.useAssignment(new Assignment(null, r.getExpression(sblock.target, sblock.begin))); // r.setValue(sblock.target, line, sblock.getValue()); // } else { // //System.out.println("--sblock"); // Expression expr = null; // int register = 0; // for(; register < registers; register++) { // if(updated[register] == line) { // expr = r.getValue(register, line + 1); // break; // } // } // if(expr == null) { // //System.out.println("-- null/null"); // expr = r.getExpression(sblock.target, line); // } // sblock.useAssignment(new Assignment(null, expr)); // r.setValue(sblock.target, line, sblock.getValue()); // } // } // }
public override Operation process(Decompiler d) { if(statements.Count == 1) { Statement stmt = statements[0]; if(stmt is Assignment) { Assignment assign = (Assignment) stmt; if(assign.getArity() == 1) { if(branch is TestNode) { TestNode node = (TestNode) branch; Declaration decl = r.getDeclaration(node.test, node.line); if(assign.getFirstTarget().isDeclaration(decl)) { Expression expr; if(node._invert) { expr = new BinaryExpression("or", new LocalVariable(decl), assign.getFirstValue(), Expression.PRECEDENCE_OR, Expression.ASSOCIATIVITY_NONE); } else { expr = new BinaryExpression("and", new LocalVariable(decl), assign.getFirstValue(), Expression.PRECEDENCE_AND, Expression.ASSOCIATIVITY_NONE); } return new IfThenEndBlockOperation(end - 1, assign, expr); //JAVA TO VB & C# CONVERTER TODO TASK: Anonymous inner classes are not converted to .NET: /*{ public Statement process(Registers r, Block block) { return new Assignment(assign.getFirstTarget(), expr); } }*/ } } } } } else if(statements.Count == 0 && stack != null) { int test = branch.getRegister(); if(test < 0) { for(int reg = 0; reg < r.registers; reg++) { if(r.getUpdated(reg, branch.end - 1) >= branch.begin) { if(test >= 0) { test = -1; break; } test = reg; } } } if(test >= 0) { if(r.getUpdated(test, branch.end - 1) >= branch.begin) { Expression right = r.getValue(test, branch.end); Branch setb = d.popSetCondition(stack, stack.peek().end); setb.useExpression(right); int testreg = test; return new IfThenEndBlockOperation2(end - 1, testreg, branch, setb); //JAVA TO VB & C# CONVERTER TODO TASK: Anonymous inner classes are not converted to .NET: /*{ public Statement process(Registers r, Block block) { r.setValue(testreg, branch.end - 1, setb.asExpression(r)); return null; } }*/ } } } return base.process(d); }
private void printMain(Output @out, Decompiler d, bool includeFirst) { @out.print("("); int Start = includeFirst ? 0 : 1; if(function.numParams > Start) { new VariableTarget(d.declList[Start]).print(@out); for(int i = Start + 1; i < function.numParams; i++) { @out.print(", "); new VariableTarget(d.declList[i]).print(@out); } } if((function.vararg & 1) == 1) { if(function.numParams > Start) { @out.print(", ..."); } else { @out.print("..."); } } @out.print(")"); @out.println(); @out.indent(); d.decompile(); d.print(@out); @out.dedent(); @out.print("end"); //out.println(); //This is an extra space for formatting }