private AFieldExpIR consRecFieldExp(AIdentifierVarExpIR patternVar, STypeIR currentType, String fieldName) { AFieldExpIR fieldExp = new AFieldExpIR(); fieldExp.setType(currentType.clone()); fieldExp.setObject(patternVar.clone()); fieldExp.setMemberName(fieldName); return fieldExp; }
@Override public SExpIR caseAIdentifierVarExpIR(AIdentifierVarExpIR node) throws AnalysisException { if (node instanceof SVarExpIR) { SVarExpIR varExp = (SVarExpIR) node; if (BooleanUtils.isFalse(varExp.getIsLocal())) { ACastUnaryExpIR objId = consObjId(); AFieldExpIR fieldObj = new AFieldExpIR(); fieldObj.setType(node.getType().clone()); fieldObj.setMemberName(varExp.getName()); fieldObj.setObject(objId); assist.replaceNodeWith(node, fieldObj); return objId; } return node; } log.error("Expected variable expression at this point. Got: " + node); return null; }
@Override public SExpIR caseAFieldStateDesignatorIR(AFieldStateDesignatorIR node) throws AnalysisException { SExpIR objExp = node.getObject().apply(this); AFieldExpIR fieldExp = new AFieldExpIR(); fieldExp.setMemberName(node.getField()); fieldExp.setObject(objExp); fieldExp.setType(node.getType().clone()); fieldExp.setTag(node.getTag()); fieldExp.setSourceNode(node.getSourceNode()); return fieldExp; }
@Override public SExpIR caseAFieldObjectDesignatorIR(AFieldObjectDesignatorIR node) throws AnalysisException { String fieldName = node.getFieldName(); String fieldModule = node.getFieldModule(); SObjectDesignatorIR obj = node.getObject(); SourceNode sourceNode = node.getSourceNode(); INode parent = node.parent(); STypeIR fieldExpType = null; try { fieldExpType = info.getTypeAssistant().getFieldExpType(info, fieldName, fieldModule, obj, parent); } catch (org.overture.ast.analysis.AnalysisException e) { log.error("Could not find field expression type of " + node); fieldExpType = new AUnknownTypeIR(); } SExpIR objExp = obj.apply(this); AFieldExpIR fieldExp = new AFieldExpIR(); fieldExp.setMemberName(fieldName); fieldExp.setType(fieldExpType); fieldExp.setObject(objExp); fieldExp.setSourceNode(sourceNode); return fieldExp; }
public SExpIR consInstanceCall(STypeIR instanceType, String instanceName, STypeIR returnType, String memberName, SExpIR... args) { AIdentifierVarExpIR instance = new AIdentifierVarExpIR(); instance.setType(instanceType.clone()); instance.setName(instanceName); instance.setIsLocal(true); AFieldExpIR fieldExp = new AFieldExpIR(); fieldExp.setMemberName(memberName); fieldExp.setObject(instance); AMethodTypeIR methodType = new AMethodTypeIR(); methodType.setResult(returnType.clone()); AApplyExpIR instanceCall = new AApplyExpIR(); instanceCall.setType(returnType.clone()); if (args != null) { for (SExpIR arg : args) { methodType.getParams().add(arg.getType().clone()); instanceCall.getArgs().add(arg); } } fieldExp.setType(methodType.clone()); instanceCall.setRoot(fieldExp); return instanceCall; }
@Override public SExpIR caseAFieldExp(AFieldExp node, IRInfo question) throws AnalysisException { SExpIR object = node.getObject().apply(question.getExpVisitor(), question); STypeIR type = node.getType().apply(question.getTypeVisitor(), question); String memberName = ""; if (node.getMemberName() != null) { memberName = node.getMemberName().getFullName(); } else { memberName = node.getField().getName(); } AFieldExpIR fieldExp = new AFieldExpIR(); fieldExp.setObject(object); fieldExp.setMemberName(memberName); fieldExp.setType(type); return fieldExp; }
fieldExp.setSourceNode(node.getSourceNode()); fieldExp.setTag(node.getTag()); fieldExp.setType(node.getType().clone()); setFieldNames(fieldExp, stateDecl, node.getName());
field.setType(fieldType); field.setObject(recVar.clone()); field.setMemberName(name);
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; }
@Override public void caseAFieldExpIR(AFieldExpIR node) throws AnalysisException { node.getObject().apply(this); if (node.getObject().getType() instanceof ARecordTypeIR && !(node.parent() instanceof AApplyExpIR)) { AMethodTypeIR getterType = new AMethodTypeIR(); getterType.setResult(node.getType().clone()); AFieldExpIR getterField = node.clone(); getterField.setType(getterType); AApplyExpIR getCall = new AApplyExpIR(); getCall.setRoot(getterField); getCall.setType(node.getType().clone()); getCall.setSourceNode(node.getSourceNode()); getterField.setMemberName(consGetCallName(node.getMemberName())); /** * The getters added to the record classes do not copy object references representing values. Therefore we * need to take it into account when we do the field read call */ if (cloneFieldRead(node)) { getCall = makeCopy(getCall); } jmlGen.getJavaGen().getTransAssistant().replaceNodeWith(node, getCall); } }
? ((AClassTypeIR) classType).getName() : traceEnclosingClass; field.setType(getInfo().getTypeAssistant().getMethodType(getInfo(), fieldModule, name, args)); field.setMemberName(name); field.setObject(cast);