Lines Matching refs:Node

155 class Node {
211 Node(Kind K_, Prec Precedence_ = Prec::Primary,
216 Node(Kind K_, Cache RHSComponentCache_, Cache ArrayCache_ = Cache::No,
218 : Node(K_, Prec::Primary, RHSComponentCache_, ArrayCache_, in Node() function
258 virtual const Node *getSyntaxNode(OutputBuffer &) const { return this; } in getSyntaxNode()
291 virtual ~Node() = default;
299 Node **Elements;
304 NodeArray(Node **Elements_, size_t NumElements_) in NodeArray()
310 Node **begin() const { return Elements; } in begin()
311 Node **end() const { return Elements + NumElements; } in end()
313 Node *operator[](size_t Idx) const { return Elements[Idx]; }
322 Elements[Idx]->printAsOperand(OB, Node::Prec::Comma); in printWithComma()
336 struct NodeArrayNode : Node {
338 NodeArrayNode(NodeArray Array_) : Node(KNodeArrayNode), Array(Array_) {} in NodeArrayNode()
345 class DotSuffix final : public Node {
346 const Node *Prefix;
350 DotSuffix(const Node *Prefix_, StringView Suffix_) in DotSuffix()
351 : Node(KDotSuffix), Prefix(Prefix_), Suffix(Suffix_) {} in DotSuffix()
363 class VendorExtQualType final : public Node {
364 const Node *Ty;
366 const Node *TA;
369 VendorExtQualType(const Node *Ty_, StringView Ext_, const Node *TA_) in VendorExtQualType()
370 : Node(KVendorExtQualType), Ty(Ty_), Ext(Ext_), TA(TA_) {} in VendorExtQualType()
400 class QualType final : public Node {
403 const Node *Child;
415 QualType(const Node *Child_, Qualifiers Quals_) in QualType()
416 : Node(KQualType, Child_->RHSComponentCache, in QualType()
440 class ConversionOperatorType final : public Node {
441 const Node *Ty;
444 ConversionOperatorType(const Node *Ty_) in ConversionOperatorType()
445 : Node(KConversionOperatorType), Ty(Ty_) {} in ConversionOperatorType()
455 class PostfixQualifiedType final : public Node {
456 const Node *Ty;
460 PostfixQualifiedType(const Node *Ty_, StringView Postfix_) in PostfixQualifiedType()
461 : Node(KPostfixQualifiedType), Ty(Ty_), Postfix(Postfix_) {} in PostfixQualifiedType()
471 class NameType final : public Node {
475 NameType(StringView Name_) : Node(KNameType), Name(Name_) {} in NameType()
485 class BitIntType final : public Node {
486 const Node *Size;
490 BitIntType(const Node *Size_, bool Signed_) in BitIntType()
491 : Node(KBitIntType), Size(Size_), Signed(Signed_) {} in BitIntType()
505 class ElaboratedTypeSpefType : public Node {
507 Node *Child;
509 ElaboratedTypeSpefType(StringView Kind_, Node *Child_) in ElaboratedTypeSpefType()
510 : Node(KElaboratedTypeSpefType), Kind(Kind_), Child(Child_) {} in ElaboratedTypeSpefType()
521 struct AbiTagAttr : Node {
522 Node *Base;
525 AbiTagAttr(Node* Base_, StringView Tag_) in AbiTagAttr()
526 : Node(KAbiTagAttr, Base_->RHSComponentCache, in AbiTagAttr()
540 class EnableIfAttr : public Node {
544 : Node(KEnableIfAttr), Conditions(Conditions_) {} in EnableIfAttr()
555 class ObjCProtoName : public Node {
556 const Node *Ty;
562 ObjCProtoName(const Node *Ty_, StringView Protocol_) in ObjCProtoName()
563 : Node(KObjCProtoName), Ty(Ty_), Protocol(Protocol_) {} in ObjCProtoName()
580 class PointerType final : public Node {
581 const Node *Pointee;
584 PointerType(const Node *Pointee_) in PointerType()
585 : Node(KPointerType, Pointee_->RHSComponentCache), in PointerType()
628 class ReferenceType : public Node {
629 const Node *Pointee;
641 std::pair<ReferenceKind, const Node *> collapse(OutputBuffer &OB) const { in collapse()
645 PODSmallVector<const Node *, 8> Prev; in collapse()
647 const Node *SN = SoFar.second->getSyntaxNode(OB); in collapse()
666 ReferenceType(const Node *Pointee_, ReferenceKind RK_) in ReferenceType()
667 : Node(KReferenceType, Pointee_->RHSComponentCache), in ReferenceType()
680 std::pair<ReferenceKind, const Node *> Collapsed = collapse(OB); in printLeft()
695 std::pair<ReferenceKind, const Node *> Collapsed = collapse(OB); in printRight()
704 class PointerToMemberType final : public Node {
705 const Node *ClassType;
706 const Node *MemberType;
709 PointerToMemberType(const Node *ClassType_, const Node *MemberType_) in PointerToMemberType()
710 : Node(KPointerToMemberType, MemberType_->RHSComponentCache), in PointerToMemberType()
736 class ArrayType final : public Node {
737 const Node *Base;
738 Node *Dimension;
741 ArrayType(const Node *Base_, Node *Dimension_) in ArrayType()
742 : Node(KArrayType, in ArrayType()
765 class FunctionType final : public Node {
766 const Node *Ret;
770 const Node *ExceptionSpec;
773 FunctionType(const Node *Ret_, NodeArray Params_, Qualifiers CVQuals_, in FunctionType()
774 FunctionRefQual RefQual_, const Node *ExceptionSpec_) in FunctionType()
775 : Node(KFunctionType, in FunctionType()
825 class NoexceptSpec : public Node {
826 const Node *E;
828 NoexceptSpec(const Node *E_) : Node(KNoexceptSpec), E(E_) {} in NoexceptSpec()
840 class DynamicExceptionSpec : public Node {
844 : Node(KDynamicExceptionSpec), Types(Types_) {} in DynamicExceptionSpec()
856 class FunctionEncoding final : public Node {
857 const Node *Ret;
858 const Node *Name;
860 const Node *Attrs;
865 FunctionEncoding(const Node *Ret_, const Node *Name_, NodeArray Params_, in FunctionEncoding()
866 const Node *Attrs_, Qualifiers CVQuals_, in FunctionEncoding()
868 : Node(KFunctionEncoding, in FunctionEncoding()
881 const Node *getReturnType() const { return Ret; } in getReturnType()
886 const Node *getName() const { return Name; } in getName()
921 class LiteralOperator : public Node {
922 const Node *OpName;
925 LiteralOperator(const Node *OpName_) in LiteralOperator()
926 : Node(KLiteralOperator), OpName(OpName_) {} in LiteralOperator()
936 class SpecialName final : public Node {
938 const Node *Child;
941 SpecialName(StringView Special_, const Node *Child_) in SpecialName()
942 : Node(KSpecialName), Special(Special_), Child(Child_) {} in SpecialName()
952 class CtorVtableSpecialName final : public Node {
953 const Node *FirstType;
954 const Node *SecondType;
957 CtorVtableSpecialName(const Node *FirstType_, const Node *SecondType_) in CtorVtableSpecialName()
958 : Node(KCtorVtableSpecialName), in CtorVtableSpecialName()
971 struct NestedName : Node {
972 Node *Qual;
973 Node *Name;
975 NestedName(Node *Qual_, Node *Name_) in NestedName()
976 : Node(KNestedName), Qual(Qual_), Name(Name_) {} in NestedName()
989 struct ModuleName : Node {
991 Node *Name;
994 ModuleName(ModuleName *Parent_, Node *Name_, bool IsPartition_ = false)
995 : Node(KModuleName), Parent(Parent_), Name(Name_), in Node() function
1011 struct ModuleEntity : Node {
1013 Node *Name;
1015 ModuleEntity(ModuleName *Module_, Node *Name_) in ModuleEntity()
1016 : Node(KModuleEntity), Module(Module_), Name(Name_) {} in ModuleEntity()
1029 struct LocalName : Node {
1030 Node *Encoding;
1031 Node *Entity;
1033 LocalName(Node *Encoding_, Node *Entity_) in LocalName()
1034 : Node(KLocalName), Encoding(Encoding_), Entity(Entity_) {} in LocalName()
1045 class QualifiedName final : public Node {
1047 const Node *Qualifier;
1048 const Node *Name;
1051 QualifiedName(const Node *Qualifier_, const Node *Name_) in QualifiedName()
1052 : Node(KQualifiedName), Qualifier(Qualifier_), Name(Name_) {} in QualifiedName()
1065 class VectorType final : public Node {
1066 const Node *BaseType;
1067 const Node *Dimension;
1070 VectorType(const Node *BaseType_, const Node *Dimension_) in VectorType()
1071 : Node(KVectorType), BaseType(BaseType_), Dimension(Dimension_) {} in VectorType()
1084 class PixelVectorType final : public Node {
1085 const Node *Dimension;
1088 PixelVectorType(const Node *Dimension_) in PixelVectorType()
1089 : Node(KPixelVectorType), Dimension(Dimension_) {} in PixelVectorType()
1101 class BinaryFPType final : public Node {
1102 const Node *Dimension;
1105 BinaryFPType(const Node *Dimension_) in BinaryFPType()
1106 : Node(KBinaryFPType), Dimension(Dimension_) {} in BinaryFPType()
1124 class SyntheticTemplateParamName final : public Node {
1130 : Node(KSyntheticTemplateParamName), Kind(Kind_), Index(Index_) {} in SyntheticTemplateParamName()
1152 class TypeTemplateParamDecl final : public Node {
1153 Node *Name;
1156 TypeTemplateParamDecl(Node *Name_) in TypeTemplateParamDecl()
1157 : Node(KTypeTemplateParamDecl, Cache::Yes), Name(Name_) {} in TypeTemplateParamDecl()
1167 class NonTypeTemplateParamDecl final : public Node {
1168 Node *Name;
1169 Node *Type;
1172 NonTypeTemplateParamDecl(Node *Name_, Node *Type_) in NonTypeTemplateParamDecl()
1173 : Node(KNonTypeTemplateParamDecl, Cache::Yes), Name(Name_), Type(Type_) {} in NonTypeTemplateParamDecl()
1191 class TemplateTemplateParamDecl final : public Node {
1192 Node *Name;
1196 TemplateTemplateParamDecl(Node *Name_, NodeArray Params_) in TemplateTemplateParamDecl()
1197 : Node(KTemplateTemplateParamDecl, Cache::Yes), Name(Name_), in TemplateTemplateParamDecl()
1213 class TemplateParamPackDecl final : public Node {
1214 Node *Param;
1217 TemplateParamPackDecl(Node *Param_) in TemplateParamPackDecl()
1218 : Node(KTemplateParamPackDecl, Cache::Yes), Param(Param_) {} in TemplateParamPackDecl()
1238 class ParameterPack final : public Node {
1251 ParameterPack(NodeArray Data_) : Node(KParameterPack), Data(Data_) { in ParameterPack()
1253 if (std::all_of(Data.begin(), Data.end(), [](Node* P) { in ParameterPack()
1257 if (std::all_of(Data.begin(), Data.end(), [](Node* P) { in ParameterPack()
1261 if (std::all_of(Data.begin(), Data.end(), [](Node* P) { in ParameterPack()
1284 const Node *getSyntaxNode(OutputBuffer &OB) const override { in getSyntaxNode()
1309 class TemplateArgumentPack final : public Node {
1313 : Node(KTemplateArgumentPack), Elements(Elements_) {} in TemplateArgumentPack()
1326 class ParameterPackExpansion final : public Node {
1327 const Node *Child;
1330 ParameterPackExpansion(const Node *Child_) in ParameterPackExpansion()
1331 : Node(KParameterPackExpansion), Child(Child_) {} in ParameterPackExpansion()
1335 const Node *getChild() const { return Child; } in getChild()
1370 class TemplateArgs final : public Node {
1374 TemplateArgs(NodeArray Params_) : Node(KTemplateArgs), Params(Params_) {} in TemplateArgs()
1406 struct ForwardTemplateReference : Node {
1408 Node *Ref = nullptr;
1417 : Node(KForwardTemplateReference, Cache::Unknown, Cache::Unknown, in ForwardTemplateReference()
1444 const Node *getSyntaxNode(OutputBuffer &OB) const override { in getSyntaxNode()
1465 struct NameWithTemplateArgs : Node {
1467 Node *Name;
1468 Node *TemplateArgs;
1470 NameWithTemplateArgs(Node *Name_, Node *TemplateArgs_) in NameWithTemplateArgs()
1471 : Node(KNameWithTemplateArgs), Name(Name_), TemplateArgs(TemplateArgs_) {} in NameWithTemplateArgs()
1483 class GlobalQualifiedName final : public Node {
1484 Node *Child;
1487 GlobalQualifiedName(Node* Child_) in GlobalQualifiedName()
1488 : Node(KGlobalQualifiedName), Child(Child_) {} in GlobalQualifiedName()
1510 class ExpandedSpecialSubstitution : public Node {
1515 : Node(K_), SSK(SSK_) {} in ExpandedSpecialSubstitution()
1584 class CtorDtorName final : public Node {
1585 const Node *Basename;
1590 CtorDtorName(const Node *Basename_, bool IsDtor_, int Variant_) in CtorDtorName()
1591 : Node(KCtorDtorName), Basename(Basename_), IsDtor(IsDtor_), in CtorDtorName()
1603 class DtorName : public Node {
1604 const Node *Base;
1607 DtorName(const Node *Base_) : Node(KDtorName), Base(Base_) {} in DtorName()
1617 class UnnamedTypeName : public Node {
1621 UnnamedTypeName(StringView Count_) : Node(KUnnamedTypeName), Count(Count_) {} in UnnamedTypeName()
1632 class ClosureTypeName : public Node {
1640 : Node(KClosureTypeName), TemplateParams(TemplateParams_), in ClosureTypeName()
1667 class StructuredBindingName : public Node {
1671 : Node(KStructuredBindingName), Bindings(Bindings_) {} in StructuredBindingName()
1684 class BinaryExpr : public Node {
1685 const Node *LHS;
1687 const Node *RHS;
1690 BinaryExpr(const Node *LHS_, StringView InfixOperator_, const Node *RHS_, in BinaryExpr()
1692 : Node(KBinaryExpr, Prec_), LHS(LHS_), InfixOperator(InfixOperator_), in BinaryExpr()
1718 class ArraySubscriptExpr : public Node {
1719 const Node *Op1;
1720 const Node *Op2;
1723 ArraySubscriptExpr(const Node *Op1_, const Node *Op2_, Prec Prec_) in ArraySubscriptExpr()
1724 : Node(KArraySubscriptExpr, Prec_), Op1(Op1_), Op2(Op2_) {} in ArraySubscriptExpr()
1738 class PostfixExpr : public Node {
1739 const Node *Child;
1743 PostfixExpr(const Node *Child_, StringView Operator_, Prec Prec_) in PostfixExpr()
1744 : Node(KPostfixExpr, Prec_), Child(Child_), Operator(Operator_) {} in PostfixExpr()
1756 class ConditionalExpr : public Node {
1757 const Node *Cond;
1758 const Node *Then;
1759 const Node *Else;
1762 ConditionalExpr(const Node *Cond_, const Node *Then_, const Node *Else_, in ConditionalExpr()
1764 : Node(KConditionalExpr, Prec_), Cond(Cond_), Then(Then_), Else(Else_) {} in ConditionalExpr()
1779 class MemberExpr : public Node {
1780 const Node *LHS;
1782 const Node *RHS;
1785 MemberExpr(const Node *LHS_, StringView Kind_, const Node *RHS_, Prec Prec_) in MemberExpr()
1786 : Node(KMemberExpr, Prec_), LHS(LHS_), Kind(Kind_), RHS(RHS_) {} in MemberExpr()
1799 class SubobjectExpr : public Node {
1800 const Node *Type;
1801 const Node *SubExpr;
1807 SubobjectExpr(const Node *Type_, const Node *SubExpr_, StringView Offset_, in SubobjectExpr()
1809 : Node(KSubobjectExpr), Type(Type_), SubExpr(SubExpr_), Offset(Offset_), in SubobjectExpr()
1833 class EnclosingExpr : public Node {
1835 const Node *Infix;
1839 EnclosingExpr(StringView Prefix_, const Node *Infix_,
1841 : Node(KEnclosingExpr, Prec_), Prefix(Prefix_), Infix(Infix_) {} in Node() function
1856 class CastExpr : public Node {
1859 const Node *To;
1860 const Node *From;
1863 CastExpr(StringView CastKind_, const Node *To_, const Node *From_, Prec Prec_) in CastExpr()
1864 : Node(KCastExpr, Prec_), CastKind(CastKind_), To(To_), From(From_) {} in CastExpr()
1884 class SizeofParamPackExpr : public Node {
1885 const Node *Pack;
1888 SizeofParamPackExpr(const Node *Pack_) in SizeofParamPackExpr()
1889 : Node(KSizeofParamPackExpr), Pack(Pack_) {} in SizeofParamPackExpr()
1902 class CallExpr : public Node {
1903 const Node *Callee;
1907 CallExpr(const Node *Callee_, NodeArray Args_, Prec Prec_) in CallExpr()
1908 : Node(KCallExpr, Prec_), Callee(Callee_), Args(Args_) {} in CallExpr()
1922 class NewExpr : public Node {
1925 Node *Type;
1930 NewExpr(NodeArray ExprList_, Node *Type_, NodeArray InitList_, bool IsGlobal_, in NewExpr()
1932 : Node(KNewExpr, Prec_), ExprList(ExprList_), Type(Type_), in NewExpr()
1960 class DeleteExpr : public Node {
1961 Node *Op;
1966 DeleteExpr(Node *Op_, bool IsGlobal_, bool IsArray_, Prec Prec_) in DeleteExpr()
1967 : Node(KDeleteExpr, Prec_), Op(Op_), IsGlobal(IsGlobal_), in DeleteExpr()
1985 class PrefixExpr : public Node {
1987 Node *Child;
1990 PrefixExpr(StringView Prefix_, Node *Child_, Prec Prec_) in PrefixExpr()
1991 : Node(KPrefixExpr, Prec_), Prefix(Prefix_), Child(Child_) {} in PrefixExpr()
2003 class FunctionParam : public Node {
2007 FunctionParam(StringView Number_) : Node(KFunctionParam), Number(Number_) {} in FunctionParam()
2017 class ConversionExpr : public Node {
2018 const Node *Type;
2022 ConversionExpr(const Node *Type_, NodeArray Expressions_, Prec Prec_) in ConversionExpr()
2023 : Node(KConversionExpr, Prec_), Type(Type_), Expressions(Expressions_) {} in ConversionExpr()
2039 class PointerToMemberConversionExpr : public Node {
2040 const Node *Type;
2041 const Node *SubExpr;
2045 PointerToMemberConversionExpr(const Node *Type_, const Node *SubExpr_, in PointerToMemberConversionExpr()
2047 : Node(KPointerToMemberConversionExpr, Prec_), Type(Type_), in PointerToMemberConversionExpr()
2064 class InitListExpr : public Node {
2065 const Node *Ty;
2068 InitListExpr(const Node *Ty_, NodeArray Inits_) in InitListExpr()
2069 : Node(KInitListExpr), Ty(Ty_), Inits(Inits_) {} in InitListExpr()
2082 class BracedExpr : public Node {
2083 const Node *Elem;
2084 const Node *Init;
2087 BracedExpr(const Node *Elem_, const Node *Init_, bool IsArray_) in BracedExpr()
2088 : Node(KBracedExpr), Elem(Elem_), Init(Init_), IsArray(IsArray_) {} in BracedExpr()
2107 class BracedRangeExpr : public Node {
2108 const Node *First;
2109 const Node *Last;
2110 const Node *Init;
2112 BracedRangeExpr(const Node *First_, const Node *Last_, const Node *Init_) in BracedRangeExpr()
2113 : Node(KBracedRangeExpr), First(First_), Last(Last_), Init(Init_) {} in BracedRangeExpr()
2129 class FoldExpr : public Node {
2130 const Node *Pack, *Init;
2135 FoldExpr(bool IsLeftFold_, StringView OperatorName_, const Node *Pack_, in FoldExpr()
2136 const Node *Init_) in FoldExpr()
2137 : Node(KFoldExpr), Pack(Pack_), Init(Init_), OperatorName(OperatorName_), in FoldExpr()
2176 class ThrowExpr : public Node {
2177 const Node *Op;
2180 ThrowExpr(const Node *Op_) : Node(KThrowExpr), Op(Op_) {} in ThrowExpr()
2190 class BoolExpr : public Node {
2194 BoolExpr(bool Value_) : Node(KBoolExpr), Value(Value_) {} in BoolExpr()
2203 class StringLiteral : public Node {
2204 const Node *Type;
2207 StringLiteral(const Node *Type_) : Node(KStringLiteral), Type(Type_) {} in StringLiteral()
2218 class LambdaExpr : public Node {
2219 const Node *Type;
2222 LambdaExpr(const Node *Type_) : Node(KLambdaExpr), Type(Type_) {} in LambdaExpr()
2234 class EnumLiteral : public Node {
2236 const Node *Ty;
2240 EnumLiteral(const Node *Ty_, StringView Integer_) in EnumLiteral()
2241 : Node(KEnumLiteral), Ty(Ty_), Integer(Integer_) {} in EnumLiteral()
2257 class IntegerLiteral : public Node {
2263 : Node(KIntegerLiteral), Type(Type_), Value(Value_) {} in IntegerLiteral()
2288 constexpr Node::Kind getFloatLiteralKind(float *) { in getFloatLiteralKind()
2289 return Node::KFloatLiteral; in getFloatLiteralKind()
2291 constexpr Node::Kind getFloatLiteralKind(double *) { in getFloatLiteralKind()
2292 return Node::KDoubleLiteral; in getFloatLiteralKind()
2294 constexpr Node::Kind getFloatLiteralKind(long double *) { in getFloatLiteralKind()
2295 return Node::KLongDoubleLiteral; in getFloatLiteralKind()
2299 template <class Float> class FloatLiteralImpl : public Node {
2307 : Node(KindForClass), Contents(Contents_) {} in FloatLiteralImpl()
2349 void Node::visit(Fn F) const { in visit()
2363 static constexpr Node::Kind Kind = Node::K##X; \
2375 PODSmallVector<Node *, 32> Names;
2380 PODSmallVector<Node *, 32> Subs;
2382 using TemplateParamList = PODSmallVector<Node *, 8>;
2444 template <class T, class... Args> Node *make(Args &&... args) { in make()
2451 Node **data = new (mem) Node *[sz]; in makeNodeArray()
2496 Node *parseSubstitution();
2497 Node *parseTemplateParam();
2498 Node *parseTemplateParamDecl();
2499 Node *parseTemplateArgs(bool TagTemplates = false);
2500 Node *parseTemplateArg();
2503 Node *parseExpr();
2504 Node *parsePrefixExpr(StringView Kind, Node::Prec Prec);
2505 Node *parseBinaryExpr(StringView Kind, Node::Prec Prec);
2506 Node *parseIntegerLiteral(StringView Lit);
2507 Node *parseExprPrimary();
2508 template <class Float> Node *parseFloatingLiteral();
2509 Node *parseFunctionParam();
2510 Node *parseConversionExpr();
2511 Node *parseBracedExpr();
2512 Node *parseFoldExpr();
2513 Node *parsePointerToMemberConversionExpr(Node::Prec Prec);
2514 Node *parseSubobjectExpr();
2517 Node *parseType();
2518 Node *parseFunctionType();
2519 Node *parseVectorType();
2520 Node *parseDecltype();
2521 Node *parseArrayType();
2522 Node *parsePointerToMemberType();
2523 Node *parseClassEnumType();
2524 Node *parseQualifiedType();
2526 Node *parseEncoding();
2528 Node *parseSpecialName();
2558 Node *parseName(NameState *State = nullptr);
2559 Node *parseLocalName(NameState *State);
2560 Node *parseOperatorName(NameState *State);
2562 Node *parseUnqualifiedName(NameState *State, Node *Scope, ModuleName *Module);
2563 Node *parseUnnamedTypeName(NameState *State);
2564 Node *parseSourceName(NameState *State);
2565 Node *parseUnscopedName(NameState *State, bool *isSubstName);
2566 Node *parseNestedName(NameState *State);
2567 Node *parseCtorDtorName(Node *&SoFar, NameState *State);
2569 Node *parseAbiTags(Node *N);
2593 Node::Prec Prec : 7; // Precedence
2597 constexpr OperatorInfo(const char (&E)[3], OIKind K, bool F, Node::Prec P, in OperatorInfo()
2627 Node::Prec getPrecedence() const { return Prec; } in getPrecedence()
2634 Node *parseUnresolvedName(bool Global);
2635 Node *parseSimpleId();
2636 Node *parseBaseUnresolvedName();
2637 Node *parseUnresolvedType();
2638 Node *parseDestructorName();
2641 Node *parse();
2654 Node *AbstractManglingParser<Derived, Alloc>::parseName(NameState *State) { in parseName()
2660 Node *Result = nullptr; in parseName()
2672 Node *TA = getDerived().parseTemplateArgs(State != nullptr); in parseName()
2690 Node *AbstractManglingParser<Derived, Alloc>::parseLocalName(NameState *State) { in parseLocalName()
2693 Node *Encoding = getDerived().parseEncoding(); in parseLocalName()
2709 Node *N = getDerived().parseName(State); in parseLocalName()
2715 Node *Entity = getDerived().parseName(State); in parseLocalName()
2726 Node *
2730 Node *Std = nullptr; in parseUnscopedName()
2737 Node *Res = nullptr; in parseUnscopedName()
2740 Node *S = getDerived().parseSubstitution(); in parseUnscopedName()
2743 if (S->getKind() == Node::KModuleName) in parseUnscopedName()
2767 Node *AbstractManglingParser<Derived, Alloc>::parseUnqualifiedName( in parseUnqualifiedName()
2768 NameState *State, Node *Scope, ModuleName *Module) { in parseUnqualifiedName()
2774 Node *Result; in parseUnqualifiedName()
2783 Node *Binding = getDerived().parseSourceName(State); in parseUnqualifiedName()
2818 Node *Sub = getDerived().parseSourceName(nullptr); in parseModuleNameOpt()
2836 Node *
2857 Node *T = parseTemplateParamDecl(); in parseUnnamedTypeName()
2891 Node *P = getDerived().parseType(); in parseUnnamedTypeName()
2915 Node *AbstractManglingParser<Derived, Alloc>::parseSourceName(NameState *) { in parseSourceName()
2934 {"aN", OperatorInfo::Binary, false, Node::Prec::Assign, "operator&="},
2935 {"aS", OperatorInfo::Binary, false, Node::Prec::Assign, "operator="},
2936 {"aa", OperatorInfo::Binary, false, Node::Prec::AndIf, "operator&&"},
2937 {"ad", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator&"},
2938 {"an", OperatorInfo::Binary, false, Node::Prec::And, "operator&"},
2939 {"at", OperatorInfo::OfIdOp, /*Type*/ true, Node::Prec::Unary, "alignof "},
2940 {"aw", OperatorInfo::NameOnly, false, Node::Prec::Primary,
2942 {"az", OperatorInfo::OfIdOp, /*Type*/ false, Node::Prec::Unary, "alignof "},
2943 {"cc", OperatorInfo::NamedCast, false, Node::Prec::Postfix, "const_cast"},
2944 {"cl", OperatorInfo::Call, false, Node::Prec::Postfix, "operator()"},
2945 {"cm", OperatorInfo::Binary, false, Node::Prec::Comma, "operator,"},
2946 {"co", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator~"},
2947 {"cv", OperatorInfo::CCast, false, Node::Prec::Cast, "operator"}, // C Cast
2948 {"dV", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/="},
2949 {"da", OperatorInfo::Del, /*Ary*/ true, Node::Prec::Unary,
2951 {"dc", OperatorInfo::NamedCast, false, Node::Prec::Postfix, "dynamic_cast"},
2952 {"de", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator*"},
2953 {"dl", OperatorInfo::Del, /*Ary*/ false, Node::Prec::Unary,
2955 {"ds", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
2957 {"dt", OperatorInfo::Member, /*Named*/ false, Node::Prec::Postfix,
2959 {"dv", OperatorInfo::Binary, false, Node::Prec::Assign, "operator/"},
2960 {"eO", OperatorInfo::Binary, false, Node::Prec::Assign, "operator^="},
2961 {"eo", OperatorInfo::Binary, false, Node::Prec::Xor, "operator^"},
2962 {"eq", OperatorInfo::Binary, false, Node::Prec::Equality, "operator=="},
2963 {"ge", OperatorInfo::Binary, false, Node::Prec::Relational, "operator>="},
2964 {"gt", OperatorInfo::Binary, false, Node::Prec::Relational, "operator>"},
2965 {"ix", OperatorInfo::Array, false, Node::Prec::Postfix, "operator[]"},
2966 {"lS", OperatorInfo::Binary, false, Node::Prec::Assign, "operator<<="},
2967 {"le", OperatorInfo::Binary, false, Node::Prec::Relational, "operator<="},
2968 {"ls", OperatorInfo::Binary, false, Node::Prec::Shift, "operator<<"},
2969 {"lt", OperatorInfo::Binary, false, Node::Prec::Relational, "operator<"},
2970 {"mI", OperatorInfo::Binary, false, Node::Prec::Assign, "operator-="},
2971 {"mL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator*="},
2972 {"mi", OperatorInfo::Binary, false, Node::Prec::Additive, "operator-"},
2973 {"ml", OperatorInfo::Binary, false, Node::Prec::Multiplicative,
2975 {"mm", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator--"},
2976 {"na", OperatorInfo::New, /*Ary*/ true, Node::Prec::Unary,
2978 {"ne", OperatorInfo::Binary, false, Node::Prec::Equality, "operator!="},
2979 {"ng", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator-"},
2980 {"nt", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator!"},
2981 {"nw", OperatorInfo::New, /*Ary*/ false, Node::Prec::Unary, "operator new"},
2982 {"oR", OperatorInfo::Binary, false, Node::Prec::Assign, "operator|="},
2983 {"oo", OperatorInfo::Binary, false, Node::Prec::OrIf, "operator||"},
2984 {"or", OperatorInfo::Binary, false, Node::Prec::Ior, "operator|"},
2985 {"pL", OperatorInfo::Binary, false, Node::Prec::Assign, "operator+="},
2986 {"pl", OperatorInfo::Binary, false, Node::Prec::Additive, "operator+"},
2987 {"pm", OperatorInfo::Member, /*Named*/ false, Node::Prec::PtrMem,
2989 {"pp", OperatorInfo::Postfix, false, Node::Prec::Postfix, "operator++"},
2990 {"ps", OperatorInfo::Prefix, false, Node::Prec::Unary, "operator+"},
2991 {"pt", OperatorInfo::Member, /*Named*/ true, Node::Prec::Postfix,
2993 {"qu", OperatorInfo::Conditional, false, Node::Prec::Conditional,
2995 {"rM", OperatorInfo::Binary, false, Node::Prec::Assign, "operator%="},
2996 {"rS", OperatorInfo::Binary, false, Node::Prec::Assign, "operator>>="},
2997 {"rc", OperatorInfo::NamedCast, false, Node::Prec::Postfix,
2999 {"rm", OperatorInfo::Binary, false, Node::Prec::Multiplicative,
3001 {"rs", OperatorInfo::Binary, false, Node::Prec::Shift, "operator>>"},
3002 {"sc", OperatorInfo::NamedCast, false, Node::Prec::Postfix, "static_cast"},
3003 {"ss", OperatorInfo::Binary, false, Node::Prec::Spaceship, "operator<=>"},
3004 {"st", OperatorInfo::OfIdOp, /*Type*/ true, Node::Prec::Unary, "sizeof "},
3005 {"sz", OperatorInfo::OfIdOp, /*Type*/ false, Node::Prec::Unary, "sizeof "},
3006 {"te", OperatorInfo::OfIdOp, /*Type*/ false, Node::Prec::Postfix,
3008 {"ti", OperatorInfo::OfIdOp, /*Type*/ true, Node::Prec::Postfix, "typeid "},
3036 Node *
3048 Node *Ty = getDerived().parseType(); in parseOperatorName()
3067 Node *SN = getDerived().parseSourceName(State); in parseOperatorName()
3077 Node *SN = getDerived().parseSourceName(State); in parseOperatorName()
3099 Node *
3100 AbstractManglingParser<Derived, Alloc>::parseCtorDtorName(Node *&SoFar, in parseCtorDtorName()
3102 if (SoFar->getKind() == Node::KSpecialSubstitution) { in parseCtorDtorName()
3156 Node *
3172 Node *SoFar = nullptr; in parseNestedName()
3187 Node *TA = getDerived().parseTemplateArgs(State != nullptr); in parseNestedName()
3190 if (SoFar->getKind() == Node::KNameWithTemplateArgs) in parseNestedName()
3208 Node *S = nullptr; in parseNestedName()
3217 if (S->getKind() == Node::KModuleName) { in parseNestedName()
3249 Node *AbstractManglingParser<Derived, Alloc>::parseSimpleId() { in parseSimpleId()
3250 Node *SN = getDerived().parseSourceName(/*NameState=*/nullptr); in parseSimpleId()
3254 Node *TA = getDerived().parseTemplateArgs(); in parseSimpleId()
3265 Node *AbstractManglingParser<Derived, Alloc>::parseDestructorName() { in parseDestructorName()
3266 Node *Result; in parseDestructorName()
3280 Node *AbstractManglingParser<Derived, Alloc>::parseUnresolvedType() { in parseUnresolvedType()
3282 Node *TP = getDerived().parseTemplateParam(); in parseUnresolvedType()
3289 Node *DT = getDerived().parseDecltype(); in parseUnresolvedType()
3306 Node *AbstractManglingParser<Derived, Alloc>::parseBaseUnresolvedName() { in parseBaseUnresolvedName()
3315 Node *Oper = getDerived().parseOperatorName(/*NameState=*/nullptr); in parseBaseUnresolvedName()
3319 Node *TA = getDerived().parseTemplateArgs(); in parseBaseUnresolvedName()
3340 Node *AbstractManglingParser<Derived, Alloc>::parseUnresolvedName(bool Global) { in parseUnresolvedName()
3341 Node *SoFar = nullptr; in parseUnresolvedName()
3351 Node *TA = getDerived().parseTemplateArgs(); in parseUnresolvedName()
3360 Node *Qual = getDerived().parseSimpleId(); in parseUnresolvedName()
3368 Node *Base = getDerived().parseBaseUnresolvedName(); in parseUnresolvedName()
3387 Node *Qual = getDerived().parseSimpleId(); in parseUnresolvedName()
3408 Node *TA = getDerived().parseTemplateArgs(); in parseUnresolvedName()
3419 Node *Base = getDerived().parseBaseUnresolvedName(); in parseUnresolvedName()
3428 Node *AbstractManglingParser<Derived, Alloc>::parseAbiTags(Node *N) { in parseAbiTags()
3486 Node *AbstractManglingParser<Derived, Alloc>::parseFunctionType() { in parseFunctionType()
3489 Node *ExceptionSpec = nullptr; in parseFunctionType()
3495 Node *E = getDerived().parseExpr(); in parseFunctionType()
3504 Node *T = getDerived().parseType(); in parseFunctionType()
3520 Node *ReturnType = getDerived().parseType(); in parseFunctionType()
3539 Node *T = getDerived().parseType(); in parseFunctionType()
3556 Node *AbstractManglingParser<Derived, Alloc>::parseVectorType() { in parseVectorType()
3560 Node *DimensionNumber = make<NameType>(parseNumber()); in parseVectorType()
3567 Node *ElemType = getDerived().parseType(); in parseVectorType()
3574 Node *DimExpr = getDerived().parseExpr(); in parseVectorType()
3579 Node *ElemType = getDerived().parseType(); in parseVectorType()
3584 Node *ElemType = getDerived().parseType(); in parseVectorType()
3593 Node *AbstractManglingParser<Derived, Alloc>::parseDecltype() { in parseDecltype()
3598 Node *E = getDerived().parseExpr(); in parseDecltype()
3609 Node *AbstractManglingParser<Derived, Alloc>::parseArrayType() { in parseArrayType()
3613 Node *Dimension = nullptr; in parseArrayType()
3622 Node *DimExpr = getDerived().parseExpr(); in parseArrayType()
3630 Node *Ty = getDerived().parseType(); in parseArrayType()
3638 Node *AbstractManglingParser<Derived, Alloc>::parsePointerToMemberType() { in parsePointerToMemberType()
3641 Node *ClassType = getDerived().parseType(); in parsePointerToMemberType()
3644 Node *MemberType = getDerived().parseType(); in parsePointerToMemberType()
3655 Node *AbstractManglingParser<Derived, Alloc>::parseClassEnumType() { in parseClassEnumType()
3664 Node *Name = getDerived().parseName(); in parseClassEnumType()
3678 Node *AbstractManglingParser<Derived, Alloc>::parseQualifiedType() { in parseQualifiedType()
3695 Node *Child = getDerived().parseQualifiedType(); in parseQualifiedType()
3701 Node *TA = nullptr; in parseQualifiedType()
3708 Node *Child = getDerived().parseQualifiedType(); in parseQualifiedType()
3715 Node *Ty = getDerived().parseType(); in parseQualifiedType()
3744 Node *AbstractManglingParser<Derived, Alloc>::parseType() { in parseType()
3745 Node *Result = nullptr; in parseType()
3888 Node *DimensionNumber = make<NameType>(parseNumber()); in parseType()
3903 Node *Size = std::isdigit(look()) ? make<NameType>(parseNumber()) in parseType()
3950 Node *Child = getDerived().parseType(); in parseType()
4004 Node *TA = getDerived().parseTemplateArgs(); in parseType()
4014 Node *Ptr = getDerived().parseType(); in parseType()
4023 Node *Ref = getDerived().parseType(); in parseType()
4032 Node *Ref = getDerived().parseType(); in parseType()
4041 Node *P = getDerived().parseType(); in parseType()
4050 Node *P = getDerived().parseType(); in parseType()
4077 Node *TA = getDerived().parseTemplateArgs(); in parseType()
4106 Node *AbstractManglingParser<Derived, Alloc>::parsePrefixExpr(StringView Kind, in parsePrefixExpr()
4107 Node::Prec Prec) { in parsePrefixExpr()
4108 Node *E = getDerived().parseExpr(); in parsePrefixExpr()
4115 Node *AbstractManglingParser<Derived, Alloc>::parseBinaryExpr(StringView Kind, in parseBinaryExpr()
4116 Node::Prec Prec) { in parseBinaryExpr()
4117 Node *LHS = getDerived().parseExpr(); in parseBinaryExpr()
4120 Node *RHS = getDerived().parseExpr(); in parseBinaryExpr()
4127 Node *
4154 Node *AbstractManglingParser<Derived, Alloc>::parseFunctionParam() { in parseFunctionParam()
4181 Node *AbstractManglingParser<Derived, Alloc>::parseConversionExpr() { in parseConversionExpr()
4184 Node *Ty; in parseConversionExpr()
4196 Node *E = getDerived().parseExpr(); in parseConversionExpr()
4205 Node *E[1] = {getDerived().parseExpr()}; in parseConversionExpr()
4219 Node *AbstractManglingParser<Derived, Alloc>::parseExprPrimary() { in parseExprPrimary()
4288 Node *R = getDerived().parseEncoding(); in parseExprPrimary()
4294 Node *T = getDerived().parseType(); in parseExprPrimary()
4314 Node *T = parseUnnamedTypeName(nullptr); in parseExprPrimary()
4321 Node *T = getDerived().parseType(); in parseExprPrimary()
4339 Node *AbstractManglingParser<Derived, Alloc>::parseBracedExpr() { in parseBracedExpr()
4344 Node *Field = getDerived().parseSourceName(/*NameState=*/nullptr); in parseBracedExpr()
4347 Node *Init = getDerived().parseBracedExpr(); in parseBracedExpr()
4354 Node *Index = getDerived().parseExpr(); in parseBracedExpr()
4357 Node *Init = getDerived().parseBracedExpr(); in parseBracedExpr()
4364 Node *RangeBegin = getDerived().parseExpr(); in parseBracedExpr()
4367 Node *RangeEnd = getDerived().parseExpr(); in parseBracedExpr()
4370 Node *Init = getDerived().parseBracedExpr(); in parseBracedExpr()
4386 Node *AbstractManglingParser<Derived, Alloc>::parseFoldExpr() { in parseFoldExpr()
4417 Node *Pack = getDerived().parseExpr(); in parseFoldExpr()
4421 Node *Init = nullptr; in parseFoldExpr()
4438 Node *
4440 Node::Prec Prec) { in parsePointerToMemberConversionExpr()
4441 Node *Ty = getDerived().parseType(); in parsePointerToMemberConversionExpr()
4444 Node *Expr = getDerived().parseExpr(); in parsePointerToMemberConversionExpr()
4458 Node *AbstractManglingParser<Derived, Alloc>::parseSubobjectExpr() { in parseSubobjectExpr()
4459 Node *Ty = getDerived().parseType(); in parseSubobjectExpr()
4462 Node *Expr = getDerived().parseExpr(); in parseSubobjectExpr()
4468 Node *Selector = make<NameType>(parseNumber()); in parseSubobjectExpr()
4525 Node *AbstractManglingParser<Derived, Alloc>::parseExpr() { in parseExpr()
4542 Node *Ex = getDerived().parseExpr(); in parseExpr()
4549 Node *Base = getDerived().parseExpr(); in parseExpr()
4552 Node *Index = getDerived().parseExpr(); in parseExpr()
4559 Node *LHS = getDerived().parseExpr(); in parseExpr()
4562 Node *RHS = getDerived().parseExpr(); in parseExpr()
4575 Node *Ex = getDerived().parseExpr(); in parseExpr()
4581 Node *Ty = getDerived().parseType(); in parseExpr()
4589 Node *Init = getDerived().parseExpr(); in parseExpr()
4600 Node *Ex = getDerived().parseExpr(); in parseExpr()
4608 Node *Callee = getDerived().parseExpr(); in parseExpr()
4613 Node *E = getDerived().parseExpr(); in parseExpr()
4623 Node *Ty; in parseExpr()
4634 Node *E = getDerived().parseExpr(); in parseExpr()
4648 Node *Cond = getDerived().parseExpr(); in parseExpr()
4651 Node *LHS = getDerived().parseExpr(); in parseExpr()
4654 Node *RHS = getDerived().parseExpr(); in parseExpr()
4661 Node *Ty = getDerived().parseType(); in parseExpr()
4664 Node *Ex = getDerived().parseExpr(); in parseExpr()
4671 Node *Arg = in parseExpr()
4701 Node *E = getDerived().parseBracedExpr(); in parseExpr()
4709 return parsePointerToMemberConversionExpr(Node::Prec::Unary); in parseExpr()
4711 Node *Ex = getDerived().parseExpr(); in parseExpr()
4714 return make<EnclosingExpr>("noexcept ", Ex, Node::Prec::Unary); in parseExpr()
4719 Node *Child = getDerived().parseExpr(); in parseExpr()
4726 Node *R = getDerived().parseTemplateParam(); in parseExpr()
4731 Node *FP = getDerived().parseFunctionParam(); in parseExpr()
4739 Node *Arg = getDerived().parseTemplateArg(); in parseExpr()
4750 Node *Ty = getDerived().parseType(); in parseExpr()
4755 Node *E = getDerived().parseBracedExpr(); in parseExpr()
4765 Node *Ex = getDerived().parseExpr(); in parseExpr()
4771 Node *Name = getDerived().parseSourceName(/*NameState=*/nullptr); in parseExpr()
4780 Node *UUID = nullptr; in parseExpr()
4797 Node *E = getDerived().parseTemplateArg(); in parseExpr()
4804 Node::Prec::Postfix); in parseExpr()
4853 Node *AbstractManglingParser<Derived, Alloc>::parseSpecialName() { in parseSpecialName()
4862 Node *Arg = getDerived().parseTemplateArg(); in parseSpecialName()
4870 Node *Ty = getDerived().parseType(); in parseSpecialName()
4878 Node *Ty = getDerived().parseType(); in parseSpecialName()
4886 Node *Ty = getDerived().parseType(); in parseSpecialName()
4894 Node *Ty = getDerived().parseType(); in parseSpecialName()
4904 Node *Encoding = getDerived().parseEncoding(); in parseSpecialName()
4913 Node *FirstType = getDerived().parseType(); in parseSpecialName()
4918 Node *SecondType = getDerived().parseType(); in parseSpecialName()
4926 Node *Name = getDerived().parseName(); in parseSpecialName()
4934 Node *Name = getDerived().parseName(); in parseSpecialName()
4945 Node *BaseEncoding = getDerived().parseEncoding(); in parseSpecialName()
4959 Node *Name = getDerived().parseName(); in parseSpecialName()
4969 Node *Name = getDerived().parseName(); in parseSpecialName()
4997 Node *AbstractManglingParser<Derived, Alloc>::parseEncoding() { in parseEncoding()
5029 Node *Name = getDerived().parseName(&NameInfo); in parseEncoding()
5039 Node *Attrs = nullptr; in parseEncoding()
5043 Node *Arg = getDerived().parseTemplateArg(); in parseEncoding()
5053 Node *ReturnType = nullptr; in parseEncoding()
5067 Node *Ty = getDerived().parseType(); in parseEncoding()
5120 Node *AbstractManglingParser<Alloc, Derived>::parseFloatingLiteral() {
5169 Node *AbstractManglingParser<Derived, Alloc>::parseSubstitution() {
5205 Node *WithTags = getDerived().parseAbiTags(SpecialSub);
5235 Node *AbstractManglingParser<Derived, Alloc>::parseTemplateParam() {
5262 Node *ForwardRef = make<ForwardTemplateReference>(Index);
5265 assert(ForwardRef->getKind() == Node::KForwardTemplateReference);
5294 Node *AbstractManglingParser<Derived, Alloc>::parseTemplateParamDecl() {
5297 Node *N = make<SyntheticTemplateParamName>(Kind, Index);
5303 Node *Name = InventTemplateParamName(TemplateParamKind::Type);
5310 Node *Name = InventTemplateParamName(TemplateParamKind::NonType);
5313 Node *Type = parseType();
5320 Node *Name = InventTemplateParamName(TemplateParamKind::Template);
5326 Node *P = parseTemplateParamDecl();
5336 Node *P = parseTemplateParamDecl();
5351 Node *AbstractManglingParser<Derived, Alloc>::parseTemplateArg() {
5355 Node *Arg = getDerived().parseExpr();
5364 Node *Arg = getDerived().parseTemplateArg();
5376 Node *Arg = getDerived().parseEncoding();
5392 Node *
5409 Node *Arg = getDerived().parseTemplateArg();
5414 Node *TableEntry = Arg;
5415 if (Arg->getKind() == Node::KTemplateArgumentPack) {
5423 Node *Arg = getDerived().parseTemplateArg();
5438 Node *AbstractManglingParser<Derived, Alloc>::parse() {
5440 Node *Encoding = getDerived().parseEncoding();
5453 Node *Encoding = getDerived().parseEncoding();
5466 Node *Ty = getDerived().parseType();