Package org.renjin.gcc.translate.expr

Source Code of org.renjin.gcc.translate.expr.JvmExprs

package org.renjin.gcc.translate.expr;

import org.renjin.gcc.jimple.JimpleExpr;
import org.renjin.gcc.jimple.JimpleType;
import org.renjin.gcc.translate.FunctionContext;
import org.renjin.gcc.translate.type.ImPrimitiveType;


public class JvmExprs {


  /**
   *
   * @param expr
   * @param type
   * @param simple
   * @return
   */
  public static ImExpr toExpr(FunctionContext context, JimpleExpr expr, JimpleType type, boolean simple) {
    if(type.isPrimitive()) {
      return new ImLiteralPrimitiveExpr(expr, ImPrimitiveType.valueOf(type));
    } else if(type.isPointerWrapper()) {
      return new ImWrappedPtrExpr(ensureSimple(context, expr, type, simple), type);
    } else if(type.isFunctionPointer()) {
      return new ImFunctionPtrLiteralExpr(ensureSimple(context, expr, type, simple));
    } else {
      return new ImObjectRefExpr(expr, type);
    }
  }

  private static JimpleExpr ensureSimple(FunctionContext context, JimpleExpr expr, JimpleType type, boolean simple) {
    if(simple) {
      return expr;
    } else {
      String tmp = context.declareTemp(type);
      context.getBuilder().addStatement(tmp + " = " + expr);
      return new JimpleExpr(tmp);
    }
  }
}
TOP

Related Classes of org.renjin.gcc.translate.expr.JvmExprs

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.