예제 #1
0
        public override void print(Output @out)
        {
            Decompiler d = new Decompiler(function);

            @out.print("function");
            printMain(@out, d, true);
        }
예제 #2
0
        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
        }
예제 #3
0
 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);
     }
 }
예제 #4
0
        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);
            }
        }
예제 #5
0
 public SetBlockOperationOther(int line, Branch _branch, Decompiler _d, int _target)
     : base(line)
 {
     branch = _branch;
     d = _d;
     target = _target;
 }
예제 #6
0
        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());
            //    }
            //  }
            //
        }
예제 #7
0
        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);
        }
예제 #8
0
 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
 }
예제 #9
0
 public override void print(Output @out)
 {
     Decompiler d = new Decompiler(function);
     @out.print("function");
     printMain(@out, d, true);
 }