public STypeIR getFieldType(List<SClassDeclIR> classes, ARecordTypeIR recordType, String memberName) { AFieldDeclIR field = assistantManager.getDeclAssistant().getFieldDecl(classes, recordType, memberName); if (field != null) { return field.getType().clone(); } return null; }
private boolean memberExists(String memberName, INode parent, TypeAssistantIR typeAssistant, SExpIR fieldExp, STypeIR currentType) throws AnalysisException { if (fieldExp instanceof AFieldExpIR) { if (currentType instanceof AClassTypeIR) { String className = ((AClassTypeIR) currentType).getName(); return memberExists(parent, typeAssistant, className, memberName); } else if (currentType instanceof ARecordTypeIR) { ARecordTypeIR recordType = (ARecordTypeIR) currentType; return transAssistant.getInfo().getDeclAssistant().getFieldDecl(transAssistant.getInfo().getClasses(), recordType, memberName) != null; } } else if (fieldExp instanceof AFieldNumberExpIR && currentType instanceof ATupleTypeIR) { return true; // Could possibly be strengthened // AFieldNumberExpIR fieldNumberExp = (AFieldNumberExpIR) fieldExp; // return fieldNumberExp.getField() <= ((ATupleTypeIR) currentType).getTypes().size(); } return false; }
public STypeIR getFieldExpType(IRInfo info, String fieldName, String fieldModule, SObjectDesignatorIR obj, INode parent) throws AnalysisException, org.overture.codegen.ir.analysis.AnalysisException { if (parent instanceof AApplyObjectDesignatorIR) { AApplyObjectDesignatorIR apply = (AApplyObjectDesignatorIR) parent; LinkedList<SExpIR> args = apply.getArgs(); if (fieldModule != null) { // It is a class SClassDeclIR clazz = info.getDeclAssistant().findClass(info.getClasses(), fieldModule); AFieldDeclIR field = info.getDeclAssistant().getFieldDecl(clazz, fieldModule); if (field != null) { return field.getType().clone(); } else { // It must be a method return info.getTypeAssistant().getMethodType(info, fieldModule, fieldName, args); } } } return getFieldType(info, fieldName, fieldModule, obj); }
private SExpIR consRecFieldExp(AIdentifierVarExpIR patternVar, int i, STypeIR currentType, boolean cast) { ARecordTypeIR recordType = (ARecordTypeIR) patternVar.getType(); AFieldDeclIR recordField = transAssistant.getInfo().getAssistantManager().getDeclAssistant().getFieldDecl(transAssistant.getInfo().getClasses(), recordType, i); String fieldName = recordField.getName(); AFieldExpIR fieldExp = consRecFieldExp(patternVar, currentType, fieldName); if (cast) { ACastUnaryExpIR casted = new ACastUnaryExpIR(); casted.setType(recordType.clone()); casted.setExp(fieldExp.getObject()); fieldExp.setObject(casted); } return fieldExp; }
AFieldDeclIR field = man.getDeclAssistant().getFieldDecl(classes, r, memberName);