Skip to content

Commit 11078b7

Browse files
authored
Fix class redeclaration issue (#8255)
- Use the component parent of a class when redeclaring classes in it rather than the class itself, to ensure references in it are prefixed with the component and not the class name.
1 parent 4e2e163 commit 11078b7

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

OMCompiler/Compiler/NFFrontEnd/NFInst.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -822,7 +822,7 @@ algorithm
822822
// Redeclare classes with redeclare modifiers. Redeclared components could
823823
// also be handled here, but since each component is only instantiated once
824824
// it's more efficient to apply the redeclare when instantiating them instead.
825-
redeclareClasses(cls_tree, node);
825+
redeclareClasses(cls_tree, par);
826826

827827
// Instantiate the extends nodes.
828828
ClassTree.mapExtends(cls_tree,

testsuite/flattening/modelica/scodeinst/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -847,6 +847,7 @@ RecursiveInst1.mo \
847847
RecursiveInst2.mo \
848848
RecursiveInst3.mo \
849849
RedeclareClass1.mo \
850+
RedeclareClass2.mo \
850851
RedeclareClassComponent.mo \
851852
RedeclareComponentClass.mo \
852853
RedeclareDim1.mo \
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// name: RedeclareClass2
2+
// keywords:
3+
// status: correct
4+
// cflags: -d=newInst
5+
//
6+
7+
model LosslessPipe
8+
extends PartialTwoPortInterface;
9+
end LosslessPipe;
10+
11+
partial model PartialTwoPortInterface
12+
parameter Real m_flow_nominal;
13+
end PartialTwoPortInterface;
14+
15+
partial model PartialConnection2Pipe
16+
replaceable model Model_pipCon = PartialTwoPortInterface(final m_flow_nominal = mCon_flow_nominal);
17+
parameter Real mCon_flow_nominal;
18+
Model_pipCon pipCon;
19+
end PartialConnection2Pipe;
20+
21+
model Connection2PipeLossless
22+
extends PartialConnection2Pipe(redeclare model Model_pipCon = LosslessPipe);
23+
end Connection2PipeLossless;
24+
25+
partial model PartialDistribution2Pipe
26+
parameter Integer nCon = 1;
27+
parameter Real[nCon] mCon_flow_nominal;
28+
replaceable PartialConnection2Pipe[nCon] con(final mCon_flow_nominal = mCon_flow_nominal);
29+
end PartialDistribution2Pipe;
30+
31+
model RedeclareClass2
32+
extends PartialDistribution2Pipe(redeclare Connection2PipeLossless[nCon] con);
33+
end RedeclareClass2;
34+
35+
36+
// Result:
37+
// class RedeclareClass2
38+
// final parameter Integer nCon = 1;
39+
// parameter Real mCon_flow_nominal[1];
40+
// final parameter Real con[1].mCon_flow_nominal = mCon_flow_nominal[1];
41+
// final parameter Real con[1].pipCon.m_flow_nominal = con[1].mCon_flow_nominal;
42+
// end RedeclareClass2;
43+
// endResult

0 commit comments

Comments
 (0)