Package org.renjin.gcc.translate.expr

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

package org.renjin.gcc.translate.expr;


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

public class ImWrappedPtrExpr extends AbstractImExpr implements ImIndirectExpr {

  private JimpleExpr expr;
  private JimpleType wrapperType;
  private JimpleType arrayType;
 
  public ImWrappedPtrExpr(JimpleExpr expr, JimpleType type) {
    this.expr = expr;
    this.wrapperType = type;
    try {
      this.arrayType = new RealJimpleType(Class.forName(wrapperType.toString()).getField("array").getType());
    } catch (Exception e) {
      throw new RuntimeException(e); // should not happen
    }
  }

  @Override
  public ArrayRef translateToArrayRef(FunctionContext context) {
    return new ArrayRef(backingArray(), backingArrayIndex());
  }


  private JimpleExpr backingArray() {
    return new JimpleExpr(expr + ".<" + wrapperType + ": " + arrayType + " array>");
  }

  private JimpleExpr backingArrayIndex() {
    return new JimpleExpr(expr + ".<" + wrapperType + ": int offset>");
  }

  @Override
  public ImIndirectType type() {
    throw new UnsupportedOperationException();
  }
}
TOP

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

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.