Package org.renjin.gcc.translate.field

Source Code of org.renjin.gcc.translate.field.SimpleRecordArrayFieldExpr$Pointer

package org.renjin.gcc.translate.field;


import org.renjin.gcc.jimple.JimpleExpr;
import org.renjin.gcc.jimple.JimpleType;
import org.renjin.gcc.translate.FunctionContext;
import org.renjin.gcc.translate.expr.AbstractImExpr;
import org.renjin.gcc.translate.expr.ImExpr;
import org.renjin.gcc.translate.type.ImPrimitiveType;
import org.renjin.gcc.translate.type.ImType;
import org.renjin.gcc.translate.type.struct.SimpleRecordArrayType;

public class SimpleRecordArrayFieldExpr extends AbstractImExpr {

  private final String instanceName;
  private final JimpleType declaringClass;
  private final String member;
  private final SimpleRecordArrayType memberType;

  public SimpleRecordArrayFieldExpr(SimpleRecordArrayType memberType, String member,
                                    JimpleType declaringClass, String instanceName) {
    this.memberType = memberType;
    this.member = member;
    this.declaringClass = declaringClass;
    this.instanceName = instanceName;
  }


  @Override
  public ImType type() {
    return memberType;
  }

  private JimpleExpr fieldRef() {
    return new JimpleExpr(String.format("<%s: %s %s>",
        declaringClass, memberType.jimpleType().toString(), member));
  }



  @Override
  public ImExpr addressOf() {
    return new Pointer();
  }

  public class Pointer extends AbstractImExpr {

    @Override
    public ImType type() {
      return memberType.pointerType();
    }

    @Override
    public JimpleExpr translateToObjectReference(FunctionContext context, JimpleType className) {
      if(className.is(Object.class)) {
        if(instanceName == null) {
          return fieldRef();
        } else {
          throw new UnsupportedOperationException("non static not yet supported");
        }
      }
      return super.translateToObjectReference(context, className);
    }
  }


}
TOP

Related Classes of org.renjin.gcc.translate.field.SimpleRecordArrayFieldExpr$Pointer

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.