summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-emit-c-like.cpp
diff options
context:
space:
mode:
authorAnders Leino <aleino@nvidia.com>2025-01-09 07:43:31 +0200
committerGitHub <noreply@github.com>2025-01-08 21:43:31 -0800
commitdab6cec1ed78a545c127adc0e8dbdf1f253f9132 (patch)
tree6cd0a310932b84984d4f9fd94aada408e041e64a /source/slang/slang-emit-c-like.cpp
parent2249d6ffb19e4db8580c76ccb04ab4ca3ddc8394 (diff)
Add parentheses to make precedence explicit (#6030)
* Add parentheses to make precedence explicit Add parentheses for a few cases that Dawn/Tint (WGSL compiler) complains about. Closes #6005. * format code --------- Co-authored-by: slangbot <186143334+slangbot@users.noreply.github.com> Co-authored-by: Yong He <yonghe@outlook.com>
Diffstat (limited to 'source/slang/slang-emit-c-like.cpp')
-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)
{