Exemple #1
0
 public ForBlock(LFunction function, int begin, int end, int register, Registers r)
     : base(function, begin, end)
 {
     this.register = register;
     this.r = r;
     statements = new List<Statement>(end - begin + 1);
 }
Exemple #2
0
        public override Expression asExpression(Registers r)
        {
            bool   transpose = false;
            string op        = _invert ? "~=" : "==";

            return(new BinaryExpression(op, r.getKExpression(!transpose ? left : right, line), r.getKExpression(!transpose ? right : left, line), Expression.PRECEDENCE_COMPARE, Expression.ASSOCIATIVITY_LEFT));
        }
Exemple #3
0
 public RepeatBlock(LFunction function, Branch branch, Registers r)
     : base(function, branch.end, branch.begin)
 {
     //System.out.println("-- creating repeat block " + branch.end + " .. " + branch.begin);
     this.branch = branch;
     this.r = r;
     statements = new List<Statement>(branch.begin - branch.end + 1);
 }
 public IfThenEndBlock(LFunction function, Branch branch, unluac.util.Stack<Branch> stack, Registers r)
     : base(function, branch.begin == branch.end ? branch.begin - 1 : branch.begin, branch.begin == branch.end ? branch.begin - 1 : branch.end)
 {
     this.branch = branch;
     this.stack = stack;
     this.r = r;
     statements = new List<Statement>(branch.end - branch.begin + 1);
 }
Exemple #5
0
 public WhileBlock(LFunction function, Branch branch, int loopback, Registers r)
     : base(function, branch.begin, branch.end)
 {
     this.branch = branch;
     this.loopback = loopback;
     this.r = r;
     statements = new List<Statement>(branch.end - branch.begin + 1);
 }
 public IfThenElseBlock(LFunction function, Branch branch, int loopback, bool emptyElse, Registers r)
     : base(function, branch.begin, branch.end)
 {
     this.branch = branch;
     this.loopback = loopback;
     this.emptyElse = emptyElse;
     this.r = r;
     statements = new List<Statement>(branch.end - branch.begin + 1);
 }
Exemple #7
0
	  public override Expression asExpression(Registers r)
	  {
		if(_invert)
		{
		  return (new NotBranch(this.invert())).asExpression(r);
		}
		else
		{
		  return r.getExpression(test, line);
		}
	  }
Exemple #8
0
 public SetBlock(LFunction function, Branch branch, int target, int line, int begin, int end, bool empty, Registers r)
     : base(function, begin, end)
 {
     this.empty = empty;
     if(begin == end)
     this.begin -= 1;
     this.target = target;
     this.branch = branch;
     this.r = r;
     //System.out.println("-- set block " + begin + " .. " + end);
 }
Exemple #9
0
 public override Expression asExpression(Registers r)
 {
     if (_invert)
     {
         return((new NotBranch(this.invert())).asExpression(r));
     }
     else
     {
         return(r.getExpression(test, line));
     }
 }
Exemple #10
0
 public override Statement process(Registers r, Block block)
 {
     if (table.isTableLiteral())
     {
         table.addEntry(new TableLiteral.Entry(index, @value, !isTable, timestamp));
         return(null);
     }
     else
     {
         return(new Assignment(new TableTarget(table, index), @value));
     }
 }
Exemple #11
0
	  public override Statement process(Registers r, Block block)
	  {
		if(table.isTableLiteral())
		{
		  table.addEntry(new TableLiteral.Entry(index, @value, !isTable, timestamp));
		  return null;
		}
		else
		{
		  return new Assignment(new TableTarget(table, index), @value);
		}
	  }
Exemple #12
0
        public override Statement process(Registers r, Block block)
        {
            //System.out.println("-- processing register set " + register + "@" + line);
            r.setValue(register, line, @value);
//
//    if(value.isMultiple()) {
//      System.out.println("-- process multiple @" + register);
//    }
//
            if (r.isAssignable(register, line))
            {
                //System.out.println("-- assignment!");
                return(new Assignment(r.getTarget(register, line), @value));
            }
            else
            {
                return(null);
            }
        }
Exemple #13
0
	  public override Statement process(Registers r, Block block)
	  {
	//System.out.println("-- processing register set " + register + "@" + line);
		r.setValue(register, line, @value);
//    
//    if(value.isMultiple()) {
//      System.out.println("-- process multiple @" + register);
//    }
//    
		if(r.isAssignable(register, line))
		{
	  //System.out.println("-- assignment!");
		  return new Assignment(r.getTarget(register, line), @value);
		}
		else
		{
		  return null;
		}
	  }
Exemple #14
0
 public override Expression asExpression(Registers r)
 {
     bool transpose = false;
     Expression leftExpression = r.getKExpression(left, line);
     Expression rightExpression = r.getKExpression(right, line);
     if(((left | right) & 256) == 0)
     {
       transpose = r.getUpdated(left, line) > r.getUpdated(right, line);
     }
     else
     {
       transpose = rightExpression.getConstantIndex() < leftExpression.getConstantIndex();
     }
     string op = !transpose ? "<" : ">";
     Expression rtn = new BinaryExpression(op, !transpose ? leftExpression : rightExpression, !transpose ? rightExpression : leftExpression, Expression.PRECEDENCE_COMPARE, Expression.ASSOCIATIVITY_LEFT);
     if(_invert)
     {
       rtn = new UnaryExpression("not ", rtn, Expression.PRECEDENCE_UNARY);
     }
     return rtn;
 }
Exemple #15
0
        public override Expression asExpression(Registers r)
        {
            bool       transpose       = false;
            Expression leftExpression  = r.getKExpression(left, line);
            Expression rightExpression = r.getKExpression(right, line);

            if (((left | right) & 256) == 0)
            {
                transpose = r.getUpdated(left, line) > r.getUpdated(right, line);
            }
            else
            {
                transpose = rightExpression.getConstantIndex() < leftExpression.getConstantIndex();
            }
            string     op  = !transpose ? "<=" : ">=";
            Expression rtn = new BinaryExpression(op, !transpose ? leftExpression : rightExpression, !transpose ? rightExpression : leftExpression, Expression.PRECEDENCE_COMPARE, Expression.ASSOCIATIVITY_LEFT);

            if (_invert)
            {
                rtn = new UnaryExpression("not ", rtn, Expression.PRECEDENCE_UNARY);
            }
            return(rtn);
        }
Exemple #16
0
 public override Expression asExpression(Registers r)
 {
     return(new UnaryExpression("not ", branch.asExpression(r), Expression.PRECEDENCE_UNARY));
 }
Exemple #17
0
 public override Statement process(Registers r, Block block)
 {
     return(new Assignment(target, @value));
 }
 public override Statement process(Registers r, Block block)
 {
     return(new Return(values));
 }
Exemple #19
0
	  public override Statement process(Registers r, Block block)
	  {
		return new Assignment(new GlobalTarget(global), @value);
	  }
Exemple #20
0
	  abstract public Statement process(Registers r, Block block);
Exemple #21
0
 public abstract Expression asExpression(Registers r);
Exemple #22
0
 abstract public Statement process(Registers r, Block block);
Exemple #23
0
 public override Expression asExpression(Registers r)
 {
     return(new ConstantExpression(new Constant(_invert ? LBoolean.LTRUE : LBoolean.LFALSE), -1));
 }
Exemple #24
0
 public override Expression asExpression(Registers r)
 {
     return(new BinaryExpression("and", left.asExpression(r), right.asExpression(r), Expression.PRECEDENCE_AND, Expression.ASSOCIATIVITY_NONE));
 }
Exemple #25
0
	  public override Expression asExpression(Registers r)
	  {
		bool transpose = false;
		string op = _invert ? "~=" : "==";
		return new BinaryExpression(op, r.getKExpression(!transpose ? left : right, line), r.getKExpression(!transpose ? right : left, line), Expression.PRECEDENCE_COMPARE, Expression.ASSOCIATIVITY_LEFT);
	  }
Exemple #26
0
 public override Statement process(Registers r, Block block)
 {
     return(new FunctionCallStatement(call));
 }
Exemple #27
0
	  public override Expression asExpression(Registers r)
	  {
		return r.getExpression(test, line);
	  }
Exemple #28
0
 public override Expression asExpression(Registers r)
 {
     return new ConstantExpression(new Constant(_invert ? LBoolean.LTRUE : LBoolean.LFALSE), -1);
 }
Exemple #29
0
 abstract public Expression asExpression(Registers r);
Exemple #30
0
 public override Statement process(Registers r, Block block)
 {
     //System.out.println("-- block " + begin + " .. " + end);
       Expression expr = null;
       int register = 0;
       for(; register < r.registers; register++)
       {
     if(r.getUpdated(register, branch.end - 1) == branch.end - 1)
     {
       expr = r.getValue(register, branch.end);
       break;
     }
       }
       if(d.code.op(branch.end - 2) == Op.LOADBOOL && d.code.C(branch.end - 2) != 0)
       {
     int target1 = d.code.A(branch.end - 2);
     if(d.code.op(branch.end - 3) == Op.JMP && d.code.sBx(branch.end - 3) == 2)
     {
       //System.out.println("-- Dropped boolean expression operand");
       expr = r.getValue(target1, branch.end - 2);
     }
     else
     {
       expr = r.getValue(target1, branch.begin);
     }
     branch.useExpression(expr);
     if(r.isLocal(target1, branch.end - 1))
     {
       return new Assignment(r.getTarget(target1, branch.end - 1), branch.asExpression(r));
     }
     r.setValue(target1, branch.end - 1, branch.asExpression(r));
     }
       else if(expr != null && target >= 0)
       {
     branch.useExpression(expr);
     if(r.isLocal(target, branch.end - 1))
     {
       return new Assignment(r.getTarget(target, branch.end - 1), branch.asExpression(r));
     }
     r.setValue(target, branch.end - 1, branch.asExpression(r));
     //System.out.println("-- target = " + target + "@" + (branch.end - 1));
     //.print(new Output());
     //System.out.println();
     }
       else
       {
     Console.WriteLine("-- fail " + (branch.end - 1));
     Console.WriteLine(expr);
     Console.WriteLine(target);
       }
       return null;
 }
Exemple #31
0
 public override Statement process(unluac.decompile.Registers r, unluac.decompile.block.Block block)
 {
     return(_statement);
 }
Exemple #32
0
 public override Expression asExpression(Registers r)
 {
     return new BinaryExpression("or", left.asExpression(r), right.asExpression(r), Expression.PRECEDENCE_OR, Expression.ASSOCIATIVITY_NONE);
 }
 public override Statement process(Registers r, Block block)
 {
     return new Assignment(assign.getFirstTarget(), expr);
 }
Exemple #34
0
 public override Expression asExpression(Registers r)
 {
     return(r.getExpression(test, line));
 }
Exemple #35
0
 public override Statement process(Registers r, Block block)
 {
     return new Assignment(_target, _value);
 }
 public override Statement process(Registers r, Block block)
 {
     r.setValue(testreg, branch.end - 1, setb.asExpression(r));
     return null;
 }
 public IfThenEndBlock(LFunction function, Branch branch, Registers r)
     : this(function, branch, null, r)
 {
 }
Exemple #38
0
	  public override Expression asExpression(Registers r)
	  {
		return new UnaryExpression("not ", branch.asExpression(r), Expression.PRECEDENCE_UNARY);
	  }
	  public override Statement process(Registers r, Block block)
	  {
		return new Return(values);
	  }
Exemple #40
0
 public override Statement process(Registers r, Block block)
 {
     return(new Assignment(new GlobalTarget(global), @value));
 }