Skip to content

Commit 788cc40

Browse files
committed
Optimize dumping of when equations in model info
- Use `UnorderedSet.unique_list` instead of `List.union`.
1 parent f6ffd21 commit 788cc40

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

OMCompiler/Compiler/FrontEnd/Expression.mo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6136,7 +6136,7 @@ public function extractCrefsFromExpDerPreStart
61366136
be extreacted as a unique id. Instead you get $DER.x. Same goes for pre and start.
61376137
If `expand` is true crefs will be expanded."
61386138
input DAE.Exp inExp;
6139-
input Boolean expand;
6139+
input Boolean expand = true;
61406140
output list<DAE.ComponentRef> ocrefs;
61416141
algorithm
61426142
(_,ocrefs) := traverseExpTopDown(inExp, traversingComponentRefFinderDerPreStart, {});

OMCompiler/Compiler/SimCode/SerializeModelInfo.mo

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ import SimCodeUtil;
6161
import SimCodeFunctionUtil;
6262
import SCodeDump;
6363
import Util;
64+
import UnorderedSet;
6465

6566
function serializeWork "Always succeeds in order to clean-up external objects"
6667
input SimCode.SimCode code;
@@ -1025,7 +1026,7 @@ algorithm
10251026
File.write(file, "\",\"tag\":\"when\",\"defines\":[");
10261027
serializeExp(file,whenOp.left);
10271028
File.write(file, "],\"uses\":[");
1028-
serializeUses(file,List.union(eq.conditions,Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.right)));
1029+
serializeUses(file, getWhenUses(eq.conditions, whenOp.right));
10291030
File.write(file, "],\"equation\":[");
10301031
serializeExp(file,whenOp.right);
10311032
File.write(file, "],\"source\":");
@@ -1036,7 +1037,7 @@ algorithm
10361037
File.write(file, "\",\"tag\":\"when\",\"defines\":[");
10371038
serializeCref(file,whenOp.stateVar);
10381039
File.write(file, "],\"uses\":[");
1039-
serializeUses(file,List.union(eq.conditions,Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.value)));
1040+
serializeUses(file, getWhenUses(eq.conditions, whenOp.value));
10401041
File.write(file, "],\"equation\":[");
10411042
serializeExp(file,whenOp.value);
10421043
File.write(file, "],\"source\":");
@@ -1046,8 +1047,8 @@ algorithm
10461047
case whenOp as BackendDAE.ASSERT() equation
10471048
File.write(file, "\",\"tag\":\"when\"");
10481049
File.write(file, ",\"uses\":[");
1049-
crefs = listAppend(Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.condition), Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.message));
1050-
serializeUses(file,List.union(eq.conditions,crefs));
1050+
crefs = Expression.extractCrefsFromExpDerPreStart(whenOp.condition);
1051+
serializeUses(file, getWhenUses(crefs, whenOp.message));
10511052
File.write(file, "],\"equation\":[");
10521053
serializeExp(file,whenOp.message);
10531054
File.write(file, "],\"source\":");
@@ -1057,7 +1058,7 @@ algorithm
10571058
case whenOp as BackendDAE.TERMINATE() equation
10581059
File.write(file, "\",\"tag\":\"when\"");
10591060
File.write(file, ",\"uses\":[");
1060-
serializeUses(file,List.union(eq.conditions,Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.message)));
1061+
serializeUses(file, getWhenUses(eq.conditions, whenOp.message));
10611062
File.write(file, "],\"equation\":[");
10621063
serializeExp(file,whenOp.message);
10631064
File.write(file, "],\"source\":");
@@ -1067,7 +1068,7 @@ algorithm
10671068
case whenOp as BackendDAE.NORETCALL() equation
10681069
File.write(file, "\",\"tag\":\"when\"");
10691070
File.write(file, ",\"uses\":[");
1070-
serializeUses(file,List.union(eq.conditions,Expression.extractUniqueCrefsFromExpDerPreStart(whenOp.exp)));
1071+
serializeUses(file, getWhenUses(eq.conditions, whenOp.exp));
10711072
File.write(file, "],\"equation\":[");
10721073
serializeExp(file,whenOp.exp);
10731074
File.write(file, "],\"source\":");
@@ -1276,6 +1277,17 @@ algorithm
12761277
end match;
12771278
end serializeUses;
12781279

1280+
function getWhenUses
1281+
input list<DAE.ComponentRef> conditions;
1282+
input DAE.Exp value;
1283+
output list<DAE.ComponentRef> uses;
1284+
protected
1285+
list<DAE.ComponentRef> crefs;
1286+
algorithm
1287+
uses := listAppend(conditions, Expression.extractCrefsFromExpDerPreStart(value));
1288+
uses := UnorderedSet.unique_list(uses, ComponentReference.hashComponentRef, ComponentReference.crefEqual);
1289+
end getWhenUses;
1290+
12791291
function serializeStatement
12801292
input File.File file;
12811293
input DAE.Statement stmt;

0 commit comments

Comments
 (0)