@@ -1056,7 +1056,9 @@ struct ModuleName : Node {
10561056 : Node(KModuleName), Parent(Parent_), Name(Name_),
10571057 IsPartition (IsPartition_) {}
10581058
1059- template <typename Fn> void match (Fn F) const { F (Parent, Name); }
1059+ template <typename Fn> void match (Fn F) const {
1060+ F (Parent, Name, IsPartition);
1061+ }
10601062
10611063 void printLeft (OutputBuffer &OB) const override {
10621064 if (Parent)
@@ -1782,7 +1784,9 @@ class BinaryExpr : public Node {
17821784 : Node(KBinaryExpr, Prec_), LHS(LHS_), InfixOperator(InfixOperator_),
17831785 RHS (RHS_) {}
17841786
1785- template <typename Fn> void match (Fn F) const { F (LHS, InfixOperator, RHS); }
1787+ template <typename Fn> void match (Fn F) const {
1788+ F (LHS, InfixOperator, RHS, getPrecedence ());
1789+ }
17861790
17871791 void printLeft (OutputBuffer &OB) const override {
17881792 bool ParenAll = OB.isGtInsideTemplateArgs () && InfixOperator == " >" ;
@@ -1810,7 +1814,9 @@ class ArraySubscriptExpr : public Node {
18101814 ArraySubscriptExpr (const Node *Op1_, const Node *Op2_, Prec Prec_)
18111815 : Node(KArraySubscriptExpr, Prec_), Op1(Op1_), Op2(Op2_) {}
18121816
1813- template <typename Fn> void match (Fn F) const { F (Op1, Op2); }
1817+ template <typename Fn> void match (Fn F) const {
1818+ F (Op1, Op2, getPrecedence ());
1819+ }
18141820
18151821 void printLeft (OutputBuffer &OB) const override {
18161822 Op1->printAsOperand (OB, getPrecedence ());
@@ -1828,7 +1834,9 @@ class PostfixExpr : public Node {
18281834 PostfixExpr (const Node *Child_, StringView Operator_, Prec Prec_)
18291835 : Node(KPostfixExpr, Prec_), Child(Child_), Operator(Operator_) {}
18301836
1831- template <typename Fn> void match (Fn F) const { F (Child, Operator); }
1837+ template <typename Fn> void match (Fn F) const {
1838+ F (Child, Operator, getPrecedence ());
1839+ }
18321840
18331841 void printLeft (OutputBuffer &OB) const override {
18341842 Child->printAsOperand (OB, getPrecedence (), true );
@@ -1846,7 +1854,9 @@ class ConditionalExpr : public Node {
18461854 Prec Prec_)
18471855 : Node(KConditionalExpr, Prec_), Cond(Cond_), Then(Then_), Else(Else_) {}
18481856
1849- template <typename Fn> void match (Fn F) const { F (Cond, Then, Else); }
1857+ template <typename Fn> void match (Fn F) const {
1858+ F (Cond, Then, Else, getPrecedence ());
1859+ }
18501860
18511861 void printLeft (OutputBuffer &OB) const override {
18521862 Cond->printAsOperand (OB, getPrecedence ());
@@ -1866,7 +1876,9 @@ class MemberExpr : public Node {
18661876 MemberExpr (const Node *LHS_, StringView Kind_, const Node *RHS_, Prec Prec_)
18671877 : Node(KMemberExpr, Prec_), LHS(LHS_), Kind(Kind_), RHS(RHS_) {}
18681878
1869- template <typename Fn> void match (Fn F) const { F (LHS, Kind, RHS); }
1879+ template <typename Fn> void match (Fn F) const {
1880+ F (LHS, Kind, RHS, getPrecedence ());
1881+ }
18701882
18711883 void printLeft (OutputBuffer &OB) const override {
18721884 LHS->printAsOperand (OB, getPrecedence (), true );
@@ -1918,7 +1930,9 @@ class EnclosingExpr : public Node {
19181930 EnclosingExpr (StringView Prefix_, Node *Infix_, Prec Prec_ = Prec::Primary)
19191931 : Node(KEnclosingExpr, Prec_), Prefix(Prefix_), Infix(Infix_) {}
19201932
1921- template <typename Fn> void match (Fn F) const { F (Prefix, Infix); }
1933+ template <typename Fn> void match (Fn F) const {
1934+ F (Prefix, Infix, getPrecedence ());
1935+ }
19221936
19231937 void printLeft (OutputBuffer &OB) const override {
19241938 OB += Prefix;
@@ -1939,7 +1953,9 @@ class CastExpr : public Node {
19391953 CastExpr (StringView CastKind_, const Node *To_, const Node *From_, Prec Prec_)
19401954 : Node(KCastExpr, Prec_), CastKind(CastKind_), To(To_), From(From_) {}
19411955
1942- template <typename Fn> void match (Fn F) const { F (CastKind, To, From); }
1956+ template <typename Fn> void match (Fn F) const {
1957+ F (CastKind, To, From, getPrecedence ());
1958+ }
19431959
19441960 void printLeft (OutputBuffer &OB) const override {
19451961 OB += CastKind;
@@ -1983,7 +1999,9 @@ class CallExpr : public Node {
19831999 CallExpr (const Node *Callee_, NodeArray Args_, Prec Prec_)
19842000 : Node(KCallExpr, Prec_), Callee(Callee_), Args(Args_) {}
19852001
1986- template <typename Fn> void match (Fn F) const { F (Callee, Args); }
2002+ template <typename Fn> void match (Fn F) const {
2003+ F (Callee, Args, getPrecedence ());
2004+ }
19872005
19882006 void printLeft (OutputBuffer &OB) const override {
19892007 Callee->print (OB);
@@ -2007,7 +2025,7 @@ class NewExpr : public Node {
20072025 InitList (InitList_), IsGlobal(IsGlobal_), IsArray(IsArray_) {}
20082026
20092027 template <typename Fn> void match (Fn F) const {
2010- F (ExprList, Type, InitList, IsGlobal, IsArray);
2028+ F (ExprList, Type, InitList, IsGlobal, IsArray, getPrecedence () );
20112029 }
20122030
20132031 void printLeft (OutputBuffer &OB) const override {
@@ -2041,7 +2059,9 @@ class DeleteExpr : public Node {
20412059 : Node(KDeleteExpr, Prec_), Op(Op_), IsGlobal(IsGlobal_),
20422060 IsArray (IsArray_) {}
20432061
2044- template <typename Fn> void match (Fn F) const { F (Op, IsGlobal, IsArray); }
2062+ template <typename Fn> void match (Fn F) const {
2063+ F (Op, IsGlobal, IsArray, getPrecedence ());
2064+ }
20452065
20462066 void printLeft (OutputBuffer &OB) const override {
20472067 if (IsGlobal)
@@ -2062,7 +2082,9 @@ class PrefixExpr : public Node {
20622082 PrefixExpr (StringView Prefix_, Node *Child_, Prec Prec_)
20632083 : Node(KPrefixExpr, Prec_), Prefix(Prefix_), Child(Child_) {}
20642084
2065- template <typename Fn> void match (Fn F) const { F (Prefix, Child); }
2085+ template <typename Fn> void match (Fn F) const {
2086+ F (Prefix, Child, getPrecedence ());
2087+ }
20662088
20672089 void printLeft (OutputBuffer &OB) const override {
20682090 OB += Prefix;
@@ -2092,7 +2114,9 @@ class ConversionExpr : public Node {
20922114 ConversionExpr (const Node *Type_, NodeArray Expressions_, Prec Prec_)
20932115 : Node(KConversionExpr, Prec_), Type(Type_), Expressions(Expressions_) {}
20942116
2095- template <typename Fn> void match (Fn F) const { F (Type, Expressions); }
2117+ template <typename Fn> void match (Fn F) const {
2118+ F (Type, Expressions, getPrecedence ());
2119+ }
20962120
20972121 void printLeft (OutputBuffer &OB) const override {
20982122 OB.printOpen ();
@@ -2115,7 +2139,9 @@ class PointerToMemberConversionExpr : public Node {
21152139 : Node(KPointerToMemberConversionExpr, Prec_), Type(Type_),
21162140 SubExpr (SubExpr_), Offset(Offset_) {}
21172141
2118- template <typename Fn> void match (Fn F) const { F (Type, SubExpr, Offset); }
2142+ template <typename Fn> void match (Fn F) const {
2143+ F (Type, SubExpr, Offset, getPrecedence ());
2144+ }
21192145
21202146 void printLeft (OutputBuffer &OB) const override {
21212147 OB.printOpen ();
0 commit comments