@@ -733,6 +733,83 @@ bool CLikeSourceEmitter::maybeEmitParens(EmitOpInfo& outerPrec, const EmitOpInfo
733
733
{
734
734
needParens = true ;
735
735
}
736
+ // a ^ b * c => a ^ (b * c)
737
+ else if (
738
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Multiplicative_Left &&
739
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_BitXor_Right )
740
+ {
741
+ needParens = true ;
742
+ }
743
+ // a * b ^ c => (a * b) ^ c
744
+ else if (
745
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Multiplicative_Right &&
746
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_BitXor_Left )
747
+ {
748
+ needParens = true ;
749
+ }
750
+ // a | b * c => a | (b * c)
751
+ else if (
752
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Multiplicative_Left &&
753
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_BitOr_Right )
754
+ {
755
+ needParens = true ;
756
+ }
757
+ // a * b | c => (a * b) | c
758
+ else if (
759
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Multiplicative_Right &&
760
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_BitOr_Left )
761
+ {
762
+ needParens = true ;
763
+ }
764
+ // a & b * c => a & (b * c)
765
+ else if (
766
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Multiplicative_Left &&
767
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_BitAnd_Right )
768
+ {
769
+ needParens = true ;
770
+ }
771
+ // a * b & c => (a * b) & c
772
+ else if (
773
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Multiplicative_Right &&
774
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_BitAnd_Left )
775
+ {
776
+ needParens = true ;
777
+ }
778
+ // a << b * c => a << (b * c)
779
+ else if (
780
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Multiplicative_Left &&
781
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_Shift_Right )
782
+ {
783
+ needParens = true ;
784
+ }
785
+ // a * b << c => (a * b) << c
786
+ else if (
787
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Multiplicative_Right &&
788
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_Shift_Left )
789
+ {
790
+ needParens = true ;
791
+ }
792
+ // a != b == c => (a != b) == c
793
+ else if (
794
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Equality_Right &&
795
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_Equality_Left )
796
+ {
797
+ needParens = true ;
798
+ }
799
+ // a == b < c => a == (b < c)
800
+ else if (
801
+ prec.leftPrecedence == EPrecedence::kEPrecedence_Relational_Left &&
802
+ outerPrec.leftPrecedence == EPrecedence::kEPrecedence_Equality_Right )
803
+ {
804
+ needParens = true ;
805
+ }
806
+ // a < b == c => (a < b) == c
807
+ else if (
808
+ prec.rightPrecedence == EPrecedence::kEPrecedence_Relational_Right &&
809
+ outerPrec.rightPrecedence == EPrecedence::kEPrecedence_Equality_Left )
810
+ {
811
+ needParens = true ;
812
+ }
736
813
737
814
if (needParens)
738
815
{
0 commit comments