Skip to content

Commit

Permalink
[NF] Swap order of recursion in unit checking.
Browse files Browse the repository at this point in the history
- Swap order of recursion in NFUnitCheck.insertUnitInEquation as a
  workaround for #6114.
  • Loading branch information
perost committed Sep 15, 2020
1 parent d8e7f74 commit 7befa42
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions OMCompiler/Compiler/NFFrontEnd/NFUnitCheck.mo
Expand Up @@ -426,87 +426,87 @@ algorithm
// SUB equal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.SUB), exp2)
algorithm
(unit1 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(unit2 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
(true, op_unit, htCr2U) := unitTypesEqual(unit1, unit2, htCr2U);
then
(op_unit, List.append_reverse(icu1, icu2));

// SUB equal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.SUB), exp2)
algorithm
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(true, op_unit, htCr2U) := unitTypesEqual(unit1, unit2, htCr2U);
then
(op_unit, List.append_reverse(icu1, icu2));

// SUB unequal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.SUB), exp2)
algorithm
(unit1 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(unit2 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
(false, _, _) := unitTypesEqual(unit1, unit2, htCr2U);
then
(Unit.MASTER({}), {(exp1, unit1), (exp2, unit2)} :: List.append_reverse(icu1, icu2));

// SUB unequal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.SUB), exp2)
algorithm
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(false, _, _) := unitTypesEqual(unit1, unit2, htCr2U);
then
(Unit.MASTER({}), {(exp1, unit1), (exp2, unit2)} :: List.append_reverse(icu1, icu2));

// ADD equal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.ADD), exp2)
algorithm
(unit1 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(unit2 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
(true, op_unit, htCr2U) := unitTypesEqual(unit1, unit2, htCr2U);
then
(op_unit, List.append_reverse(icu1, icu2));

// ADD equal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.ADD), exp2)
algorithm
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(true, op_unit, htCr2U) := unitTypesEqual(unit1, unit2, htCr2U);
then
(op_unit, List.append_reverse(icu1, icu2));

// ADD unequal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.ADD), exp2)
algorithm
(unit1 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(unit2 as Unit.UNIT(), htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
(false, _, _) := unitTypesEqual(unit1, unit2, htCr2U);
then
(Unit.MASTER({}), {(exp1, unit1), (exp2, unit2)} :: List.append_reverse(icu1, icu2));

// ADD unequal summands
case Expression.BINARY(exp1, Operator.OPERATOR(op = Op.ADD), exp2)
algorithm
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit, htCr2U, htS2U, htU2S, fnCache);
(unit1, htCr2U, htS2U, htU2S, fnCache, icu2) :=
insertUnitInEquation(exp1, unit2, htCr2U, htS2U, htU2S, fnCache);
insertUnitInEquation(exp1, unit, htCr2U, htS2U, htU2S, fnCache);
(unit2, htCr2U, htS2U, htU2S, fnCache, icu1) :=
insertUnitInEquation(exp2, unit1, htCr2U, htS2U, htU2S, fnCache);
(false, _, _) := unitTypesEqual(unit1, unit2, htCr2U);
then
(Unit.MASTER({}), {(exp1, unit1), (exp2, unit2)} :: List.append_reverse(icu1, icu2));
Expand Down

0 comments on commit 7befa42

Please sign in to comment.