@@ -61,6 +61,7 @@ import SimCodeUtil;
6161import SimCodeFunctionUtil ;
6262import SCodeDump ;
6363import Util ;
64+ import UnorderedSet ;
6465
6566function 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;
12771278end 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+
12791291function serializeStatement
12801292 input File . File file;
12811293 input DAE . Statement stmt;
0 commit comments