Package org.jreversepro.ast.expression

Examples of org.jreversepro.ast.expression.Expression


  @Test
  public void testSerializedArgs() {
    MethodAccessExpression mex;
   
    Expression exp1 = new Constant(4);
    Expression exp2 = new Constant(6);
   
    List<Expression> args = new ArrayList<Expression>();
    args.add(exp1);
    args.add(exp2);
   
View Full Code Here


   * net.sf.jrevpro.decompile.evaluator.AbstractInstructionEvaluator#evaluate
   * (net.sf.jrevpro.reflect.instruction.Instruction)
   */
  @Override
  void evaluate(Instruction ins) {
    Expression lhs = evalMachine.pop();

    RelationalOperator op = RelationalOperator.EQ;

    switch (ins.opcode) {
    case OPCODE_IFEQ:
      op = RelationalOperator.EQ;
      break;
    case OPCODE_IFNE:
      op = RelationalOperator.NE;
      break;
    case OPCODE_IFLT:
      op = RelationalOperator.LT;
      break;
    case OPCODE_IFLE:
      op = RelationalOperator.LE;
      break;
    case OPCODE_IFGE:
      op = RelationalOperator.GE;
      break;
    case OPCODE_IFGT:
      op = RelationalOperator.GT;
      break;

    }
    if (evalMachine.prevOpcode < OPCODE_LCMP
        || evalMachine.prevOpcode > OPCODE_DCMPG) {
      // To be compared with 0
      evalMachine.conditionExpression = null;
      Expression rhs = new Constant(JLSConstants.VALUE_0, lhs.getType());

      evalMachine.conditionExpression = new ConditionExpression(lhs, rhs, op);
    }

  }
View Full Code Here

      case OPCODE_DUP: { // dup
        evalMachine.push(evalMachine.peek());
        break;
      }
      case OPCODE_DUP_X1: { // dup_x1
        Expression op1 = evalMachine.pop();
        Expression op2 = evalMachine.pop();
        evalMachine.push(op1);
        evalMachine.push(op2);
        evalMachine.push((Expression) op1.clone());
        break;
      }
      case OPCODE_DUP_X2: { // dup_x2
        Expression op1 = evalMachine.pop();
        Expression op2 = evalMachine.pop();
        if (op2.isCategory1()) {
          // Cat.1
          Expression op3 = evalMachine.pop();
          evalMachine.push((Expression) op1.clone());
          evalMachine.push(op3);
        } else {
          // Cat.2
          evalMachine.push((Expression) op1.clone());
        }
        evalMachine.push(op2);
        evalMachine.push(op1);
        break;
      }
      case OPCODE_DUP2: { // dup2
        Expression op1 = evalMachine.pop();
        if (op1.isCategory1()) {
          // Cat.1
          Expression op2 = evalMachine.pop();
          evalMachine.push(op2);
          evalMachine.push(op1);
          evalMachine.push((Expression) op2.clone());
        } else {
          // Cat.2
          evalMachine.push(op1);
        }
        evalMachine.push(op1);
        break;
      }
      case OPCODE_DUP2_X1: { // dup2_x1
        Expression op1 = evalMachine.pop();
        Expression op2 = evalMachine.pop();
        if (op1.isCategory1()) {
          // Cat.1
          Expression op3 = evalMachine.pop();
          evalMachine.push(op2);
          evalMachine.push(op1);
          evalMachine.push(op3);
          evalMachine.push((Expression) op2.clone());
        } else {
          // Cat.2
          evalMachine.push(op1);
          evalMachine.push(op2);
        }
        evalMachine.push((Expression) op1.clone());
        break;
      }
      case OPCODE_DUP2_X2: { // dup2_x2
        Expression op1 = evalMachine.pop();
        Expression op2 = evalMachine.pop();
        if (op1.isCategory1()) {
          // value1-Cat1
          Expression op3 = evalMachine.pop();
          if (op2.isCategory1()) {
            // value2-Cat1
            Expression op4 = evalMachine.pop();
            evalMachine.push(op2);
            evalMachine.push(op1);
            evalMachine.push(op4);
            // Form 1.
          } else {
            // value2-Cat2
            evalMachine.push(op2);
            evalMachine.push(op1);
            // Form. 3
          }
          evalMachine.push(op3);
        } else {
          // value1-Cat2
          if (op2.isCategory1()) {
            // value2-Cat1
            Expression op3 = evalMachine.pop();
            evalMachine.push(op1);
            evalMachine.push(op3);
            // Form. 2
          } else {
            // value2-Cat2
            evalMachine.push(op1);
            // Form 4.
          }
        }
        evalMachine.push(op2);
        evalMachine.push(op1);
        break;
      }
      case OPCODE_SWAP: { // swap
        Expression op1 = evalMachine.pop();
        Expression op2 = evalMachine.pop();
        evalMachine.push(op1);
        evalMachine.push(op2);
        break;
      }
      }
View Full Code Here

   */
  @Override
  void evaluate(Instruction ins) {
    switch (ins.opcode) {
    case OPCODE_GETFIELD: {
      Expression op1 = evalMachine.pop();

      int offset = ins.getArgUnsignedShort();

      int fieldPtr = pool.getPtr2(offset);

      String fieldName = pool.getFieldName(fieldPtr);
      String fieldType = pool.getFieldType(fieldPtr);

      FieldAccessExpression expr = new InstanceFieldAccessExpression(op1, fieldName,
          fieldType);
      evalMachine.push(expr);
      break;
    }
    case OPCODE_PUTFIELD: {

      Expression rhs = evalMachine.pop();
      Expression accessTarget = evalMachine.pop();

      int offset = ins.getArgUnsignedShort();

      int fieldPtr = pool.getPtr2(offset);
      String fieldName = pool.getFieldName(fieldPtr);
View Full Code Here

   * net.sf.jrevpro.decompile.evaluator.AbstractInstructionEvaluator#evaluate
   * (net.sf.jrevpro.reflect.instruction.Instruction)
   */
  @Override
  void evaluate(Instruction ins) {
    Expression exp = evalMachine.pop();
    statements.append(new SwitchLine(ins, exp));
  }
View Full Code Here

          pool.getClassName(offset));
      evalMachine.push(expr);
      break;
    }
    case OPCODE_ARRAYLENGTH: {
      Expression arrayReference = evalMachine.pop();
      ArrayLengthExpression expr = new ArrayLengthExpression(arrayReference);
      evalMachine.push(expr);
      break;
    }
    case OPCODE_ATHROW: {
      Expression thrownClass = evalMachine.pop();
      ThrowExpression expr = new ThrowExpression(thrownClass);
      statements.append(new CompleteLine(ins, expr));
      break;
    }
    case OPCODE_CHECKCAST: {
      int offset = ins.getArgUnsignedShort();

      // Get Class Name
      Expression expr = evalMachine.pop();

      String castType = pool.getClassName(offset);

      evalMachine.push(new UnaryOpExpression(expr, UnaryOperator.CAST_REFERENCE,
          castType));
      // No Change to JVM Stack
      break;
    }
    case OPCODE_INSTANCEOF: {
      Expression reference = evalMachine.pop();
      int offset = ins.getArgUnsignedShort();

      // Class Type found here
      String classType = pool.getClassName(offset);
      InstanceOfExpression expr = new InstanceOfExpression(reference, classType);
View Full Code Here

   * net.sf.jrevpro.decompile.evaluator.AbstractInstructionEvaluator#evaluate
   * (net.sf.jrevpro.reflect.instruction.Instruction)
   */
  @Override
  void evaluate(Instruction ins) {
    Expression expr = evalMachine.pop();
    statements.append(new CompleteLine(ins, expr));
  }
View Full Code Here

    switch (ins.opcode) {
    case OPCODE_GETSTATIC:
      evalMachine.push(expr);
      break;
    case OPCODE_PUTSTATIC:
      Expression rhs = evalMachine.pop();
      statements.append(new CompleteLine(ins, new Assignment(expr, rhs)));
      break;
    }
  }
View Full Code Here

  }

  private void operateStoreInstruction(Instruction ins,
      int variableIndexToSymbolTable) {
    int indexToSymbolTable = variableIndexToSymbolTable;
    Expression rhs = evalMachine.pop();
    Variable lhs = new Variable(varTable, rhs.getType(), indexToSymbolTable,
        ins.currentPc);
    statements.append(new CompleteLine(ins, new Assignment(lhs, rhs)));

    // Hint to the symbol table about the type.
    varTable.recordLocalDatatypeReference(variableIndexToSymbolTable, rhs
        .getType(), ins.currentPc);
  }
View Full Code Here

    super(context);
  }

  @Override
  void evaluate(Instruction ins) {
    Expression subscript = evalMachine.pop();
    Expression arrayObject = evalMachine.pop();

    char type = JVM_TYPE_UNDEFINED;
    switch (ins.opcode) {
    case OPCODE_IALOAD:
      type = JVM_TYPE_INT;
View Full Code Here

TOP

Related Classes of org.jreversepro.ast.expression.Expression

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.