public AFieldDeclIR getFieldDecl(List<SClassDeclIR> classes, ARecordTypeIR recordType, int number) { ARecordDeclIR record = findRecord(classes, recordType); return record.getFields().get(number); }
@Override public void caseARecordPatternIR(ARecordPatternIR node, STypeIR question) throws AnalysisException { STypeIR type = node.getType(); storeType(node, type); if (type instanceof ARecordTypeIR) { ARecordTypeIR recType = (ARecordTypeIR) type; ARecordDeclIR rec = info.getDeclAssistant().findRecord(info.getClasses(), recType); if (rec.getFields().size() == node.getPatterns().size()) { for (int i = 0; i < node.getPatterns().size(); i++) { SPatternIR p = node.getPatterns().get(i); STypeIR t = rec.getFields().get(i).getType(); p.apply(this, t); } } else { log.error("Record patterns and record fields do not match in terms of size"); } } else { log.error("Expected record pattern to have a record type. Got: " + type); } }
public ARecordDeclIR findRecord(List<SClassDeclIR> classes, ARecordTypeIR recordType) { SClassDeclIR definingClass = findClass(classes, recordType.getName().getDefiningClass()); ARecordDeclIR record = findRecord(definingClass, recordType.getName().getName()); return record; }
public boolean assertRec(SExpIR exp) { if (exp.getType().getNamedInvType() != null || !(exp.getType() instanceof ARecordTypeIR)) { return false; } IRInfo info = handler.getInvTrans().getJmlGen().getJavaGen().getInfo(); ARecordDeclIR rec = info.getDeclAssistant().findRecord(info.getClasses(), (ARecordTypeIR) exp.getType()); return rec.getInvariant() != null; } }
ARecordDeclIR record = transAssistant.getInfo().getAssistantManager().getDeclAssistant().findRecord(transAssistant.getInfo().getClasses(), recordType);
ARecordDeclIR record = transAssistant.getInfo().getAssistantManager().getDeclAssistant().findRecord(classDecl, recordName);