diff --git a/AlgebraicDataflowArchitectureModel/models/RefBug.model b/AlgebraicDataflowArchitectureModel/models/RefBug.model new file mode 100644 index 0000000..e421f6b --- /dev/null +++ b/AlgebraicDataflowArchitectureModel/models/RefBug.model @@ -0,0 +1,19 @@ +init { + constant := 10 + variable := 10 + ans := 20 +} + +channel changeVar { + out variable(cur: Int, change(next: Int)) = next +} + +channel changeConst { + out constant(const: Int, change(next: Int)) = next +} + +channel calcAns { + in variable(curVar: Int, calc(const: Int, nextVar: Int)) = nextVar + ref constant(const: Int, calc(const: Int, var: Int)) + out ans(curAns: Int, calc(const: Int, var: Int)) = var + const +} diff --git a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java index 13875a6..ccea9b1 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/CodeGeneratorFromDataFlowGraph.java @@ -396,7 +396,7 @@ // The child has a component. childType = new Type(childTypeName, childTypeName); String fieldName = langSpec.toVariableName(childTypeName); - FieldDeclaration stateField = langSpec.newFieldDeclaration(childType, fieldName, langSpec.getFieldInitializer(resStateType, resourceNode.getResourceHierarchy().getInitialValue())); + FieldDeclaration stateField = langSpec.newFieldDeclaration(childType, fieldName, langSpec.getConstructorInvocation(childTypeName, new ArrayList<>())); component.addField(stateField); } } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java index 2c52702..5c02010 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JavaCodeGenerator.java @@ -260,7 +260,7 @@ // The child has a component. childType = new Type(childTypeName, childTypeName); String fieldName = toVariableName(childTypeName); - component.addField(new FieldDeclaration(childType, fieldName, getInitializer(res))); + component.addField(new FieldDeclaration(childType, fieldName, "new " + childTypeName + "()")); } } } diff --git a/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java b/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java index a85d094..3f23e85 100644 --- a/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java +++ b/AlgebraicDataflowArchitectureModel/src/generators/JerseyCodeGenerator.java @@ -204,7 +204,7 @@ // The child has a component. childType = new Type(childTypeName, childTypeName); String fieldName = toVariableName(childTypeName); - component.addField(new FieldDeclaration(childType, fieldName, getInitializer(res))); + component.addField(new FieldDeclaration(childType, fieldName, "new " + childTypeName + "()")); } } } diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java index 0962ce2..c38fa6d 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataConstraintModel/DataConstraintModel.java @@ -507,7 +507,7 @@ } } } - return new Constant(false_); + return null; } }); public static final Symbol nil = new Symbol("nil", 0, Symbol.Type.PREFIX, new Symbol.IImplGenerator() { diff --git a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java index 15e3194..ec3c6f2 100644 --- a/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java +++ b/AlgebraicDataflowArchitectureModel/src/models/dataFlowModel/DataTransferChannel.java @@ -1,13 +1,12 @@ package models.dataFlowModel; import java.util.AbstractMap; -import java.util.AbstractMap.SimpleEntry; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Map.Entry; +import java.util.Set; import models.algebra.Constant; import models.algebra.Expression; @@ -19,7 +18,9 @@ import models.algebra.UnificationFailed; import models.algebra.ValueUndefined; import models.algebra.Variable; -import models.dataConstraintModel.*; +import models.dataConstraintModel.Channel; +import models.dataConstraintModel.ChannelMember; +import models.dataConstraintModel.ResourcePath; public class DataTransferChannel extends Channel { protected Set inputChannelMembers = null; @@ -506,11 +507,11 @@ Set substitutedPositionsInMessage = new HashSet<>(); Expression messageTerm = referenceMember.getStateTransition().getMessageExpression(); Expression curStateTerm = referenceMember.getStateTransition().getCurStateExpression(); - Expression nextStateTerm = referenceMember.getStateTransition().getNextStateExpression(); +// Expression nextStateTerm = referenceMember.getStateTransition().getNextStateExpression(); HashMap messageVars = messageTerm.getVariables(); for (Entry varEnt: messageVars.entrySet()) { Variable var = varEnt.getValue(); - if (curStateTerm.getVariables().values().contains(var) || nextStateTerm.getVariables().values().contains(var)) { + if (curStateTerm.getVariables().values().contains(var)) { if (messageTerm instanceof Term) { substitutedPositionsInMessage.add(varEnt.getKey()); } else if (messageTerm instanceof Variable) {