From 82cce42ba5ce8f5d3e3bd727e3e2dc10d98f1d4c Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Sat, 22 Jan 2022 11:03:30 +0100 Subject: [py] Fix "not" operator precedence. --- GenPy.cs | 9 ++++++--- test/OpBoolLogic.ci | 2 +- test/OpNot.ci | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/GenPy.cs b/GenPy.cs index 6343074..921337f 100644 --- a/GenPy.cs +++ b/GenPy.cs @@ -246,12 +246,15 @@ public class GenPy : GenPySwift public override CiExpr Visit(CiPrefixExpr expr, CiPriority parent) { if (expr.Op == CiToken.ExclamationMark) { + if (parent > CiPriority.CondAnd) + Write('('); Write("not "); - expr.Inner.Accept(this, CiPriority.Primary); + expr.Inner.Accept(this, CiPriority.Or); + if (parent > CiPriority.CondAnd) + Write(')'); return expr; } - else - return base.Visit(expr, parent); + return base.Visit(expr, parent); } static bool IsPtr(CiExpr expr) => expr.Type is CiClassPtrType || expr.Type is CiArrayPtrType; diff --git a/test/OpBoolLogic.ci b/test/OpBoolLogic.ci index 432bea6..8ae7e7b 100644 --- a/test/OpBoolLogic.ci +++ b/test/OpBoolLogic.ci @@ -4,7 +4,7 @@ public static class Test { bool t = true; bool f = false; - return (t & !f) //FAIL: python swift ts TODO + return (t & !f) //FAIL: swift ts TODO && (t | f) && (t ^ f); } diff --git a/test/OpNot.ci b/test/OpNot.ci index af8a39d..206f29c 100644 --- a/test/OpNot.ci +++ b/test/OpNot.ci @@ -7,7 +7,7 @@ public static class Test bool t = true; return !a && !(a && a) - && !(a && !a) //FAIL: python TODO + && !(a && !a) && !(a & a) //FAIL: swift ts TODO && !(a & !a) && !(!t & a) -- cgit v1.2.3