Skip to content

Commit c204cee

Browse files
committed
[demangler] Update node match calls
Each demangler node's match function needs to call the provided functor with constructor arguments. That was omitted from D120905. This adds the new Precedence argument where necessary (and a missing boolean for a module node). The two visitors need updating with a printer for that type, and this adds a stub to cxa_demangle's version. blaikie added one to llvm's. I'll fill out those printers in a followup, rather than wait, so that downstream consumers are unbroken.
1 parent 65b1b3b commit c204cee

File tree

3 files changed

+80
-27
lines changed

3 files changed

+80
-27
lines changed

libcxxabi/src/cxa_demangle.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,9 @@ struct DumpVisitor {
173173
return printStr("TemplateParamKind::Template");
174174
}
175175
}
176+
void print(Node::Prec) {
177+
// FIXME: Print Prec enumerator
178+
}
176179

177180
void newLine() {
178181
printStr("\n");

libcxxabi/src/demangle/ItaniumDemangle.h

Lines changed: 40 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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();

llvm/include/llvm/Demangle/ItaniumDemangle.h

Lines changed: 37 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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)
@@ -1812,7 +1814,9 @@ class ArraySubscriptExpr : public Node {
18121814
ArraySubscriptExpr(const Node *Op1_, const Node *Op2_, Prec Prec_)
18131815
: Node(KArraySubscriptExpr, Prec_), Op1(Op1_), Op2(Op2_) {}
18141816

1815-
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+
}
18161820

18171821
void printLeft(OutputBuffer &OB) const override {
18181822
Op1->printAsOperand(OB, getPrecedence());
@@ -1830,7 +1834,9 @@ class PostfixExpr : public Node {
18301834
PostfixExpr(const Node *Child_, StringView Operator_, Prec Prec_)
18311835
: Node(KPostfixExpr, Prec_), Child(Child_), Operator(Operator_) {}
18321836

1833-
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+
}
18341840

18351841
void printLeft(OutputBuffer &OB) const override {
18361842
Child->printAsOperand(OB, getPrecedence(), true);
@@ -1848,7 +1854,9 @@ class ConditionalExpr : public Node {
18481854
Prec Prec_)
18491855
: Node(KConditionalExpr, Prec_), Cond(Cond_), Then(Then_), Else(Else_) {}
18501856

1851-
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+
}
18521860

18531861
void printLeft(OutputBuffer &OB) const override {
18541862
Cond->printAsOperand(OB, getPrecedence());
@@ -1868,7 +1876,9 @@ class MemberExpr : public Node {
18681876
MemberExpr(const Node *LHS_, StringView Kind_, const Node *RHS_, Prec Prec_)
18691877
: Node(KMemberExpr, Prec_), LHS(LHS_), Kind(Kind_), RHS(RHS_) {}
18701878

1871-
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+
}
18721882

18731883
void printLeft(OutputBuffer &OB) const override {
18741884
LHS->printAsOperand(OB, getPrecedence(), true);
@@ -1920,7 +1930,9 @@ class EnclosingExpr : public Node {
19201930
EnclosingExpr(StringView Prefix_, Node *Infix_, Prec Prec_ = Prec::Primary)
19211931
: Node(KEnclosingExpr, Prec_), Prefix(Prefix_), Infix(Infix_) {}
19221932

1923-
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+
}
19241936

19251937
void printLeft(OutputBuffer &OB) const override {
19261938
OB += Prefix;
@@ -1941,7 +1953,9 @@ class CastExpr : public Node {
19411953
CastExpr(StringView CastKind_, const Node *To_, const Node *From_, Prec Prec_)
19421954
: Node(KCastExpr, Prec_), CastKind(CastKind_), To(To_), From(From_) {}
19431955

1944-
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+
}
19451959

19461960
void printLeft(OutputBuffer &OB) const override {
19471961
OB += CastKind;
@@ -1985,7 +1999,9 @@ class CallExpr : public Node {
19851999
CallExpr(const Node *Callee_, NodeArray Args_, Prec Prec_)
19862000
: Node(KCallExpr, Prec_), Callee(Callee_), Args(Args_) {}
19872001

1988-
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+
}
19892005

19902006
void printLeft(OutputBuffer &OB) const override {
19912007
Callee->print(OB);
@@ -2009,7 +2025,7 @@ class NewExpr : public Node {
20092025
InitList(InitList_), IsGlobal(IsGlobal_), IsArray(IsArray_) {}
20102026

20112027
template<typename Fn> void match(Fn F) const {
2012-
F(ExprList, Type, InitList, IsGlobal, IsArray);
2028+
F(ExprList, Type, InitList, IsGlobal, IsArray, getPrecedence());
20132029
}
20142030

20152031
void printLeft(OutputBuffer &OB) const override {
@@ -2043,7 +2059,9 @@ class DeleteExpr : public Node {
20432059
: Node(KDeleteExpr, Prec_), Op(Op_), IsGlobal(IsGlobal_),
20442060
IsArray(IsArray_) {}
20452061

2046-
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+
}
20472065

20482066
void printLeft(OutputBuffer &OB) const override {
20492067
if (IsGlobal)
@@ -2064,7 +2082,9 @@ class PrefixExpr : public Node {
20642082
PrefixExpr(StringView Prefix_, Node *Child_, Prec Prec_)
20652083
: Node(KPrefixExpr, Prec_), Prefix(Prefix_), Child(Child_) {}
20662084

2067-
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+
}
20682088

20692089
void printLeft(OutputBuffer &OB) const override {
20702090
OB += Prefix;
@@ -2094,7 +2114,9 @@ class ConversionExpr : public Node {
20942114
ConversionExpr(const Node *Type_, NodeArray Expressions_, Prec Prec_)
20952115
: Node(KConversionExpr, Prec_), Type(Type_), Expressions(Expressions_) {}
20962116

2097-
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+
}
20982120

20992121
void printLeft(OutputBuffer &OB) const override {
21002122
OB.printOpen();
@@ -2117,7 +2139,9 @@ class PointerToMemberConversionExpr : public Node {
21172139
: Node(KPointerToMemberConversionExpr, Prec_), Type(Type_),
21182140
SubExpr(SubExpr_), Offset(Offset_) {}
21192141

2120-
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+
}
21212145

21222146
void printLeft(OutputBuffer &OB) const override {
21232147
OB.printOpen();

0 commit comments

Comments
 (0)