diff --git a/src/tests/acc.test b/src/tests/acc.test index 742d00ef2..43b8e6470 100755 --- a/src/tests/acc.test +++ b/src/tests/acc.test @@ -78,10 +78,10 @@ t f Fin(2) Inf(2) -Inf(2) | Fin(2) +Fin(2) | Inf(2) Fin(2) & Inf(2) -Fin(3) | (Fin(2) & Inf(1)) | Fin(0) -Fin(3) | (Fin(2) & Inf(1)) | Fin(0) +Fin(0) | (Fin(2) & Inf(1)) | Fin(3) +Fin(0) | (Fin(2) & Inf(1)) | Fin(3) EOF run 0 ../acc | tee stdout diff --git a/src/twa/acc.cc b/src/twa/acc.cc index da0509523..295b603fa 100644 --- a/src/twa/acc.cc +++ b/src/twa/acc.cc @@ -991,15 +991,18 @@ namespace spot static acc_cond::acc_code parse_acc(const char*& input) { - auto t = parse_term(input); + auto res = parse_term(input); skip_space(input); while (*input == '|') { ++input; skip_space(input); - t.append_or(parse_term(input)); + // Prepend instead of append, to preserve the input order. + auto tmp = parse_term(input); + std::swap(tmp, res); + res.append_or(std::move(tmp)); } - return t; + return res; } static unsigned parse_num(const char*& input) @@ -1067,7 +1070,10 @@ namespace spot { ++input; skip_space(input); - res.append_and(parse_term(input)); + // Prepend instead of append, to preserve the input order. + auto tmp = parse_term(input); + std::swap(tmp, res); + res.append_and(std::move(tmp)); } return res; }