Skip to content

Commit

Permalink
Propagate the inner modifier in redeclares (#8034)
Browse files Browse the repository at this point in the history
  • Loading branch information
perost committed Oct 21, 2021
1 parent f6f00e5 commit b38e5e9
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
12 changes: 12 additions & 0 deletions OMCompiler/Compiler/NFFrontEnd/NFModifier.mo
Expand Up @@ -472,6 +472,12 @@ public
then
();

case REDECLARE()
algorithm
mod.innerMod := propagateBinding(mod.innerMod, origin, parent);
then
();

else ();
end match;
end propagateBinding;
Expand All @@ -490,6 +496,12 @@ public
then
();

case REDECLARE(eachPrefix = SCode.NOT_EACH())
algorithm
submod.innerMod := propagateSubMod(name, submod.innerMod, subs);
then
();

else ();
end match;
end propagateSubMod;
Expand Down
1 change: 1 addition & 0 deletions testsuite/flattening/modelica/scodeinst/Makefile
Expand Up @@ -860,6 +860,7 @@ RedeclareMod5.mo \
RedeclareMod6.mo \
RedeclareMod7.mo \
RedeclareMod8.mo \
RedeclareMod9.mo \
redeclare10.mo \
redeclare11.mo \
redeclare12.mo \
Expand Down
48 changes: 48 additions & 0 deletions testsuite/flattening/modelica/scodeinst/RedeclareMod9.mo
@@ -0,0 +1,48 @@
// name: RedeclareMod9
// keywords:
// status: correct
// cflags: -d=newInst
//

record NominalValues
Real x;
end NominalValues;

record Stage
parameter NominalValues nomVal;
end Stage;

record NominalCondition
parameter NominalValues per;
end NominalCondition;

model WetCoil
parameter DXCoil datCoi;
NominalCondition[4] uacp(per = datCoi.sta.nomVal);
end WetCoil;

record DXCoil
parameter Stage[4] sta;
end DXCoil;

model RedeclareMod9
parameter DXCoil datCoi;
WetCoil eva(datCoi = datCoi, uacp(redeclare NominalValues per));
end RedeclareMod9;

// Result:
// class RedeclareMod9
// parameter Real datCoi.sta[1].nomVal.x;
// parameter Real datCoi.sta[2].nomVal.x;
// parameter Real datCoi.sta[3].nomVal.x;
// parameter Real datCoi.sta[4].nomVal.x;
// parameter Real eva.datCoi.sta[1].nomVal.x = datCoi.sta[1].nomVal.x;
// parameter Real eva.datCoi.sta[2].nomVal.x = datCoi.sta[2].nomVal.x;
// parameter Real eva.datCoi.sta[3].nomVal.x = datCoi.sta[3].nomVal.x;
// parameter Real eva.datCoi.sta[4].nomVal.x = datCoi.sta[4].nomVal.x;
// parameter Real eva.uacp[1].per.x = eva.datCoi.sta[1].nomVal.x;
// parameter Real eva.uacp[2].per.x = eva.datCoi.sta[2].nomVal.x;
// parameter Real eva.uacp[3].per.x = eva.datCoi.sta[3].nomVal.x;
// parameter Real eva.uacp[4].per.x = eva.datCoi.sta[4].nomVal.x;
// end RedeclareMod9;
// endResult

0 comments on commit b38e5e9

Please sign in to comment.