summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/slang/slang-emit-c-like.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/source/slang/slang-emit-c-like.cpp b/source/slang/slang-emit-c-like.cpp
index 64cc9969c..7ed4d2e4c 100644
--- a/source/slang/slang-emit-c-like.cpp
+++ b/source/slang/slang-emit-c-like.cpp
@@ -705,6 +705,34 @@ bool CLikeSourceEmitter::maybeEmitParens(EmitOpInfo& outerPrec, const EmitOpInfo
{
needParens = true;
}
+ // a ^ b + c => a ^ (b + c)
+ else if (
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Additive_Left &&
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_BitXor_Right)
+ {
+ needParens = true;
+ }
+ // a + b ^ c => (a + b) ^ c
+ else if (
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Additive_Right &&
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_BitXor_Left)
+ {
+ needParens = true;
+ }
+ // a | b + c => a | (b + c)
+ else if (
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Additive_Left &&
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_BitOr_Right)
+ {
+ needParens = true;
+ }
+ // a + b | c => (a + b) | c
+ else if (
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Additive_Right &&
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_BitOr_Left)
+ {
+ needParens = true;
+ }
if (needParens)
{