public List<STypeIR> getFieldTypes(ARecordDeclIR record) { List<STypeIR> fieldTypes = new LinkedList<STypeIR>(); for (AFieldDeclIR field : record.getFields()) { fieldTypes.add(field.getType()); } return fieldTypes; }
public String rec2Tuple(ARecordDeclIR record) throws AnalysisException { StringBuilder sb = new StringBuilder(); Iterator<AFieldDeclIR> it = record.getFields().iterator(); while (it.hasNext()) { AFieldDeclIR n = it.next(); sb.append(trans(n.getType())); if (it.hasNext()) { sb.append(TUPLE_TYPE_SEPARATOR); } } return sb.toString(); }
/** * Called by the {@link AFieldDeclIR} node from {@link AFieldDeclIR#apply(IIsaAnalysis)}. * @param node the calling {@link AFieldDeclIR} node */ public void caseAFieldDeclIR(AFieldDeclIR node) throws AnalysisException { _visitedNodes.add(node); inAFieldDeclIR(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getInitial() != null && !_visitedNodes.contains(node.getInitial())) { node.getInitial().apply(this); } outAFieldDeclIR(node); }
/** * Called by the {@link AFieldDeclIR} node from {@link AFieldDeclIR#apply(IAnalysis)}. * @param node the calling {@link AFieldDeclIR} node */ public void caseAFieldDeclIR(AFieldDeclIR node) throws AnalysisException { _visitedNodes.add(node); inAFieldDeclIR(node); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this); } if(node.getInitial() != null && !_visitedNodes.contains(node.getInitial())) { node.getInitial().apply(this); } outAFieldDeclIR(node); }
/** * Called by the {@link AFieldDeclIR} node from {@link AFieldDeclIR#apply(IAnalysis)}. * @param node the calling {@link AFieldDeclIR} node */ public void caseAFieldDeclIR(AFieldDeclIR node, Q question) throws AnalysisException { _visitedNodes.add(node); inAFieldDeclIR(node, question); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { node.getType().apply(this, question); } if(node.getInitial() != null && !_visitedNodes.contains(node.getInitial())) { node.getInitial().apply(this, question); } outAFieldDeclIR(node, question); }
@Override public void inAFieldDeclIR(AFieldDeclIR node) throws AnalysisException { STypeIR nodeType = node.getType(); SExpIR initial = node.getInitial(); handleVarExp(nodeType, initial); if (initial == null) { return; } handleExp(initial, nodeType); }
public STypeIR getFieldType(SClassDeclIR classDecl, String fieldName, List<SClassDeclIR> classes) { for (AFieldDeclIR field : assistantManager.getDeclAssistant().getAllFields(classDecl, classes)) { if (field.getName().equals(fieldName)) { return field.getType().clone(); } } return null; }
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; }
/** * Called by the {@link AFieldDeclIR} node from {@link AFieldDeclIR#apply(IAnalysis)}. * @param node the calling {@link AFieldDeclIR} node */ public A caseAFieldDeclIR(AFieldDeclIR node, Q question) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node, question); mergeReturns(retVal,inAFieldDeclIR(node, question)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this, question)); } if(node.getInitial() != null && !_visitedNodes.contains(node.getInitial())) { mergeReturns(retVal,node.getInitial().apply(this, question)); } mergeReturns(retVal,outAFieldDeclIR(node, question)); return retVal; }
/** * Called by the {@link AFieldDeclIR} node from {@link AFieldDeclIR#apply(IAnalysis)}. * @param node the calling {@link AFieldDeclIR} node */ public A caseAFieldDeclIR(AFieldDeclIR node) throws AnalysisException { _visitedNodes.add(node); A retVal = createNewReturnValue(node); mergeReturns(retVal,inAFieldDeclIR(node)); if(node.getType() != null && !_visitedNodes.contains(node.getType())) { mergeReturns(retVal,node.getType().apply(this)); } if(node.getInitial() != null && !_visitedNodes.contains(node.getInitial())) { mergeReturns(retVal,node.getInitial().apply(this)); } mergeReturns(retVal,outAFieldDeclIR(node)); return retVal; }
@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); } }
@Override public void caseAFieldDeclIR(AFieldDeclIR node) throws AnalysisException { if (node.getInitial() != null) { if (node.getInitial().getType() instanceof AUnionTypeIR) { correctTypes(node.getInitial(), node.getType()); } node.getInitial().apply(this); } }
public AApplyExpIR consUtilCallUsingRecFields(ARecordDeclIR record, STypeIR returnType, String memberName) { LinkedList<AFieldDeclIR> fields = record.getFields(); AApplyExpIR call = consUtilCall(returnType, memberName); LinkedList<SExpIR> args = call.getArgs(); for (AFieldDeclIR field : fields) { AIdentifierVarExpIR nextArg = new AIdentifierVarExpIR(); nextArg.setName(field.getName()); nextArg.setType(field.getType().clone()); nextArg.setIsLocal(false); args.add(nextArg); } return call; } }
public APlainCallStmIR consCallStm(AFieldDeclIR field) { APlainCallStmIR call = new APlainCallStmIR(); AExternalTypeIR classType = new AExternalTypeIR(); classType.setName(JavaFormat.UTILS_FILE); AIdentifierVarExpIR argument = new AIdentifierVarExpIR(); argument.setType(field.getType().clone()); argument.setIsLocal(false); argument.setName(field.getName()); call.setType(classType.clone()); call.setName("hashcode"); call.setClassType(classType.clone()); call.getArgs().add(argument); return call; }
private AMethodDeclIR consSetter(AFieldDeclIR f) { AMethodDeclIR setter = new AMethodDeclIR(); setter.setAbstract(false); setter.setAccess(IRConstants.PUBLIC); setter.setAsync(false); setter.setImplicit(false); setter.setIsConstructor(false); setter.setName(consSetCallName(f.getName())); setter.setStatic(false); setter.setSourceNode(f.getSourceNode()); String paramName = consParamName(f); AFormalParamLocalParamIR param = new AFormalParamLocalParamIR(); param.setType(f.getType().clone()); param.setPattern(jmlGen.getJavaGen().getInfo().getPatternAssistant().consIdPattern(paramName)); setter.getFormalParams().add(param); AMethodTypeIR methodType = new AMethodTypeIR(); methodType.setResult(new AVoidTypeIR()); methodType.getParams().add(f.getType().clone()); setter.setMethodType(methodType); AAssignToExpStmIR fieldUpdate = new AAssignToExpStmIR(); fieldUpdate.setTarget(jmlGen.getJavaGen().getInfo().getExpAssistant().consIdVar(f.getName(), f.getType().clone())); fieldUpdate.setExp(jmlGen.getJavaGen().getInfo().getExpAssistant().consIdVar(paramName, f.getType().clone())); setter.setBody(fieldUpdate); return setter; }
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); }
@Override public void caseAIdentifierStateDesignatorIR( AIdentifierStateDesignatorIR node) throws AnalysisException { if (!node.getIsLocal() && !node.getName().equals(stateDecl.getName())) { ARecordTypeIR stateType = transAssistant.getRecType(stateDecl); AIdentifierStateDesignatorIR idState = new AIdentifierStateDesignatorIR(); idState.setClassName(null); idState.setExplicit(false); idState.setIsLocal(false); idState.setName(stateDecl.getName()); idState.setType(stateType); AFieldStateDesignatorIR field = new AFieldStateDesignatorIR(); field.setField(node.getName()); field.setObject(idState); for (AFieldDeclIR f : stateDecl.getFields()) { if (f.getName().equals(node.getName())) { field.setType(f.getType().clone()); } } transAssistant.replaceNodeWith(node, field); } }
public AEqualsBinaryExpIR consFieldComparison(ARecordDeclIR record, AFieldDeclIR field, String formalParamName) throws AnalysisException { // Example: fieldName == formalParamName.fieldName AEqualsBinaryExpIR fieldComparison = new AEqualsBinaryExpIR(); fieldComparison.setType(new ABoolBasicTypeIR()); AIdentifierVarExpIR instanceField = new AIdentifierVarExpIR(); instanceField.setType(field.getType().clone()); instanceField.setIsLocal(false); instanceField.setName(field.getName()); AFieldExpIR formalParamField = new AFieldExpIR(); formalParamField.setType(field.getType().clone()); AIdentifierVarExpIR formalParam = new AIdentifierVarExpIR(); ARecordTypeIR recordType = new ARecordTypeIR(); recordType.setName(consTypeName(record)); formalParam.setType(recordType); formalParam.setIsLocal(true); formalParam.setName(formalParamName); formalParamField.setObject(formalParam); formalParamField.setMemberName(field.getName()); fieldComparison.setLeft(instanceField); fieldComparison.setRight(formalParamField); return fieldComparison; }
private SExpIR consFieldStr(AFieldDeclIR field, boolean separate) { String left = ""; if (separate) { left += ", "; } left += field.getName(); left += field.getFinal() != null && field.getFinal() ? " = " : " := "; AApplyExpIR toStringCall = consUtilsToStringCall(); AIdentifierVarExpIR fieldVar = new AIdentifierVarExpIR(); fieldVar.setType(field.getType().clone()); fieldVar.setIsLambda(false); fieldVar.setIsLocal(false); fieldVar.setName(field.getName()); toStringCall.getArgs().add(fieldVar); ASeqConcatBinaryExpIR fieldStr = new ASeqConcatBinaryExpIR(); fieldStr.setType(new AStringTypeIR()); fieldStr.setLeft(info.getExpAssistant().consStringLiteral(left, false)); fieldStr.setRight(toStringCall); return fieldStr; } }
private AMethodDeclIR consGetter(AFieldDeclIR f) { AMethodDeclIR getter = new AMethodDeclIR(); getter.setAbstract(false); getter.setAccess(IRConstants.PUBLIC); getter.setAsync(false); getter.setImplicit(false); getter.setIsConstructor(false); getter.setName(consGetCallName(f.getName())); getter.setStatic(false); getter.setSourceNode(f.getSourceNode()); AMethodTypeIR methodType = new AMethodTypeIR(); methodType.setResult(f.getType().clone()); getter.setMethodType(methodType); AReturnStmIR returnField = new AReturnStmIR(); returnField.setExp(jmlGen.getJavaGen().getInfo().getExpAssistant().consIdVar(f.getName(), f.getType().clone())); getter.setBody(returnField); jmlGen.getAnnotator().makePure(getter); return getter; }