@@ -2077,17 +2077,25 @@ class SizeofParamPackExpr : public Node {
20772077class CallExpr : public Node {
20782078 const Node *Callee;
20792079 NodeArray Args;
2080+ bool IsParen; // (func)(args ...) ?
20802081
20812082public:
2082- CallExpr (const Node *Callee_, NodeArray Args_, Prec Prec_)
2083- : Node(KCallExpr, Prec_), Callee(Callee_), Args(Args_) {}
2083+ CallExpr (const Node *Callee_, NodeArray Args_, bool IsParen_, Prec Prec_)
2084+ : Node(KCallExpr, Prec_), Callee(Callee_), Args(Args_),
2085+ IsParen (IsParen_) {}
20842086
20852087 template <typename Fn> void match (Fn F) const {
20862088 F (Callee, Args, getPrecedence ());
20872089 }
20882090
20892091 void printLeft (OutputBuffer &OB) const override {
2090- Callee->print (OB);
2092+ if (IsParen) {
2093+ OB.printOpen ();
2094+ Callee->print (OB);
2095+ OB.printClose ();
2096+ } else {
2097+ Callee->print (OB);
2098+ }
20912099 OB.printOpen ();
20922100 Args.printWithComma (OB);
20932101 OB.printClose ();
@@ -3354,10 +3362,10 @@ const typename AbstractManglingParser<
33543362 " operator co_await" },
33553363 {" az" , OperatorInfo::OfIdOp, /* Type*/ false , Node::Prec::Unary, " alignof " },
33563364 {" cc" , OperatorInfo::NamedCast, false , Node::Prec::Postfix, " const_cast" },
3357- {" cl" , OperatorInfo::Call, false , Node::Prec::Postfix, " operator()" },
3365+ {" cl" , OperatorInfo::Call, /* Paren */ false , Node::Prec::Postfix, " operator()" },
33583366 {" cm" , OperatorInfo::Binary, false , Node::Prec::Comma, " operator," },
33593367 {" co" , OperatorInfo::Prefix, false , Node::Prec::Unary, " operator~" },
3360- {" cp" , OperatorInfo::Call, false , Node::Prec::Postfix, " operator()" },
3368+ {" cp" , OperatorInfo::Call, /* Paren */ true , Node::Prec::Postfix, " operator()" },
33613369 {" cv" , OperatorInfo::CCast, false , Node::Prec::Cast, " operator" }, // C Cast
33623370 {" dV" , OperatorInfo::Binary, false , Node::Prec::Assign, " operator/=" },
33633371 {" da" , OperatorInfo::Del, /* Ary*/ true , Node::Prec::Unary,
@@ -5140,7 +5148,7 @@ Node *AbstractManglingParser<Derived, Alloc>::parseExpr() {
51405148 Names.push_back (E);
51415149 }
51425150 return make<CallExpr>(Callee, popTrailingNodeArray (ExprsBegin),
5143- Op->getPrecedence ());
5151+ /* IsParen= */ Op-> getFlag (), Op->getPrecedence ());
51445152 }
51455153 case OperatorInfo::CCast: {
51465154 // C Cast: (type)expr
@@ -5327,7 +5335,7 @@ Node *AbstractManglingParser<Derived, Alloc>::parseExpr() {
53275335 }
53285336 }
53295337 return make<CallExpr>(Name, popTrailingNodeArray (ExprsBegin),
5330- Node::Prec::Postfix);
5338+ /* IsParen= */ false , Node::Prec::Postfix);
53315339 }
53325340
53335341 // Only unresolved names remain.
0 commit comments