From dab6cec1ed78a545c127adc0e8dbdf1f253f9132 Mon Sep 17 00:00:00 2001 From: Anders Leino Date: Thu, 9 Jan 2025 07:43:31 +0200 Subject: 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 --- source/slang/slang-emit-c-like.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'source') 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) { -- cgit v1.2.3