@Override public GExpr memberOf( MethodGenerator mv, RecordValue instance, int offset, int size, TypeStrategy fieldTypeStrategy) { return layout.memberOf(mv, instance, offset, size, fieldTypeStrategy); }
@Override public RecordValue variable(GimpleVarDecl decl, VarAllocator allocator) { JLValue instance = allocator.reserve(decl.getName(), layout.getType(), new RecordConstructor(this)); if (isUnitPointer()) { // If we are using the RecordUnitPtr strategy, then the record value is also it's address return new RecordValue(instance, new RecordUnitPtr(instance)); } else if (decl.isAddressable()) { JLValue unitArray = allocator.reserveUnitArray( decl.getName(), layout.getType(), Optional.of((JExpr) instance)); FatPtrPair address = new FatPtrPair(new RecordClassValueFunction(this), unitArray); JExpr value = Expressions.elementAt(address.getArray(), 0); return new RecordValue(value, address); } else { return new RecordValue(instance); } }
public Type getJvmType() { return layout.getType(); }
public RecordValue clone(MethodGenerator mv, RecordValue recordValue) { return layout.clone(mv, recordValue); }