Package org.jreversepro.ast.evaluator

Source Code of org.jreversepro.ast.evaluator.InvokeStaticEvaluator

package org.jreversepro.ast.evaluator;

import java.util.Arrays;
import java.util.List;

import org.jreversepro.ast.expression.Expression;
import org.jreversepro.ast.expression.MethodAccessExpression;
import org.jreversepro.ast.expression.StaticMethodAccessExpression;
import org.jreversepro.ast.intermediate.CompleteLine;
import org.jreversepro.jvm.TypeInferrer;
import org.jreversepro.reflect.instruction.Instruction;


public class InvokeStaticEvaluator  extends InvokeEvaluator {

  public InvokeStaticEvaluator(EvaluatorContext context) {
    super(context);
    // TODO Auto-generated constructor stub
  }

  @Override
  void evaluate(Instruction ins) {
    int offset = ins.getArgUnsignedShort();
    int classIndex = pool.getPtr1(offset);
    String classType = pool.getClassName(classIndex);

    // GetMethodName
    int nameIndex = pool.getPtr2(offset);
    String methodName = pool.getFirstDirectName(nameIndex);

    // Get No: of arguments
    int argsIndex = pool.getPtr2(nameIndex);
    String argsList = pool.getEntryValue(argsIndex);
    List<String> args = TypeInferrer.getArguments(argsList);
    int popMax = args.size();

    String methodType = TypeInferrer.getReturnType(argsList);
    // Get Return type

    List<Expression> argValues = this.getArguments(popMax);
    MethodAccessExpression mex = new StaticMethodAccessExpression(classType,
        methodName, methodType, argValues);

    if (!methodType.equals(String.valueOf(JVM_TYPE_VOID))) {
      // Non-void method.Push the result onto the stack.
      evalMachine.push(mex);
    } else {
      // Void return. Has to indicate End of line.
      // Push -it as a statement.
      statements.append(new CompleteLine(ins, mex));
    }
   
  }

  @Override
  Iterable<Integer> getProcessingOpcodes() {
    return Arrays.asList(OPCODE_INVOKESTATIC);
  }

}
TOP

Related Classes of org.jreversepro.ast.evaluator.InvokeStaticEvaluator

TOP
Copyright © 2018 www.massapi.com. 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.