From e3d5b73c04ce44085e9986ddd101f590cd13289a Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 8 Jul 2025 21:40:40 +0200 Subject: [PATCH 1/3] Add subscript designators --- packages/cxx-frontend/src/AST.ts | 127 +- packages/cxx-frontend/src/ASTKind.ts | 4 + packages/cxx-frontend/src/ASTSlot.ts | 337 ++-- packages/cxx-frontend/src/ASTVisitor.ts | 24 + .../cxx-frontend/src/RecursiveASTVisitor.ts | 24 + src/parser/cxx/ast.cc | 36 +- src/parser/cxx/ast.fbs | 21 +- src/parser/cxx/ast.h | 67 +- src/parser/cxx/ast_fwd.h | 5 + src/parser/cxx/ast_kind.h | 4 + src/parser/cxx/ast_pretty_printer.cc | 58 +- src/parser/cxx/ast_pretty_printer.h | 2 + src/parser/cxx/ast_printer.cc | 20 +- src/parser/cxx/ast_printer.h | 3 + src/parser/cxx/ast_slot.cc | 1489 +++++++++-------- src/parser/cxx/ast_slot.h | 3 + src/parser/cxx/ast_visitor.cc | 7 + src/parser/cxx/ast_visitor.h | 4 + src/parser/cxx/flatbuffers/ast_decoder.cc | 53 +- src/parser/cxx/flatbuffers/ast_encoder.cc | 74 +- src/parser/cxx/parser.cc | 38 +- src/parser/cxx/private/ast_decoder.h | 5 + src/parser/cxx/private/ast_encoder.h | 6 + 23 files changed, 1455 insertions(+), 956 deletions(-) diff --git a/packages/cxx-frontend/src/AST.ts b/packages/cxx-frontend/src/AST.ts index 6df0e600..0dcdd95f 100644 --- a/packages/cxx-frontend/src/AST.ts +++ b/packages/cxx-frontend/src/AST.ts @@ -152,6 +152,7 @@ export abstract class AttributeTokenAST extends AST {} export abstract class CoreDeclaratorAST extends AST {} export abstract class DeclarationAST extends AST {} export abstract class DeclaratorChunkAST extends AST {} +export abstract class DesignatorAST extends AST {} export abstract class ExceptionDeclarationAST extends AST {} export abstract class ExceptionSpecifierAST extends AST {} export abstract class ExpressionAST extends AST {} @@ -6411,25 +6412,29 @@ export class DesignatedInitializerClauseAST extends ExpressionAST { } /** - * Returns the location of the dot token in this node - */ - getDotToken(): Token | undefined { - return Token.from(cxx.getASTSlot(this.getHandle(), 0), this.parser); - } - - /** - * Returns the location of the identifier token in this node - */ - getIdentifierToken(): Token | undefined { - return Token.from(cxx.getASTSlot(this.getHandle(), 1), this.parser); - } - - /** - * Returns the identifier attribute of this node + * Returns the designatorList of this node */ - getIdentifier(): string | undefined { - const slot = cxx.getASTSlot(this.getHandle(), 2); - return cxx.getIdentifierValue(slot); + getDesignatorList(): Iterable { + let it = cxx.getASTSlot(this.getHandle(), 0); + let value: DesignatorAST | undefined; + let done = false; + const p = this.parser; + function advance() { + done = it === 0; + if (done) return; + const ast = cxx.getListValue(it); + value = AST.from(ast, p); + it = cxx.getListNext(it); + } + function next() { + advance(); + return { done, value }; + } + return { + [Symbol.iterator]() { + return { next }; + }, + }; } /** @@ -6437,7 +6442,7 @@ export class DesignatedInitializerClauseAST extends ExpressionAST { */ getInitializer(): ExpressionAST | undefined { return AST.from( - cxx.getASTSlot(this.getHandle(), 3), + cxx.getASTSlot(this.getHandle(), 1), this.parser, ); } @@ -6756,6 +6761,88 @@ export class ParenInitializerAST extends ExpressionAST { } } +/** + * DotDesignatorAST node. + */ +export class DotDesignatorAST extends DesignatorAST { + /** + * Traverse this node using the given visitor. + * @param visitor the visitor. + * @param context the context. + * @returns the result of the visit. + */ + accept( + visitor: ASTVisitor, + context: Context, + ): Result { + return visitor.visitDotDesignator(this, context); + } + + /** + * Returns the location of the dot token in this node + */ + getDotToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 0), this.parser); + } + + /** + * Returns the location of the identifier token in this node + */ + getIdentifierToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 1), this.parser); + } + + /** + * Returns the identifier attribute of this node + */ + getIdentifier(): string | undefined { + const slot = cxx.getASTSlot(this.getHandle(), 2); + return cxx.getIdentifierValue(slot); + } +} + +/** + * SubscriptDesignatorAST node. + */ +export class SubscriptDesignatorAST extends DesignatorAST { + /** + * Traverse this node using the given visitor. + * @param visitor the visitor. + * @param context the context. + * @returns the result of the visit. + */ + accept( + visitor: ASTVisitor, + context: Context, + ): Result { + return visitor.visitSubscriptDesignator(this, context); + } + + /** + * Returns the location of the lbracket token in this node + */ + getLbracketToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 0), this.parser); + } + + /** + * Returns the expression of this node + */ + getExpression(): ExpressionAST | undefined { + return AST.from( + cxx.getASTSlot(this.getHandle(), 1), + this.parser, + ); + } + + /** + * Returns the location of the rbracket token in this node + */ + getRbracketToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 2), this.parser); + } +} + /** * SplicerAST node. */ @@ -12890,6 +12977,8 @@ const AST_CONSTRUCTORS: Array< EqualInitializerAST, BracedInitListAST, ParenInitializerAST, + DotDesignatorAST, + SubscriptDesignatorAST, SplicerAST, GlobalModuleFragmentAST, PrivateModuleFragmentAST, diff --git a/packages/cxx-frontend/src/ASTKind.ts b/packages/cxx-frontend/src/ASTKind.ts index c2da920e..dbcfbad4 100644 --- a/packages/cxx-frontend/src/ASTKind.ts +++ b/packages/cxx-frontend/src/ASTKind.ts @@ -136,6 +136,10 @@ export enum ASTKind { BracedInitList, ParenInitializer, + // DesignatorAST + DotDesignator, + SubscriptDesignator, + // AST Splicer, GlobalModuleFragment, diff --git a/packages/cxx-frontend/src/ASTSlot.ts b/packages/cxx-frontend/src/ASTSlot.ts index 70f81698..02025136 100644 --- a/packages/cxx-frontend/src/ASTSlot.ts +++ b/packages/cxx-frontend/src/ASTSlot.ts @@ -80,172 +80,173 @@ export enum ASTSlot { decltypeSpecifier = 58, defaultLoc = 59, deleteLoc = 60, - doLoc = 61, - dotLoc = 62, - ellipsisLoc = 63, - elseLoc = 64, - elseStatement = 65, - emicolonLoc = 66, - enumLoc = 67, - enumTypeSpecifier = 68, - enumeratorList = 69, - equalLoc = 70, - exceptionDeclaration = 71, - exceptionSpecifier = 72, - exclaimLoc = 73, - explicitLoc = 74, - explicitSpecifier = 75, - exportLoc = 76, - expression = 77, - expressionList = 78, - externLoc = 79, - extraAttributeList = 80, - finalLoc = 81, - foldOp = 82, - foldOpLoc = 83, - forLoc = 84, - friendLoc = 85, - functionBody = 86, - globalModuleFragment = 87, - gnuAtributeList = 88, - gnuAttributeList = 89, - gotoLabelList = 90, - gotoLoc = 91, - greaterLoc = 92, - handlerList = 93, - headerLoc = 94, - id = 95, - idExpression = 96, - identifier = 97, - identifierLoc = 98, - ifLoc = 99, - iffalseExpression = 100, - iftrueExpression = 101, - importLoc = 102, - importName = 103, - indexExpression = 104, - initDeclaratorList = 105, - initializer = 106, - inlineLoc = 107, - inputOperandList = 108, - isFinal = 109, - isInline = 110, - isNot = 111, - isOverride = 112, - isPack = 113, - isPure = 114, - isTemplateIntroduced = 115, - isThisIntroduced = 116, - isTrue = 117, - isVariadic = 118, - isVirtual = 119, - lambdaSpecifierList = 120, - lbraceLoc = 121, - lbracket2Loc = 122, - lbracketLoc = 123, - leftExpression = 124, - lessLoc = 125, - literal = 126, - literalLoc = 127, - literalOperatorId = 128, - lparen2Loc = 129, - lparenLoc = 130, - memInitializerList = 131, - minusGreaterLoc = 132, - moduleDeclaration = 133, - moduleLoc = 134, - moduleName = 135, - modulePartition = 136, - moduleQualifier = 137, - mutableLoc = 138, - namespaceLoc = 139, - nestedNameSpecifier = 140, - nestedNamespaceSpecifierList = 141, - newInitalizer = 142, - newLoc = 143, - newPlacement = 144, - noexceptLoc = 145, - offsetofLoc = 146, - op = 147, - opLoc = 148, - openLoc = 149, - operatorFunctionId = 150, - operatorLoc = 151, - otherVirtualOrAccessLoc = 152, - outputOperandList = 153, - parameterDeclarationClause = 154, - parameterDeclarationList = 155, - privateLoc = 156, - privateModuleFragment = 157, - ptrOpList = 158, - qualifier = 159, - qualifierLoc = 160, - questionLoc = 161, - rangeDeclaration = 162, - rangeInitializer = 163, - rbraceLoc = 164, - rbracket2Loc = 165, - rbracketLoc = 166, - refLoc = 167, - refOp = 168, - refQualifierLoc = 169, - requirementList = 170, - requiresClause = 171, - requiresLoc = 172, - restrictLoc = 173, - returnLoc = 174, - rightExpression = 175, - rparen2Loc = 176, - rparenLoc = 177, - scopeLoc = 178, - secondColonLoc = 179, - semicolonLoc = 180, - sizeExpression = 181, - sizeofLoc = 182, - specifier = 183, - specifierLoc = 184, - splicer = 185, - starLoc = 186, - statement = 187, - statementList = 188, - staticAssertLoc = 189, - staticLoc = 190, - stringLiteral = 191, - stringliteralLoc = 192, - switchLoc = 193, - symbolicName = 194, - symbolicNameLoc = 195, - templateArgumentList = 196, - templateId = 197, - templateLoc = 198, - templateParameterList = 199, - templateRequiresClause = 200, - thisLoc = 201, - threadLoc = 202, - threadLocalLoc = 203, - throwLoc = 204, - tildeLoc = 205, - trailingReturnType = 206, - tryLoc = 207, - typeConstraint = 208, - typeId = 209, - typeIdList = 210, - typeLoc = 211, - typeSpecifier = 212, - typeSpecifierList = 213, - typeTraitLoc = 214, - typedefLoc = 215, - typeidLoc = 216, - typenameLoc = 217, - underlyingTypeLoc = 218, - unqualifiedId = 219, - usingDeclaratorList = 220, - usingLoc = 221, - vaArgLoc = 222, - virtualLoc = 223, - virtualOrAccessLoc = 224, - voidLoc = 225, - volatileLoc = 226, - whileLoc = 227, - yieldLoc = 228, + designatorList = 61, + doLoc = 62, + dotLoc = 63, + ellipsisLoc = 64, + elseLoc = 65, + elseStatement = 66, + emicolonLoc = 67, + enumLoc = 68, + enumTypeSpecifier = 69, + enumeratorList = 70, + equalLoc = 71, + exceptionDeclaration = 72, + exceptionSpecifier = 73, + exclaimLoc = 74, + explicitLoc = 75, + explicitSpecifier = 76, + exportLoc = 77, + expression = 78, + expressionList = 79, + externLoc = 80, + extraAttributeList = 81, + finalLoc = 82, + foldOp = 83, + foldOpLoc = 84, + forLoc = 85, + friendLoc = 86, + functionBody = 87, + globalModuleFragment = 88, + gnuAtributeList = 89, + gnuAttributeList = 90, + gotoLabelList = 91, + gotoLoc = 92, + greaterLoc = 93, + handlerList = 94, + headerLoc = 95, + id = 96, + idExpression = 97, + identifier = 98, + identifierLoc = 99, + ifLoc = 100, + iffalseExpression = 101, + iftrueExpression = 102, + importLoc = 103, + importName = 104, + indexExpression = 105, + initDeclaratorList = 106, + initializer = 107, + inlineLoc = 108, + inputOperandList = 109, + isFinal = 110, + isInline = 111, + isNot = 112, + isOverride = 113, + isPack = 114, + isPure = 115, + isTemplateIntroduced = 116, + isThisIntroduced = 117, + isTrue = 118, + isVariadic = 119, + isVirtual = 120, + lambdaSpecifierList = 121, + lbraceLoc = 122, + lbracket2Loc = 123, + lbracketLoc = 124, + leftExpression = 125, + lessLoc = 126, + literal = 127, + literalLoc = 128, + literalOperatorId = 129, + lparen2Loc = 130, + lparenLoc = 131, + memInitializerList = 132, + minusGreaterLoc = 133, + moduleDeclaration = 134, + moduleLoc = 135, + moduleName = 136, + modulePartition = 137, + moduleQualifier = 138, + mutableLoc = 139, + namespaceLoc = 140, + nestedNameSpecifier = 141, + nestedNamespaceSpecifierList = 142, + newInitalizer = 143, + newLoc = 144, + newPlacement = 145, + noexceptLoc = 146, + offsetofLoc = 147, + op = 148, + opLoc = 149, + openLoc = 150, + operatorFunctionId = 151, + operatorLoc = 152, + otherVirtualOrAccessLoc = 153, + outputOperandList = 154, + parameterDeclarationClause = 155, + parameterDeclarationList = 156, + privateLoc = 157, + privateModuleFragment = 158, + ptrOpList = 159, + qualifier = 160, + qualifierLoc = 161, + questionLoc = 162, + rangeDeclaration = 163, + rangeInitializer = 164, + rbraceLoc = 165, + rbracket2Loc = 166, + rbracketLoc = 167, + refLoc = 168, + refOp = 169, + refQualifierLoc = 170, + requirementList = 171, + requiresClause = 172, + requiresLoc = 173, + restrictLoc = 174, + returnLoc = 175, + rightExpression = 176, + rparen2Loc = 177, + rparenLoc = 178, + scopeLoc = 179, + secondColonLoc = 180, + semicolonLoc = 181, + sizeExpression = 182, + sizeofLoc = 183, + specifier = 184, + specifierLoc = 185, + splicer = 186, + starLoc = 187, + statement = 188, + statementList = 189, + staticAssertLoc = 190, + staticLoc = 191, + stringLiteral = 192, + stringliteralLoc = 193, + switchLoc = 194, + symbolicName = 195, + symbolicNameLoc = 196, + templateArgumentList = 197, + templateId = 198, + templateLoc = 199, + templateParameterList = 200, + templateRequiresClause = 201, + thisLoc = 202, + threadLoc = 203, + threadLocalLoc = 204, + throwLoc = 205, + tildeLoc = 206, + trailingReturnType = 207, + tryLoc = 208, + typeConstraint = 209, + typeId = 210, + typeIdList = 211, + typeLoc = 212, + typeSpecifier = 213, + typeSpecifierList = 214, + typeTraitLoc = 215, + typedefLoc = 216, + typeidLoc = 217, + typenameLoc = 218, + underlyingTypeLoc = 219, + unqualifiedId = 220, + usingDeclaratorList = 221, + usingLoc = 222, + vaArgLoc = 223, + virtualLoc = 224, + virtualOrAccessLoc = 225, + voidLoc = 226, + volatileLoc = 227, + whileLoc = 228, + yieldLoc = 229, } diff --git a/packages/cxx-frontend/src/ASTVisitor.ts b/packages/cxx-frontend/src/ASTVisitor.ts index 05e6607e..50e121f0 100644 --- a/packages/cxx-frontend/src/ASTVisitor.ts +++ b/packages/cxx-frontend/src/ASTVisitor.ts @@ -1321,6 +1321,30 @@ export abstract class ASTVisitor { context: Context, ): Result; + /** + * Visit DotDesignator node. + * + * @param node The node to visit. + * @param context The context. + * @returns The result of the visit. + */ + abstract visitDotDesignator( + node: ast.DotDesignatorAST, + context: Context, + ): Result; + + /** + * Visit SubscriptDesignator node. + * + * @param node The node to visit. + * @param context The context. + * @returns The result of the visit. + */ + abstract visitSubscriptDesignator( + node: ast.SubscriptDesignatorAST, + context: Context, + ): Result; + /** * Visit Splicer node. * diff --git a/packages/cxx-frontend/src/RecursiveASTVisitor.ts b/packages/cxx-frontend/src/RecursiveASTVisitor.ts index fabb5a30..9da19808 100644 --- a/packages/cxx-frontend/src/RecursiveASTVisitor.ts +++ b/packages/cxx-frontend/src/RecursiveASTVisitor.ts @@ -1399,6 +1399,9 @@ export class RecursiveASTVisitor extends ASTVisitor { node: ast.DesignatedInitializerClauseAST, context: Context, ): void { + for (const element of node.getDesignatorList()) { + this.accept(element, context); + } this.accept(node.getInitializer(), context); } @@ -1471,6 +1474,27 @@ export class RecursiveASTVisitor extends ASTVisitor { } } + /** + * Visit a DotDesignator node. + * + * @param node The node to visit. + * @param context The context. + */ + visitDotDesignator(node: ast.DotDesignatorAST, context: Context): void {} + + /** + * Visit a SubscriptDesignator node. + * + * @param node The node to visit. + * @param context The context. + */ + visitSubscriptDesignator( + node: ast.SubscriptDesignatorAST, + context: Context, + ): void { + this.accept(node.getExpression(), context); + } + /** * Visit a Splicer node. * diff --git a/src/parser/cxx/ast.cc b/src/parser/cxx/ast.cc index c631a7b6..2f963d3d 100644 --- a/src/parser/cxx/ast.cc +++ b/src/parser/cxx/ast.cc @@ -1671,16 +1671,14 @@ auto PackExpansionExpressionAST::lastSourceLocation() -> SourceLocation { } auto DesignatedInitializerClauseAST::firstSourceLocation() -> SourceLocation { - if (auto loc = cxx::firstSourceLocation(dotLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(designatorList)) return loc; if (auto loc = cxx::firstSourceLocation(initializer)) return loc; return {}; } auto DesignatedInitializerClauseAST::lastSourceLocation() -> SourceLocation { if (auto loc = cxx::lastSourceLocation(initializer)) return loc; - if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(dotLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(designatorList)) return loc; return {}; } @@ -1758,6 +1756,32 @@ auto ParenInitializerAST::lastSourceLocation() -> SourceLocation { return {}; } +auto DotDesignatorAST::firstSourceLocation() -> SourceLocation { + if (auto loc = cxx::firstSourceLocation(dotLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; + return {}; +} + +auto DotDesignatorAST::lastSourceLocation() -> SourceLocation { + if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(dotLoc)) return loc; + return {}; +} + +auto SubscriptDesignatorAST::firstSourceLocation() -> SourceLocation { + if (auto loc = cxx::firstSourceLocation(lbracketLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(expression)) return loc; + if (auto loc = cxx::firstSourceLocation(rbracketLoc)) return loc; + return {}; +} + +auto SubscriptDesignatorAST::lastSourceLocation() -> SourceLocation { + if (auto loc = cxx::lastSourceLocation(rbracketLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(expression)) return loc; + if (auto loc = cxx::lastSourceLocation(lbracketLoc)) return loc; + return {}; +} + auto SplicerAST::firstSourceLocation() -> SourceLocation { if (auto loc = cxx::firstSourceLocation(lbracketLoc)) return loc; if (auto loc = cxx::firstSourceLocation(colonLoc)) return loc; @@ -3538,6 +3562,10 @@ std::string_view kASTKindNames[] = { "braced-init-list", "paren-initializer", + // DesignatorAST + "dot-designator", + "subscript-designator", + // AST "splicer", "global-module-fragment", diff --git a/src/parser/cxx/ast.fbs b/src/parser/cxx/ast.fbs index ab21724e..188e87b1 100644 --- a/src/parser/cxx/ast.fbs +++ b/src/parser/cxx/ast.fbs @@ -110,6 +110,11 @@ union DeclaratorChunk { ArrayDeclaratorChunk, } +union Designator { + DotDesignator, + SubscriptDesignator, +} + union ExceptionDeclaration { EllipsisExceptionDeclaration, TypeExceptionDeclaration, @@ -815,6 +820,18 @@ table ArrayDeclaratorChunk /* DeclaratorChunkAST */ { rbracket_loc: uint32; } +table DotDesignator /* DesignatorAST */ { + identifier: string; + dot_loc: uint32; + identifier_loc: uint32; +} + +table SubscriptDesignator /* DesignatorAST */ { + expression: Expression; + lbracket_loc: uint32; + rbracket_loc: uint32; +} + table EllipsisExceptionDeclaration /* ExceptionDeclarationAST */ { ellipsis_loc: uint32; } @@ -1204,10 +1221,8 @@ table PackExpansionExpression /* ExpressionAST */ { } table DesignatedInitializerClause /* ExpressionAST */ { - identifier: string; + designator_list: [Designator]; initializer: Expression; - dot_loc: uint32; - identifier_loc: uint32; } table TypeTraitExpression /* ExpressionAST */ { diff --git a/src/parser/cxx/ast.h b/src/parser/cxx/ast.h index 122452df..4cc55b47 100644 --- a/src/parser/cxx/ast.h +++ b/src/parser/cxx/ast.h @@ -182,6 +182,11 @@ class DeclaratorChunkAST : public AST { using AST::AST; }; +class DesignatorAST : public AST { + public: + using AST::AST; +}; + class ExceptionDeclarationAST : public AST { public: using AST::AST; @@ -2082,9 +2087,7 @@ class DesignatedInitializerClauseAST final : public ExpressionAST { DesignatedInitializerClauseAST() : ExpressionAST(Kind) {} - SourceLocation dotLoc; - SourceLocation identifierLoc; - const Identifier* identifier = nullptr; + List* designatorList = nullptr; ExpressionAST* initializer = nullptr; void accept(ASTVisitor* visitor) override { visitor->visit(this); } @@ -2177,6 +2180,38 @@ class ParenInitializerAST final : public ExpressionAST { auto lastSourceLocation() -> SourceLocation override; }; +class DotDesignatorAST final : public DesignatorAST { + public: + static constexpr ASTKind Kind = ASTKind::DotDesignator; + + DotDesignatorAST() : DesignatorAST(Kind) {} + + SourceLocation dotLoc; + SourceLocation identifierLoc; + const Identifier* identifier = nullptr; + + void accept(ASTVisitor* visitor) override { visitor->visit(this); } + + auto firstSourceLocation() -> SourceLocation override; + auto lastSourceLocation() -> SourceLocation override; +}; + +class SubscriptDesignatorAST final : public DesignatorAST { + public: + static constexpr ASTKind Kind = ASTKind::SubscriptDesignator; + + SubscriptDesignatorAST() : DesignatorAST(Kind) {} + + SourceLocation lbracketLoc; + ExpressionAST* expression = nullptr; + SourceLocation rbracketLoc; + + void accept(ASTVisitor* visitor) override { visitor->visit(this); } + + auto firstSourceLocation() -> SourceLocation override; + auto lastSourceLocation() -> SourceLocation override; +}; + class SplicerAST final : public AST { public: static constexpr ASTKind Kind = ASTKind::Splicer; @@ -4648,6 +4683,32 @@ template <> } // switch } +template +auto visit(Visitor&& visitor, DesignatorAST* ast) { + switch (ast->kind()) { + case DotDesignatorAST::Kind: + return std::invoke(std::forward(visitor), + static_cast(ast)); + case SubscriptDesignatorAST::Kind: + return std::invoke(std::forward(visitor), + static_cast(ast)); + default: + cxx_runtime_error("unexpected Designator"); + } // switch +} + +template <> +[[nodiscard]] inline auto ast_cast(AST* ast) -> DesignatorAST* { + if (!ast) return nullptr; + switch (ast->kind()) { + case DotDesignatorAST::Kind: + case SubscriptDesignatorAST::Kind: + return static_cast(ast); + default: + return nullptr; + } // switch +} + template auto visit(Visitor&& visitor, TemplateParameterAST* ast) { switch (ast->kind()) { diff --git a/src/parser/cxx/ast_fwd.h b/src/parser/cxx/ast_fwd.h index fc0d7875..4fa32705 100644 --- a/src/parser/cxx/ast_fwd.h +++ b/src/parser/cxx/ast_fwd.h @@ -60,6 +60,7 @@ class AttributeTokenAST; class CoreDeclaratorAST; class DeclarationAST; class DeclaratorChunkAST; +class DesignatorAST; class ExceptionDeclarationAST; class ExceptionSpecifierAST; class ExpressionAST; @@ -194,6 +195,10 @@ class EqualInitializerAST; class BracedInitListAST; class ParenInitializerAST; +// DesignatorAST +class DotDesignatorAST; +class SubscriptDesignatorAST; + // AST class SplicerAST; class GlobalModuleFragmentAST; diff --git a/src/parser/cxx/ast_kind.h b/src/parser/cxx/ast_kind.h index cbaf586b..05409bd3 100644 --- a/src/parser/cxx/ast_kind.h +++ b/src/parser/cxx/ast_kind.h @@ -141,6 +141,10 @@ enum class ASTKind { BracedInitList, ParenInitializer, + // DesignatorAST + DotDesignator, + SubscriptDesignator, + // AST Splicer, GlobalModuleFragment, diff --git a/src/parser/cxx/ast_pretty_printer.cc b/src/parser/cxx/ast_pretty_printer.cc index 117555b5..764ea097 100644 --- a/src/parser/cxx/ast_pretty_printer.cc +++ b/src/parser/cxx/ast_pretty_printer.cc @@ -301,6 +301,24 @@ struct ASTPrettyPrinter::ExpressionVisitor { void operator()(ParenInitializerAST* ast); }; +struct ASTPrettyPrinter::DesignatorVisitor { + ASTPrettyPrinter& accept; + [[nodiscard]] auto translationUnit() const -> TranslationUnit* { + return accept.unit_; + } + void space() { accept.space(); } + void nospace() { accept.nospace(); } + void keepSpace() { accept.keepSpace(); } + void newline() { accept.newline(); } + void nonewline() { accept.nonewline(); } + void indent() { accept.indent(); } + void unindent() { accept.unindent(); } + + void operator()(DotDesignatorAST* ast); + + void operator()(SubscriptDesignatorAST* ast); +}; + struct ASTPrettyPrinter::TemplateParameterVisitor { ASTPrettyPrinter& accept; [[nodiscard]] auto translationUnit() const -> TranslationUnit* { @@ -745,6 +763,11 @@ void ASTPrettyPrinter::operator()(ExpressionAST* ast) { visit(ExpressionVisitor{*this}, ast); } +void ASTPrettyPrinter::operator()(DesignatorAST* ast) { + if (!ast) return; + visit(DesignatorVisitor{*this}, ast); +} + void ASTPrettyPrinter::operator()(TemplateParameterAST* ast) { if (!ast) return; visit(TemplateParameterVisitor{*this}, ast); @@ -2965,14 +2988,10 @@ void ASTPrettyPrinter::ExpressionVisitor::operator()( void ASTPrettyPrinter::ExpressionVisitor::operator()( DesignatedInitializerClauseAST* ast) { - if (ast->dotLoc) { - nospace(); - accept.writeToken(ast->dotLoc); - nospace(); - } - if (ast->identifierLoc) { - accept.writeToken(ast->identifierLoc); + for (auto it = ast->designatorList; it; it = it->next) { + accept(it->value); } + accept(ast->initializer); } @@ -3070,6 +3089,31 @@ void ASTPrettyPrinter::ExpressionVisitor::operator()(ParenInitializerAST* ast) { } } +void ASTPrettyPrinter::DesignatorVisitor::operator()(DotDesignatorAST* ast) { + if (ast->dotLoc) { + nospace(); + accept.writeToken(ast->dotLoc); + nospace(); + } + if (ast->identifierLoc) { + accept.writeToken(ast->identifierLoc); + } +} + +void ASTPrettyPrinter::DesignatorVisitor::operator()( + SubscriptDesignatorAST* ast) { + if (ast->lbracketLoc) { + nospace(); + accept.writeToken(ast->lbracketLoc); + nospace(); + } + accept(ast->expression); + if (ast->rbracketLoc) { + nospace(); + accept.writeToken(ast->rbracketLoc); + } +} + void ASTPrettyPrinter::TemplateParameterVisitor::operator()( TemplateTypeParameterAST* ast) { if (ast->templateLoc) { diff --git a/src/parser/cxx/ast_pretty_printer.h b/src/parser/cxx/ast_pretty_printer.h index d9277b25..76476aa2 100644 --- a/src/parser/cxx/ast_pretty_printer.h +++ b/src/parser/cxx/ast_pretty_printer.h @@ -48,6 +48,7 @@ class ASTPrettyPrinter { void operator()(DeclarationAST* ast); void operator()(StatementAST* ast); void operator()(ExpressionAST* ast); + void operator()(DesignatorAST* ast); void operator()(TemplateParameterAST* ast); void operator()(SpecifierAST* ast); void operator()(PtrOperatorAST* ast); @@ -99,6 +100,7 @@ class ASTPrettyPrinter { struct DeclarationVisitor; struct StatementVisitor; struct ExpressionVisitor; + struct DesignatorVisitor; struct TemplateParameterVisitor; struct SpecifierVisitor; struct PtrOperatorVisitor; diff --git a/src/parser/cxx/ast_printer.cc b/src/parser/cxx/ast_printer.cc index 897bb5de..e7bdd562 100644 --- a/src/parser/cxx/ast_printer.cc +++ b/src/parser/cxx/ast_printer.cc @@ -1471,7 +1471,15 @@ void ASTPrinter::visit(DesignatedInitializerClauseAST* ast) { to_string(ast->type)); } out_ << "\n"; - accept(ast->identifier, "identifier"); + if (ast->designatorList) { + ++indent_; + out_ << std::format("{:{}}", "", indent_ * 2); + out_ << std::format("{}\n", "designator-list"); + for (auto node : ListView{ast->designatorList}) { + accept(node); + } + --indent_; + } accept(ast->initializer, "initializer"); } @@ -1568,6 +1576,16 @@ void ASTPrinter::visit(ParenInitializerAST* ast) { } } +void ASTPrinter::visit(DotDesignatorAST* ast) { + out_ << std::format("{}\n", "dot-designator"); + accept(ast->identifier, "identifier"); +} + +void ASTPrinter::visit(SubscriptDesignatorAST* ast) { + out_ << std::format("{}\n", "subscript-designator"); + accept(ast->expression, "expression"); +} + void ASTPrinter::visit(SplicerAST* ast) { out_ << std::format("{}\n", "splicer"); accept(ast->expression, "expression"); diff --git a/src/parser/cxx/ast_printer.h b/src/parser/cxx/ast_printer.h index 72aefa39..b3514171 100644 --- a/src/parser/cxx/ast_printer.h +++ b/src/parser/cxx/ast_printer.h @@ -155,6 +155,9 @@ class ASTPrinter : ASTVisitor { void visit(BracedInitListAST* ast) override; void visit(ParenInitializerAST* ast) override; + void visit(DotDesignatorAST* ast) override; + void visit(SubscriptDesignatorAST* ast) override; + void visit(SplicerAST* ast) override; void visit(GlobalModuleFragmentAST* ast) override; void visit(PrivateModuleFragmentAST* ast) override; diff --git a/src/parser/cxx/ast_slot.cc b/src/parser/cxx/ast_slot.cc index 0cfb50c0..78a70bfb 100644 --- a/src/parser/cxx/ast_slot.cc +++ b/src/parser/cxx/ast_slot.cc @@ -110,6 +110,7 @@ std::string_view kMemberSlotNames[] = { "decltypeSpecifier", "defaultLoc", "deleteLoc", + "designatorList", "doLoc", "dotLoc", "ellipsisLoc", @@ -301,12 +302,12 @@ void ASTSlot::visit(ModuleUnitAST* ast) { case 0: // globalModuleFragment value_ = reinterpret_cast(ast->globalModuleFragment); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{87}; + slotNameIndex_ = SlotNameIndex{88}; break; case 1: // moduleDeclaration value_ = reinterpret_cast(ast->moduleDeclaration); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{133}; + slotNameIndex_ = SlotNameIndex{134}; break; case 2: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -316,7 +317,7 @@ void ASTSlot::visit(ModuleUnitAST* ast) { case 3: // privateModuleFragment value_ = reinterpret_cast(ast->privateModuleFragment); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{157}; + slotNameIndex_ = SlotNameIndex{158}; break; } // switch @@ -338,17 +339,17 @@ void ASTSlot::visit(SimpleDeclarationAST* ast) { case 2: // initDeclaratorList value_ = reinterpret_cast(ast->initDeclaratorList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{105}; + slotNameIndex_ = SlotNameIndex{106}; break; case 3: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -375,22 +376,22 @@ void ASTSlot::visit(AsmDeclarationAST* ast) { case 3: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 4: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 5: // outputOperandList value_ = reinterpret_cast(ast->outputOperandList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{153}; + slotNameIndex_ = SlotNameIndex{154}; break; case 6: // inputOperandList value_ = reinterpret_cast(ast->inputOperandList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{108}; + slotNameIndex_ = SlotNameIndex{109}; break; case 7: // clobberList value_ = reinterpret_cast(ast->clobberList); @@ -400,22 +401,22 @@ void ASTSlot::visit(AsmDeclarationAST* ast) { case 8: // gotoLabelList value_ = reinterpret_cast(ast->gotoLabelList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{90}; + slotNameIndex_ = SlotNameIndex{91}; break; case 9: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 10: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 11: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -427,37 +428,37 @@ void ASTSlot::visit(NamespaceAliasDefinitionAST* ast) { case 0: // namespaceLoc value_ = ast->namespaceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{139}; + slotNameIndex_ = SlotNameIndex{140}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 3: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 6: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -469,17 +470,17 @@ void ASTSlot::visit(UsingDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // usingDeclaratorList value_ = reinterpret_cast(ast->usingDeclaratorList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{220}; + slotNameIndex_ = SlotNameIndex{221}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -491,17 +492,17 @@ void ASTSlot::visit(UsingEnumDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // enumTypeSpecifier value_ = reinterpret_cast(ast->enumTypeSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{68}; + slotNameIndex_ = SlotNameIndex{69}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -518,27 +519,27 @@ void ASTSlot::visit(UsingDirectiveAST* ast) { case 1: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{222}; break; case 2: // namespaceLoc value_ = ast->namespaceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{139}; + slotNameIndex_ = SlotNameIndex{140}; break; case 3: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -550,17 +551,17 @@ void ASTSlot::visit(StaticAssertDeclarationAST* ast) { case 0: // staticAssertLoc value_ = ast->staticAssertLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{189}; + slotNameIndex_ = SlotNameIndex{190}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // commaLoc value_ = ast->commaLoc.index(); @@ -570,22 +571,22 @@ void ASTSlot::visit(StaticAssertDeclarationAST* ast) { case 4: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 5: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -597,12 +598,12 @@ void ASTSlot::visit(AliasDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -612,27 +613,27 @@ void ASTSlot::visit(AliasDeclarationAST* ast) { case 3: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 4: // gnuAttributeList value_ = reinterpret_cast(ast->gnuAttributeList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{89}; + slotNameIndex_ = SlotNameIndex{90}; break; case 5: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 6: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -644,7 +645,7 @@ void ASTSlot::visit(OpaqueEnumDeclarationAST* ast) { case 0: // enumLoc value_ = ast->enumLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{67}; + slotNameIndex_ = SlotNameIndex{68}; break; case 1: // classLoc value_ = ast->classLoc.index(); @@ -659,12 +660,12 @@ void ASTSlot::visit(OpaqueEnumDeclarationAST* ast) { case 3: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // colonLoc value_ = ast->colonLoc.index(); @@ -674,12 +675,12 @@ void ASTSlot::visit(OpaqueEnumDeclarationAST* ast) { case 6: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 7: // emicolonLoc value_ = ast->emicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{66}; + slotNameIndex_ = SlotNameIndex{67}; break; } // switch @@ -706,12 +707,12 @@ void ASTSlot::visit(FunctionDefinitionAST* ast) { case 3: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 4: // functionBody value_ = reinterpret_cast(ast->functionBody); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{86}; + slotNameIndex_ = SlotNameIndex{87}; break; } // switch @@ -723,27 +724,27 @@ void ASTSlot::visit(TemplateDeclarationAST* ast) { case 0: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{200}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 4: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 5: // declaration value_ = reinterpret_cast(ast->declaration); @@ -765,27 +766,27 @@ void ASTSlot::visit(ConceptDefinitionAST* ast) { case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -797,27 +798,27 @@ void ASTSlot::visit(DeductionGuideAST* ast) { case 0: // explicitSpecifier value_ = reinterpret_cast(ast->explicitSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{75}; + slotNameIndex_ = SlotNameIndex{76}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 3: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{154}; + slotNameIndex_ = SlotNameIndex{155}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // arrowLoc value_ = ast->arrowLoc.index(); @@ -827,17 +828,17 @@ void ASTSlot::visit(DeductionGuideAST* ast) { case 6: // templateId value_ = reinterpret_cast(ast->templateId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{197}; + slotNameIndex_ = SlotNameIndex{198}; break; case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 8: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -849,12 +850,12 @@ void ASTSlot::visit(ExplicitInstantiationAST* ast) { case 0: // externLoc value_ = ast->externLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{79}; + slotNameIndex_ = SlotNameIndex{80}; break; case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 2: // declaration value_ = reinterpret_cast(ast->declaration); @@ -871,7 +872,7 @@ void ASTSlot::visit(ExportDeclarationAST* ast) { case 0: // exportLoc value_ = ast->exportLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{76}; + slotNameIndex_ = SlotNameIndex{77}; break; case 1: // declaration value_ = reinterpret_cast(ast->declaration); @@ -888,12 +889,12 @@ void ASTSlot::visit(ExportCompoundDeclarationAST* ast) { case 0: // exportLoc value_ = ast->exportLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{76}; + slotNameIndex_ = SlotNameIndex{77}; break; case 1: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 2: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -903,7 +904,7 @@ void ASTSlot::visit(ExportCompoundDeclarationAST* ast) { case 3: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; } // switch @@ -915,17 +916,17 @@ void ASTSlot::visit(LinkageSpecificationAST* ast) { case 0: // externLoc value_ = ast->externLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{79}; + slotNameIndex_ = SlotNameIndex{80}; break; case 1: // stringliteralLoc value_ = ast->stringliteralLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{192}; + slotNameIndex_ = SlotNameIndex{193}; break; case 2: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 3: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -935,12 +936,12 @@ void ASTSlot::visit(LinkageSpecificationAST* ast) { case 4: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; case 5: // stringLiteral value_ = reinterpret_cast(ast->stringLiteral); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{191}; + slotNameIndex_ = SlotNameIndex{192}; break; } // switch @@ -952,12 +953,12 @@ void ASTSlot::visit(NamespaceDefinitionAST* ast) { case 0: // inlineLoc value_ = ast->inlineLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{107}; + slotNameIndex_ = SlotNameIndex{108}; break; case 1: // namespaceLoc value_ = ast->namespaceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{139}; + slotNameIndex_ = SlotNameIndex{140}; break; case 2: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -968,22 +969,22 @@ void ASTSlot::visit(NamespaceDefinitionAST* ast) { value_ = reinterpret_cast(ast->nestedNamespaceSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{141}; + slotNameIndex_ = SlotNameIndex{142}; break; case 4: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 5: // extraAttributeList value_ = reinterpret_cast(ast->extraAttributeList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{80}; + slotNameIndex_ = SlotNameIndex{81}; break; case 6: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 7: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -993,17 +994,17 @@ void ASTSlot::visit(NamespaceDefinitionAST* ast) { case 8: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; case 9: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 10: // isInline value_ = std::intptr_t(ast->isInline != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{110}; + slotNameIndex_ = SlotNameIndex{111}; break; } // switch @@ -1015,7 +1016,7 @@ void ASTSlot::visit(EmptyDeclarationAST* ast) { case 0: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1032,7 +1033,7 @@ void ASTSlot::visit(AttributeDeclarationAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1044,12 +1045,12 @@ void ASTSlot::visit(ModuleImportDeclarationAST* ast) { case 0: // importLoc value_ = ast->importLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{102}; + slotNameIndex_ = SlotNameIndex{103}; break; case 1: // importName value_ = reinterpret_cast(ast->importName); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{103}; + slotNameIndex_ = SlotNameIndex{104}; break; case 2: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -1059,7 +1060,7 @@ void ASTSlot::visit(ModuleImportDeclarationAST* ast) { case 3: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1076,12 +1077,12 @@ void ASTSlot::visit(ParameterDeclarationAST* ast) { case 1: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{202}; break; case 2: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 3: // declarator value_ = reinterpret_cast(ast->declarator); @@ -1091,27 +1092,27 @@ void ASTSlot::visit(ParameterDeclarationAST* ast) { case 4: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 5: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 6: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 7: // isThisIntroduced value_ = std::intptr_t(ast->isThisIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{116}; + slotNameIndex_ = SlotNameIndex{117}; break; case 8: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -1157,12 +1158,12 @@ void ASTSlot::visit(StructuredBindingDeclarationAST* ast) { case 2: // refQualifierLoc value_ = ast->refQualifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{169}; + slotNameIndex_ = SlotNameIndex{170}; break; case 3: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 4: // bindingList value_ = reinterpret_cast(ast->bindingList); @@ -1172,17 +1173,17 @@ void ASTSlot::visit(StructuredBindingDeclarationAST* ast) { case 5: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 6: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1194,17 +1195,17 @@ void ASTSlot::visit(AsmOperandAST* ast) { case 0: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 1: // symbolicNameLoc value_ = ast->symbolicNameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{195}; + slotNameIndex_ = SlotNameIndex{196}; break; case 2: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 3: // constraintLiteralLoc value_ = ast->constraintLiteralLoc.index(); @@ -1214,22 +1215,22 @@ void ASTSlot::visit(AsmOperandAST* ast) { case 4: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 5: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // symbolicName value_ = reinterpret_cast(ast->symbolicName); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{194}; + slotNameIndex_ = SlotNameIndex{195}; break; case 8: // constraintLiteral value_ = reinterpret_cast(ast->constraintLiteral); @@ -1246,12 +1247,12 @@ void ASTSlot::visit(AsmQualifierAST* ast) { case 0: // qualifierLoc value_ = ast->qualifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{160}; + slotNameIndex_ = SlotNameIndex{161}; break; case 1: // qualifier value_ = std::intptr_t(ast->qualifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{159}; + slotNameIndex_ = SlotNameIndex{160}; break; } // switch @@ -1263,12 +1264,12 @@ void ASTSlot::visit(AsmClobberAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1280,12 +1281,12 @@ void ASTSlot::visit(AsmGotoLabelAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -1297,7 +1298,7 @@ void ASTSlot::visit(LabeledStatementAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // colonLoc value_ = ast->colonLoc.index(); @@ -1307,7 +1308,7 @@ void ASTSlot::visit(LabeledStatementAST* ast) { case 2: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -1324,7 +1325,7 @@ void ASTSlot::visit(CaseStatementAST* ast) { case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // colonLoc value_ = ast->colonLoc.index(); @@ -1358,12 +1359,12 @@ void ASTSlot::visit(ExpressionStatementAST* ast) { case 0: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1375,17 +1376,17 @@ void ASTSlot::visit(CompoundStatementAST* ast) { case 0: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 1: // statementList value_ = reinterpret_cast(ast->statementList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{189}; break; case 2: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; } // switch @@ -1397,7 +1398,7 @@ void ASTSlot::visit(IfStatementAST* ast) { case 0: // ifLoc value_ = ast->ifLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{99}; + slotNameIndex_ = SlotNameIndex{100}; break; case 1: // constexprLoc value_ = ast->constexprLoc.index(); @@ -1407,12 +1408,12 @@ void ASTSlot::visit(IfStatementAST* ast) { case 2: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 3: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 4: // condition value_ = reinterpret_cast(ast->condition); @@ -1422,22 +1423,22 @@ void ASTSlot::visit(IfStatementAST* ast) { case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 6: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 7: // elseLoc value_ = ast->elseLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{64}; + slotNameIndex_ = SlotNameIndex{65}; break; case 8: // elseStatement value_ = reinterpret_cast(ast->elseStatement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{65}; + slotNameIndex_ = SlotNameIndex{66}; break; } // switch @@ -1449,12 +1450,12 @@ void ASTSlot::visit(ConstevalIfStatementAST* ast) { case 0: // ifLoc value_ = ast->ifLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{99}; + slotNameIndex_ = SlotNameIndex{100}; break; case 1: // exclaimLoc value_ = ast->exclaimLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{73}; + slotNameIndex_ = SlotNameIndex{74}; break; case 2: // constvalLoc value_ = ast->constvalLoc.index(); @@ -1464,22 +1465,22 @@ void ASTSlot::visit(ConstevalIfStatementAST* ast) { case 3: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 4: // elseLoc value_ = ast->elseLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{64}; + slotNameIndex_ = SlotNameIndex{65}; break; case 5: // elseStatement value_ = reinterpret_cast(ast->elseStatement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{65}; + slotNameIndex_ = SlotNameIndex{66}; break; case 6: // isNot value_ = std::intptr_t(ast->isNot != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{111}; + slotNameIndex_ = SlotNameIndex{112}; break; } // switch @@ -1491,17 +1492,17 @@ void ASTSlot::visit(SwitchStatementAST* ast) { case 0: // switchLoc value_ = ast->switchLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{193}; + slotNameIndex_ = SlotNameIndex{194}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 3: // condition value_ = reinterpret_cast(ast->condition); @@ -1511,12 +1512,12 @@ void ASTSlot::visit(SwitchStatementAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -1528,12 +1529,12 @@ void ASTSlot::visit(WhileStatementAST* ast) { case 0: // whileLoc value_ = ast->whileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{227}; + slotNameIndex_ = SlotNameIndex{228}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // condition value_ = reinterpret_cast(ast->condition); @@ -1543,12 +1544,12 @@ void ASTSlot::visit(WhileStatementAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 4: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -1560,37 +1561,37 @@ void ASTSlot::visit(DoStatementAST* ast) { case 0: // doLoc value_ = ast->doLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{61}; + slotNameIndex_ = SlotNameIndex{62}; break; case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 2: // whileLoc value_ = ast->whileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{227}; + slotNameIndex_ = SlotNameIndex{228}; break; case 3: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 4: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 6: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1602,22 +1603,22 @@ void ASTSlot::visit(ForRangeStatementAST* ast) { case 0: // forLoc value_ = ast->forLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{84}; + slotNameIndex_ = SlotNameIndex{85}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 3: // rangeDeclaration value_ = reinterpret_cast(ast->rangeDeclaration); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{162}; + slotNameIndex_ = SlotNameIndex{163}; break; case 4: // colonLoc value_ = ast->colonLoc.index(); @@ -1627,17 +1628,17 @@ void ASTSlot::visit(ForRangeStatementAST* ast) { case 5: // rangeInitializer value_ = reinterpret_cast(ast->rangeInitializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{163}; + slotNameIndex_ = SlotNameIndex{164}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -1649,17 +1650,17 @@ void ASTSlot::visit(ForStatementAST* ast) { case 0: // forLoc value_ = ast->forLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{84}; + slotNameIndex_ = SlotNameIndex{85}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 3: // condition value_ = reinterpret_cast(ast->condition); @@ -1669,22 +1670,22 @@ void ASTSlot::visit(ForStatementAST* ast) { case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -1701,7 +1702,7 @@ void ASTSlot::visit(BreakStatementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1718,7 +1719,7 @@ void ASTSlot::visit(ContinueStatementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1730,17 +1731,17 @@ void ASTSlot::visit(ReturnStatementAST* ast) { case 0: // returnLoc value_ = ast->returnLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{174}; + slotNameIndex_ = SlotNameIndex{175}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1757,12 +1758,12 @@ void ASTSlot::visit(CoroutineReturnStatementAST* ast) { case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1774,22 +1775,22 @@ void ASTSlot::visit(GotoStatementAST* ast) { case 0: // gotoLoc value_ = ast->gotoLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{91}; + slotNameIndex_ = SlotNameIndex{92}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -1813,17 +1814,17 @@ void ASTSlot::visit(TryBlockStatementAST* ast) { case 0: // tryLoc value_ = ast->tryLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{207}; + slotNameIndex_ = SlotNameIndex{208}; break; case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 2: // handlerList value_ = reinterpret_cast(ast->handlerList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{93}; + slotNameIndex_ = SlotNameIndex{94}; break; } // switch @@ -1835,7 +1836,7 @@ void ASTSlot::visit(GeneratedLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; } // switch @@ -1847,12 +1848,12 @@ void ASTSlot::visit(CharLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1864,12 +1865,12 @@ void ASTSlot::visit(BoolLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // isTrue value_ = std::intptr_t(ast->isTrue != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{117}; + slotNameIndex_ = SlotNameIndex{118}; break; } // switch @@ -1881,12 +1882,12 @@ void ASTSlot::visit(IntLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1898,12 +1899,12 @@ void ASTSlot::visit(FloatLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1915,12 +1916,12 @@ void ASTSlot::visit(NullptrLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = std::intptr_t(ast->literal); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1932,12 +1933,12 @@ void ASTSlot::visit(StringLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1949,12 +1950,12 @@ void ASTSlot::visit(UserDefinedStringLiteralExpressionAST* ast) { case 0: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 1: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -1966,7 +1967,7 @@ void ASTSlot::visit(ThisExpressionAST* ast) { case 0: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -1978,17 +1979,17 @@ void ASTSlot::visit(NestedStatementExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2000,17 +2001,17 @@ void ASTSlot::visit(NestedExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2022,22 +2023,22 @@ void ASTSlot::visit(IdExpressionAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -2049,7 +2050,7 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 0: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 1: // captureDefaultLoc value_ = ast->captureDefaultLoc.index(); @@ -2064,57 +2065,57 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 4: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 5: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{200}; break; case 6: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 7: // templateRequiresClause value_ = reinterpret_cast(ast->templateRequiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{200}; + slotNameIndex_ = SlotNameIndex{201}; break; case 8: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 9: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{154}; + slotNameIndex_ = SlotNameIndex{155}; break; case 10: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 11: // gnuAtributeList value_ = reinterpret_cast(ast->gnuAtributeList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{88}; + slotNameIndex_ = SlotNameIndex{89}; break; case 12: // lambdaSpecifierList value_ = reinterpret_cast(ast->lambdaSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{120}; + slotNameIndex_ = SlotNameIndex{121}; break; case 13: // exceptionSpecifier value_ = reinterpret_cast(ast->exceptionSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{72}; + slotNameIndex_ = SlotNameIndex{73}; break; case 14: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -2124,17 +2125,17 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 15: // trailingReturnType value_ = reinterpret_cast(ast->trailingReturnType); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{206}; + slotNameIndex_ = SlotNameIndex{207}; break; case 16: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 17: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 18: // captureDefault value_ = std::intptr_t(ast->captureDefault); @@ -2151,47 +2152,47 @@ void ASTSlot::visit(FoldExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // leftExpression value_ = reinterpret_cast(ast->leftExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{124}; + slotNameIndex_ = SlotNameIndex{125}; break; case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 4: // foldOpLoc value_ = ast->foldOpLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{83}; + slotNameIndex_ = SlotNameIndex{84}; break; case 5: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{175}; + slotNameIndex_ = SlotNameIndex{176}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; case 8: // foldOp value_ = std::intptr_t(ast->foldOp); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{82}; + slotNameIndex_ = SlotNameIndex{83}; break; } // switch @@ -2203,32 +2204,32 @@ void ASTSlot::visit(RightFoldExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -2240,32 +2241,32 @@ void ASTSlot::visit(LeftFoldExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -2277,37 +2278,37 @@ void ASTSlot::visit(RequiresExpressionAST* ast) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{172}; + slotNameIndex_ = SlotNameIndex{173}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{154}; + slotNameIndex_ = SlotNameIndex{155}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 4: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 5: // requirementList value_ = reinterpret_cast(ast->requirementList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{171}; break; case 6: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; } // switch @@ -2319,17 +2320,17 @@ void ASTSlot::visit(VaArgExpressionAST* ast) { case 0: // vaArgLoc value_ = ast->vaArgLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{222}; + slotNameIndex_ = SlotNameIndex{223}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // commaLoc value_ = ast->commaLoc.index(); @@ -2339,12 +2340,12 @@ void ASTSlot::visit(VaArgExpressionAST* ast) { case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2361,17 +2362,17 @@ void ASTSlot::visit(SubscriptExpressionAST* ast) { case 1: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 2: // indexExpression value_ = reinterpret_cast(ast->indexExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{104}; + slotNameIndex_ = SlotNameIndex{105}; break; case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -2388,17 +2389,17 @@ void ASTSlot::visit(CallExpressionAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2410,22 +2411,22 @@ void ASTSlot::visit(TypeConstructionAST* ast) { case 0: // typeSpecifier value_ = reinterpret_cast(ast->typeSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{212}; + slotNameIndex_ = SlotNameIndex{213}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2437,7 +2438,7 @@ void ASTSlot::visit(BracedTypeConstructionAST* ast) { case 0: // typeSpecifier value_ = reinterpret_cast(ast->typeSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{212}; + slotNameIndex_ = SlotNameIndex{213}; break; case 1: // bracedInitList value_ = reinterpret_cast(ast->bracedInitList); @@ -2464,12 +2465,12 @@ void ASTSlot::visit(SpliceMemberExpressionAST* ast) { case 2: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 3: // splicer value_ = reinterpret_cast(ast->splicer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{185}; + slotNameIndex_ = SlotNameIndex{186}; break; case 4: // accessOp value_ = std::intptr_t(ast->accessOp); @@ -2479,7 +2480,7 @@ void ASTSlot::visit(SpliceMemberExpressionAST* ast) { case 5: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -2501,17 +2502,17 @@ void ASTSlot::visit(MemberExpressionAST* ast) { case 2: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 3: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // accessOp value_ = std::intptr_t(ast->accessOp); @@ -2521,7 +2522,7 @@ void ASTSlot::visit(MemberExpressionAST* ast) { case 6: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -2538,12 +2539,12 @@ void ASTSlot::visit(PostIncrExpressionAST* ast) { case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 2: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -2560,32 +2561,32 @@ void ASTSlot::visit(CppCastExpressionAST* ast) { case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 4: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 5: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2602,12 +2603,12 @@ void ASTSlot::visit(BuiltinBitCastExpressionAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // commaLoc value_ = ast->commaLoc.index(); @@ -2617,12 +2618,12 @@ void ASTSlot::visit(BuiltinBitCastExpressionAST* ast) { case 4: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2634,17 +2635,17 @@ void ASTSlot::visit(BuiltinOffsetofExpressionAST* ast) { case 0: // offsetofLoc value_ = ast->offsetofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{146}; + slotNameIndex_ = SlotNameIndex{147}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // commaLoc value_ = ast->commaLoc.index(); @@ -2654,12 +2655,12 @@ void ASTSlot::visit(BuiltinOffsetofExpressionAST* ast) { case 4: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2671,22 +2672,22 @@ void ASTSlot::visit(TypeidExpressionAST* ast) { case 0: // typeidLoc value_ = ast->typeidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{216}; + slotNameIndex_ = SlotNameIndex{217}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2698,22 +2699,22 @@ void ASTSlot::visit(TypeidOfTypeExpressionAST* ast) { case 0: // typeidLoc value_ = ast->typeidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{216}; + slotNameIndex_ = SlotNameIndex{217}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2725,7 +2726,7 @@ void ASTSlot::visit(SpliceExpressionAST* ast) { case 0: // splicer value_ = reinterpret_cast(ast->splicer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{185}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -2742,7 +2743,7 @@ void ASTSlot::visit(GlobalScopeReflectExpressionAST* ast) { case 1: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; } // switch @@ -2759,12 +2760,12 @@ void ASTSlot::visit(NamespaceReflectExpressionAST* ast) { case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -2781,7 +2782,7 @@ void ASTSlot::visit(TypeIdReflectExpressionAST* ast) { case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -2798,7 +2799,7 @@ void ASTSlot::visit(ReflectExpressionAST* ast) { case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -2810,17 +2811,17 @@ void ASTSlot::visit(UnaryExpressionAST* ast) { case 0: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -2837,7 +2838,7 @@ void ASTSlot::visit(AwaitExpressionAST* ast) { case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -2849,12 +2850,12 @@ void ASTSlot::visit(SizeofExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{183}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -2866,22 +2867,22 @@ void ASTSlot::visit(SizeofTypeExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{183}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2893,32 +2894,32 @@ void ASTSlot::visit(SizeofPackExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{183}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 3: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -2935,17 +2936,17 @@ void ASTSlot::visit(AlignofTypeExpressionAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -2962,7 +2963,7 @@ void ASTSlot::visit(AlignofExpressionAST* ast) { case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -2974,22 +2975,22 @@ void ASTSlot::visit(NoexceptExpressionAST* ast) { case 0: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{145}; + slotNameIndex_ = SlotNameIndex{146}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -3001,27 +3002,27 @@ void ASTSlot::visit(NewExpressionAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; case 1: // newLoc value_ = ast->newLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{143}; + slotNameIndex_ = SlotNameIndex{144}; break; case 2: // newPlacement value_ = reinterpret_cast(ast->newPlacement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{144}; + slotNameIndex_ = SlotNameIndex{145}; break; case 3: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 4: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 5: // declarator value_ = reinterpret_cast(ast->declarator); @@ -3031,12 +3032,12 @@ void ASTSlot::visit(NewExpressionAST* ast) { case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 7: // newInitalizer value_ = reinterpret_cast(ast->newInitalizer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{142}; + slotNameIndex_ = SlotNameIndex{143}; break; } // switch @@ -3048,7 +3049,7 @@ void ASTSlot::visit(DeleteExpressionAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; case 1: // deleteLoc value_ = ast->deleteLoc.index(); @@ -3058,17 +3059,17 @@ void ASTSlot::visit(DeleteExpressionAST* ast) { case 2: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 4: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3080,22 +3081,22 @@ void ASTSlot::visit(CastExpressionAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3107,7 +3108,7 @@ void ASTSlot::visit(ImplicitCastExpressionAST* ast) { case 0: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3119,22 +3120,22 @@ void ASTSlot::visit(BinaryExpressionAST* ast) { case 0: // leftExpression value_ = reinterpret_cast(ast->leftExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{124}; + slotNameIndex_ = SlotNameIndex{125}; break; case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 2: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{175}; + slotNameIndex_ = SlotNameIndex{176}; break; case 3: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -3151,12 +3152,12 @@ void ASTSlot::visit(ConditionalExpressionAST* ast) { case 1: // questionLoc value_ = ast->questionLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{161}; + slotNameIndex_ = SlotNameIndex{162}; break; case 2: // iftrueExpression value_ = reinterpret_cast(ast->iftrueExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{101}; + slotNameIndex_ = SlotNameIndex{102}; break; case 3: // colonLoc value_ = ast->colonLoc.index(); @@ -3166,7 +3167,7 @@ void ASTSlot::visit(ConditionalExpressionAST* ast) { case 4: // iffalseExpression value_ = reinterpret_cast(ast->iffalseExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{100}; + slotNameIndex_ = SlotNameIndex{101}; break; } // switch @@ -3178,12 +3179,12 @@ void ASTSlot::visit(YieldExpressionAST* ast) { case 0: // yieldLoc value_ = ast->yieldLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{228}; + slotNameIndex_ = SlotNameIndex{229}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3195,12 +3196,12 @@ void ASTSlot::visit(ThrowExpressionAST* ast) { case 0: // throwLoc value_ = ast->throwLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{204}; + slotNameIndex_ = SlotNameIndex{205}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3212,22 +3213,22 @@ void ASTSlot::visit(AssignmentExpressionAST* ast) { case 0: // leftExpression value_ = reinterpret_cast(ast->leftExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{124}; + slotNameIndex_ = SlotNameIndex{125}; break; case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 2: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{175}; + slotNameIndex_ = SlotNameIndex{176}; break; case 3: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -3239,12 +3240,12 @@ void ASTSlot::visit(PackExpansionExpressionAST* ast) { case 0: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; } // switch @@ -3253,29 +3254,19 @@ void ASTSlot::visit(PackExpansionExpressionAST* ast) { void ASTSlot::visit(DesignatedInitializerClauseAST* ast) { switch (slot_) { - case 0: // dotLoc - value_ = ast->dotLoc.index(); - slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{62}; - break; - case 1: // identifierLoc - value_ = ast->identifierLoc.index(); - slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; - break; - case 2: // identifier - value_ = reinterpret_cast(ast->identifier); - slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + case 0: // designatorList + value_ = reinterpret_cast(ast->designatorList); + slotKind_ = ASTSlotKind::kNodeList; + slotNameIndex_ = SlotNameIndex{61}; break; - case 3: // initializer + case 1: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; } // switch - slotCount_ = 4; + slotCount_ = 2; } void ASTSlot::visit(TypeTraitExpressionAST* ast) { @@ -3283,22 +3274,22 @@ void ASTSlot::visit(TypeTraitExpressionAST* ast) { case 0: // typeTraitLoc value_ = ast->typeTraitLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{214}; + slotNameIndex_ = SlotNameIndex{215}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeIdList value_ = reinterpret_cast(ast->typeIdList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{210}; + slotNameIndex_ = SlotNameIndex{211}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -3325,7 +3316,7 @@ void ASTSlot::visit(ConditionExpressionAST* ast) { case 3: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; } // switch @@ -3337,12 +3328,12 @@ void ASTSlot::visit(EqualInitializerAST* ast) { case 0: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3354,12 +3345,12 @@ void ASTSlot::visit(BracedInitListAST* ast) { case 0: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 1: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 2: // commaLoc value_ = ast->commaLoc.index(); @@ -3369,7 +3360,7 @@ void ASTSlot::visit(BracedInitListAST* ast) { case 3: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; } // switch @@ -3381,17 +3372,61 @@ void ASTSlot::visit(ParenInitializerAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; + break; + } // switch + + slotCount_ = 3; +} + +void ASTSlot::visit(DotDesignatorAST* ast) { + switch (slot_) { + case 0: // dotLoc + value_ = ast->dotLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{63}; + break; + case 1: // identifierLoc + value_ = ast->identifierLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{99}; + break; + case 2: // identifier + value_ = reinterpret_cast(ast->identifier); + slotKind_ = ASTSlotKind::kIdentifierAttribute; + slotNameIndex_ = SlotNameIndex{98}; + break; + } // switch + + slotCount_ = 3; +} + +void ASTSlot::visit(SubscriptDesignatorAST* ast) { + switch (slot_) { + case 0: // lbracketLoc + value_ = ast->lbracketLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{124}; + break; + case 1: // expression + value_ = reinterpret_cast(ast->expression); + slotKind_ = ASTSlotKind::kNode; + slotNameIndex_ = SlotNameIndex{78}; + break; + case 2: // rbracketLoc + value_ = ast->rbracketLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -3403,7 +3438,7 @@ void ASTSlot::visit(SplicerAST* ast) { case 0: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 1: // colonLoc value_ = ast->colonLoc.index(); @@ -3413,22 +3448,22 @@ void ASTSlot::visit(SplicerAST* ast) { case 2: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 4: // secondColonLoc value_ = ast->secondColonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{179}; + slotNameIndex_ = SlotNameIndex{180}; break; case 5: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -3440,12 +3475,12 @@ void ASTSlot::visit(GlobalModuleFragmentAST* ast) { case 0: // moduleLoc value_ = ast->moduleLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{134}; + slotNameIndex_ = SlotNameIndex{135}; break; case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 2: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -3462,7 +3497,7 @@ void ASTSlot::visit(PrivateModuleFragmentAST* ast) { case 0: // moduleLoc value_ = ast->moduleLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{134}; + slotNameIndex_ = SlotNameIndex{135}; break; case 1: // colonLoc value_ = ast->colonLoc.index(); @@ -3472,12 +3507,12 @@ void ASTSlot::visit(PrivateModuleFragmentAST* ast) { case 2: // privateLoc value_ = ast->privateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{156}; + slotNameIndex_ = SlotNameIndex{157}; break; case 3: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -3494,22 +3529,22 @@ void ASTSlot::visit(ModuleDeclarationAST* ast) { case 0: // exportLoc value_ = ast->exportLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{76}; + slotNameIndex_ = SlotNameIndex{77}; break; case 1: // moduleLoc value_ = ast->moduleLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{134}; + slotNameIndex_ = SlotNameIndex{135}; break; case 2: // moduleName value_ = reinterpret_cast(ast->moduleName); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{135}; + slotNameIndex_ = SlotNameIndex{136}; break; case 3: // modulePartition value_ = reinterpret_cast(ast->modulePartition); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{136}; + slotNameIndex_ = SlotNameIndex{137}; break; case 4: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -3519,7 +3554,7 @@ void ASTSlot::visit(ModuleDeclarationAST* ast) { case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -3531,17 +3566,17 @@ void ASTSlot::visit(ModuleNameAST* ast) { case 0: // moduleQualifier value_ = reinterpret_cast(ast->moduleQualifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{137}; + slotNameIndex_ = SlotNameIndex{138}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -3553,22 +3588,22 @@ void ASTSlot::visit(ModuleQualifierAST* ast) { case 0: // moduleQualifier value_ = reinterpret_cast(ast->moduleQualifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{137}; + slotNameIndex_ = SlotNameIndex{138}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // dotLoc value_ = ast->dotLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{62}; + slotNameIndex_ = SlotNameIndex{63}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -3585,7 +3620,7 @@ void ASTSlot::visit(ModulePartitionAST* ast) { case 1: // moduleName value_ = reinterpret_cast(ast->moduleName); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{135}; + slotNameIndex_ = SlotNameIndex{136}; break; } // switch @@ -3597,17 +3632,17 @@ void ASTSlot::visit(ImportNameAST* ast) { case 0: // headerLoc value_ = ast->headerLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{94}; + slotNameIndex_ = SlotNameIndex{95}; break; case 1: // modulePartition value_ = reinterpret_cast(ast->modulePartition); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{136}; + slotNameIndex_ = SlotNameIndex{137}; break; case 2: // moduleName value_ = reinterpret_cast(ast->moduleName); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{135}; + slotNameIndex_ = SlotNameIndex{136}; break; } // switch @@ -3624,12 +3659,12 @@ void ASTSlot::visit(InitDeclaratorAST* ast) { case 1: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; } // switch @@ -3641,7 +3676,7 @@ void ASTSlot::visit(DeclaratorAST* ast) { case 0: // ptrOpList value_ = reinterpret_cast(ast->ptrOpList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{158}; + slotNameIndex_ = SlotNameIndex{159}; break; case 1: // coreDeclarator value_ = reinterpret_cast(ast->coreDeclarator); @@ -3663,27 +3698,27 @@ void ASTSlot::visit(UsingDeclaratorAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{217}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 4: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -3695,7 +3730,7 @@ void ASTSlot::visit(EnumeratorAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -3705,17 +3740,17 @@ void ASTSlot::visit(EnumeratorAST* ast) { case 2: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 4: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -3727,7 +3762,7 @@ void ASTSlot::visit(TypeIdAST* ast) { case 0: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 1: // declarator value_ = reinterpret_cast(ast->declarator); @@ -3749,22 +3784,22 @@ void ASTSlot::visit(HandlerAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // exceptionDeclaration value_ = reinterpret_cast(ast->exceptionDeclaration); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{71}; + slotNameIndex_ = SlotNameIndex{72}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 4: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -3781,47 +3816,47 @@ void ASTSlot::visit(BaseSpecifierAST* ast) { case 1: // virtualOrAccessLoc value_ = ast->virtualOrAccessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{224}; + slotNameIndex_ = SlotNameIndex{225}; break; case 2: // otherVirtualOrAccessLoc value_ = ast->otherVirtualOrAccessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{153}; break; case 3: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 4: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 5: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 6: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 7: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; case 8: // isVirtual value_ = std::intptr_t(ast->isVirtual != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{119}; + slotNameIndex_ = SlotNameIndex{120}; break; case 9: // isVariadic value_ = std::intptr_t(ast->isVariadic != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{118}; + slotNameIndex_ = SlotNameIndex{119}; break; case 10: // accessSpecifier value_ = std::intptr_t(ast->accessSpecifier); @@ -3838,12 +3873,12 @@ void ASTSlot::visit(RequiresClauseAST* ast) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{172}; + slotNameIndex_ = SlotNameIndex{173}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -3855,7 +3890,7 @@ void ASTSlot::visit(ParameterDeclarationClauseAST* ast) { case 0: // parameterDeclarationList value_ = reinterpret_cast(ast->parameterDeclarationList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{155}; + slotNameIndex_ = SlotNameIndex{156}; break; case 1: // commaLoc value_ = ast->commaLoc.index(); @@ -3865,12 +3900,12 @@ void ASTSlot::visit(ParameterDeclarationClauseAST* ast) { case 2: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 3: // isVariadic value_ = std::intptr_t(ast->isVariadic != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{118}; + slotNameIndex_ = SlotNameIndex{119}; break; } // switch @@ -3882,12 +3917,12 @@ void ASTSlot::visit(TrailingReturnTypeAST* ast) { case 0: // minusGreaterLoc value_ = ast->minusGreaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{132}; + slotNameIndex_ = SlotNameIndex{133}; break; case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -3899,12 +3934,12 @@ void ASTSlot::visit(LambdaSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -3916,32 +3951,32 @@ void ASTSlot::visit(TypeConstraintAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 3: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{196}; + slotNameIndex_ = SlotNameIndex{197}; break; case 4: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -3953,12 +3988,12 @@ void ASTSlot::visit(AttributeArgumentClauseAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -3980,7 +4015,7 @@ void ASTSlot::visit(AttributeAST* ast) { case 2: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; } // switch @@ -3992,7 +4027,7 @@ void ASTSlot::visit(AttributeUsingPrefixAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // attributeNamespaceLoc value_ = ast->attributeNamespaceLoc.index(); @@ -4014,17 +4049,17 @@ void ASTSlot::visit(NewPlacementAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4036,27 +4071,27 @@ void ASTSlot::visit(NestedNamespaceSpecifierAST* ast) { case 0: // inlineLoc value_ = ast->inlineLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{107}; + slotNameIndex_ = SlotNameIndex{108}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 4: // isInline value_ = std::intptr_t(ast->isInline != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{110}; + slotNameIndex_ = SlotNameIndex{111}; break; } // switch @@ -4068,27 +4103,27 @@ void ASTSlot::visit(TemplateTypeParameterAST* ast) { case 0: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{200}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 4: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{172}; break; case 5: // classKeyLoc value_ = ast->classKeyLoc.index(); @@ -4098,32 +4133,32 @@ void ASTSlot::visit(TemplateTypeParameterAST* ast) { case 6: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 7: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 8: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 9: // idExpression value_ = reinterpret_cast(ast->idExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{96}; + slotNameIndex_ = SlotNameIndex{97}; break; case 10: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 11: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -4152,32 +4187,32 @@ void ASTSlot::visit(TypenameTypeParameterAST* ast) { case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 3: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 6: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -4189,32 +4224,32 @@ void ASTSlot::visit(ConstraintTypeParameterAST* ast) { case 0: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{208}; + slotNameIndex_ = SlotNameIndex{209}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 3: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -4226,7 +4261,7 @@ void ASTSlot::visit(GeneratedTypeSpecifierAST* ast) { case 0: // typeLoc value_ = ast->typeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{212}; break; } // switch @@ -4238,7 +4273,7 @@ void ASTSlot::visit(TypedefSpecifierAST* ast) { case 0: // typedefLoc value_ = ast->typedefLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{215}; + slotNameIndex_ = SlotNameIndex{216}; break; } // switch @@ -4250,7 +4285,7 @@ void ASTSlot::visit(FriendSpecifierAST* ast) { case 0: // friendLoc value_ = ast->friendLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{85}; + slotNameIndex_ = SlotNameIndex{86}; break; } // switch @@ -4298,7 +4333,7 @@ void ASTSlot::visit(InlineSpecifierAST* ast) { case 0: // inlineLoc value_ = ast->inlineLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{107}; + slotNameIndex_ = SlotNameIndex{108}; break; } // switch @@ -4310,7 +4345,7 @@ void ASTSlot::visit(StaticSpecifierAST* ast) { case 0: // staticLoc value_ = ast->staticLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{191}; break; } // switch @@ -4322,7 +4357,7 @@ void ASTSlot::visit(ExternSpecifierAST* ast) { case 0: // externLoc value_ = ast->externLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{79}; + slotNameIndex_ = SlotNameIndex{80}; break; } // switch @@ -4334,7 +4369,7 @@ void ASTSlot::visit(ThreadLocalSpecifierAST* ast) { case 0: // threadLocalLoc value_ = ast->threadLocalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{203}; + slotNameIndex_ = SlotNameIndex{204}; break; } // switch @@ -4346,7 +4381,7 @@ void ASTSlot::visit(ThreadSpecifierAST* ast) { case 0: // threadLoc value_ = ast->threadLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{202}; + slotNameIndex_ = SlotNameIndex{203}; break; } // switch @@ -4358,7 +4393,7 @@ void ASTSlot::visit(MutableSpecifierAST* ast) { case 0: // mutableLoc value_ = ast->mutableLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{138}; + slotNameIndex_ = SlotNameIndex{139}; break; } // switch @@ -4370,7 +4405,7 @@ void ASTSlot::visit(VirtualSpecifierAST* ast) { case 0: // virtualLoc value_ = ast->virtualLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{224}; break; } // switch @@ -4382,22 +4417,22 @@ void ASTSlot::visit(ExplicitSpecifierAST* ast) { case 0: // explicitLoc value_ = ast->explicitLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{74}; + slotNameIndex_ = SlotNameIndex{75}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4421,7 +4456,7 @@ void ASTSlot::visit(VoidTypeSpecifierAST* ast) { case 0: // voidLoc value_ = ast->voidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{225}; + slotNameIndex_ = SlotNameIndex{226}; break; } // switch @@ -4433,12 +4468,12 @@ void ASTSlot::visit(SizeTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4450,12 +4485,12 @@ void ASTSlot::visit(SignTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4467,12 +4502,12 @@ void ASTSlot::visit(VaListTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4484,12 +4519,12 @@ void ASTSlot::visit(IntegralTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4501,12 +4536,12 @@ void ASTSlot::visit(FloatingPointTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // specifier value_ = std::intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4530,22 +4565,22 @@ void ASTSlot::visit(NamedTypeSpecifierAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -4562,17 +4597,17 @@ void ASTSlot::visit(AtomicTypeSpecifierAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4584,22 +4619,22 @@ void ASTSlot::visit(UnderlyingTypeSpecifierAST* ast) { case 0: // underlyingTypeLoc value_ = ast->underlyingTypeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{218}; + slotNameIndex_ = SlotNameIndex{219}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4621,17 +4656,17 @@ void ASTSlot::visit(ElaboratedTypeSpecifierAST* ast) { case 2: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 3: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // classKey value_ = std::intptr_t(ast->classKey); @@ -4641,7 +4676,7 @@ void ASTSlot::visit(ElaboratedTypeSpecifierAST* ast) { case 6: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -4658,7 +4693,7 @@ void ASTSlot::visit(DecltypeAutoSpecifierAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // autoLoc value_ = ast->autoLoc.index(); @@ -4668,7 +4703,7 @@ void ASTSlot::visit(DecltypeAutoSpecifierAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4685,17 +4720,17 @@ void ASTSlot::visit(DecltypeSpecifierAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -4707,12 +4742,12 @@ void ASTSlot::visit(PlaceholderTypeSpecifierAST* ast) { case 0: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{208}; + slotNameIndex_ = SlotNameIndex{209}; break; case 1: // specifier value_ = reinterpret_cast(ast->specifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{184}; break; } // switch @@ -4736,7 +4771,7 @@ void ASTSlot::visit(VolatileQualifierAST* ast) { case 0: // volatileLoc value_ = ast->volatileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{226}; + slotNameIndex_ = SlotNameIndex{227}; break; } // switch @@ -4748,7 +4783,7 @@ void ASTSlot::visit(RestrictQualifierAST* ast) { case 0: // restrictLoc value_ = ast->restrictLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{173}; + slotNameIndex_ = SlotNameIndex{174}; break; } // switch @@ -4760,7 +4795,7 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 0: // enumLoc value_ = ast->enumLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{67}; + slotNameIndex_ = SlotNameIndex{68}; break; case 1: // classLoc value_ = ast->classLoc.index(); @@ -4775,12 +4810,12 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 3: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // colonLoc value_ = ast->colonLoc.index(); @@ -4790,17 +4825,17 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 6: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 7: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 8: // enumeratorList value_ = reinterpret_cast(ast->enumeratorList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{69}; + slotNameIndex_ = SlotNameIndex{70}; break; case 9: // commaLoc value_ = ast->commaLoc.index(); @@ -4810,7 +4845,7 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 10: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; } // switch @@ -4832,17 +4867,17 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 2: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // finalLoc value_ = ast->finalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{81}; + slotNameIndex_ = SlotNameIndex{82}; break; case 5: // colonLoc value_ = ast->colonLoc.index(); @@ -4857,7 +4892,7 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 7: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 8: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -4867,7 +4902,7 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 9: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; case 10: // classKey value_ = std::intptr_t(ast->classKey); @@ -4877,7 +4912,7 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 11: // isFinal value_ = std::intptr_t(ast->isFinal != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{109}; + slotNameIndex_ = SlotNameIndex{110}; break; } // switch @@ -4889,27 +4924,27 @@ void ASTSlot::visit(TypenameSpecifierAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{217}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 2: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -4921,12 +4956,12 @@ void ASTSlot::visit(SplicerTypeSpecifierAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{217}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // splicer value_ = reinterpret_cast(ast->splicer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{185}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -4938,7 +4973,7 @@ void ASTSlot::visit(PointerOperatorAST* ast) { case 0: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -4960,7 +4995,7 @@ void ASTSlot::visit(ReferenceOperatorAST* ast) { case 0: // refLoc value_ = ast->refLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{167}; + slotNameIndex_ = SlotNameIndex{168}; break; case 1: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -4970,7 +5005,7 @@ void ASTSlot::visit(ReferenceOperatorAST* ast) { case 2: // refOp value_ = std::intptr_t(ast->refOp); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{169}; break; } // switch @@ -4982,12 +5017,12 @@ void ASTSlot::visit(PtrToMemberOperatorAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{187}; break; case 2: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5009,7 +5044,7 @@ void ASTSlot::visit(BitfieldDeclaratorAST* ast) { case 0: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 1: // colonLoc value_ = ast->colonLoc.index(); @@ -5019,7 +5054,7 @@ void ASTSlot::visit(BitfieldDeclaratorAST* ast) { case 2: // sizeExpression value_ = reinterpret_cast(ast->sizeExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{181}; + slotNameIndex_ = SlotNameIndex{182}; break; } // switch @@ -5031,7 +5066,7 @@ void ASTSlot::visit(ParameterPackAST* ast) { case 0: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 1: // coreDeclarator value_ = reinterpret_cast(ast->coreDeclarator); @@ -5048,17 +5083,17 @@ void ASTSlot::visit(IdDeclaratorAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5068,7 +5103,7 @@ void ASTSlot::visit(IdDeclaratorAST* ast) { case 4: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -5080,7 +5115,7 @@ void ASTSlot::visit(NestedDeclaratorAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // declarator value_ = reinterpret_cast(ast->declarator); @@ -5090,7 +5125,7 @@ void ASTSlot::visit(NestedDeclaratorAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -5102,17 +5137,17 @@ void ASTSlot::visit(FunctionDeclaratorChunkAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{154}; + slotNameIndex_ = SlotNameIndex{155}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 3: // cvQualifierList value_ = reinterpret_cast(ast->cvQualifierList); @@ -5122,12 +5157,12 @@ void ASTSlot::visit(FunctionDeclaratorChunkAST* ast) { case 4: // refLoc value_ = ast->refLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{167}; + slotNameIndex_ = SlotNameIndex{168}; break; case 5: // exceptionSpecifier value_ = reinterpret_cast(ast->exceptionSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{72}; + slotNameIndex_ = SlotNameIndex{73}; break; case 6: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5137,22 +5172,22 @@ void ASTSlot::visit(FunctionDeclaratorChunkAST* ast) { case 7: // trailingReturnType value_ = reinterpret_cast(ast->trailingReturnType); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{206}; + slotNameIndex_ = SlotNameIndex{207}; break; case 8: // isFinal value_ = std::intptr_t(ast->isFinal != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{109}; + slotNameIndex_ = SlotNameIndex{110}; break; case 9: // isOverride value_ = std::intptr_t(ast->isOverride != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{112}; + slotNameIndex_ = SlotNameIndex{113}; break; case 10: // isPure value_ = std::intptr_t(ast->isPure != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{114}; + slotNameIndex_ = SlotNameIndex{115}; break; } // switch @@ -5164,17 +5199,17 @@ void ASTSlot::visit(ArrayDeclaratorChunkAST* ast) { case 0: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 3: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5191,12 +5226,12 @@ void ASTSlot::visit(NameIdAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5208,12 +5243,12 @@ void ASTSlot::visit(DestructorIdAST* ast) { case 0: // tildeLoc value_ = ast->tildeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{205}; + slotNameIndex_ = SlotNameIndex{206}; break; case 1: // id value_ = reinterpret_cast(ast->id); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{95}; + slotNameIndex_ = SlotNameIndex{96}; break; } // switch @@ -5237,17 +5272,17 @@ void ASTSlot::visit(OperatorFunctionIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{152}; break; case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{149}; break; case 2: // openLoc value_ = ast->openLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{149}; + slotNameIndex_ = SlotNameIndex{150}; break; case 3: // closeLoc value_ = ast->closeLoc.index(); @@ -5257,7 +5292,7 @@ void ASTSlot::visit(OperatorFunctionIdAST* ast) { case 4: // op value_ = std::intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{148}; break; } // switch @@ -5269,27 +5304,27 @@ void ASTSlot::visit(LiteralOperatorIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{152}; break; case 1: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 3: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; case 4: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5301,12 +5336,12 @@ void ASTSlot::visit(ConversionFunctionIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{152}; break; case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -5318,27 +5353,27 @@ void ASTSlot::visit(SimpleTemplateIdAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{196}; + slotNameIndex_ = SlotNameIndex{197}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; case 4: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5350,22 +5385,22 @@ void ASTSlot::visit(LiteralOperatorTemplateIdAST* ast) { case 0: // literalOperatorId value_ = reinterpret_cast(ast->literalOperatorId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{128}; + slotNameIndex_ = SlotNameIndex{129}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{196}; + slotNameIndex_ = SlotNameIndex{197}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; } // switch @@ -5377,22 +5412,22 @@ void ASTSlot::visit(OperatorFunctionTemplateIdAST* ast) { case 0: // operatorFunctionId value_ = reinterpret_cast(ast->operatorFunctionId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{150}; + slotNameIndex_ = SlotNameIndex{151}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{125}; + slotNameIndex_ = SlotNameIndex{126}; break; case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{196}; + slotNameIndex_ = SlotNameIndex{197}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{92}; + slotNameIndex_ = SlotNameIndex{93}; break; } // switch @@ -5404,7 +5439,7 @@ void ASTSlot::visit(GlobalNestedNameSpecifierAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; } // switch @@ -5416,22 +5451,22 @@ void ASTSlot::visit(SimpleNestedNameSpecifierAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; case 3: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; } // switch @@ -5448,7 +5483,7 @@ void ASTSlot::visit(DecltypeNestedNameSpecifierAST* ast) { case 1: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; } // switch @@ -5460,27 +5495,27 @@ void ASTSlot::visit(TemplateNestedNameSpecifierAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 2: // templateId value_ = reinterpret_cast(ast->templateId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{197}; + slotNameIndex_ = SlotNameIndex{198}; break; case 3: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; case 4: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -5492,7 +5527,7 @@ void ASTSlot::visit(DefaultFunctionBodyAST* ast) { case 0: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 1: // defaultLoc value_ = ast->defaultLoc.index(); @@ -5502,7 +5537,7 @@ void ASTSlot::visit(DefaultFunctionBodyAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5519,12 +5554,12 @@ void ASTSlot::visit(CompoundStatementFunctionBodyAST* ast) { case 1: // memInitializerList value_ = reinterpret_cast(ast->memInitializerList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{131}; + slotNameIndex_ = SlotNameIndex{132}; break; case 2: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; } // switch @@ -5536,7 +5571,7 @@ void ASTSlot::visit(TryStatementFunctionBodyAST* ast) { case 0: // tryLoc value_ = ast->tryLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{207}; + slotNameIndex_ = SlotNameIndex{208}; break; case 1: // colonLoc value_ = ast->colonLoc.index(); @@ -5546,17 +5581,17 @@ void ASTSlot::visit(TryStatementFunctionBodyAST* ast) { case 2: // memInitializerList value_ = reinterpret_cast(ast->memInitializerList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{131}; + slotNameIndex_ = SlotNameIndex{132}; break; case 3: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{188}; break; case 4: // handlerList value_ = reinterpret_cast(ast->handlerList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{93}; + slotNameIndex_ = SlotNameIndex{94}; break; } // switch @@ -5568,7 +5603,7 @@ void ASTSlot::visit(DeleteFunctionBodyAST* ast) { case 0: // equalLoc value_ = ast->equalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{70}; + slotNameIndex_ = SlotNameIndex{71}; break; case 1: // deleteLoc value_ = ast->deleteLoc.index(); @@ -5578,7 +5613,7 @@ void ASTSlot::visit(DeleteFunctionBodyAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5590,7 +5625,7 @@ void ASTSlot::visit(TypeTemplateArgumentAST* ast) { case 0: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -5602,7 +5637,7 @@ void ASTSlot::visit(ExpressionTemplateArgumentAST* ast) { case 0: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; } // switch @@ -5614,17 +5649,17 @@ void ASTSlot::visit(ThrowExceptionSpecifierAST* ast) { case 0: // throwLoc value_ = ast->throwLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{204}; + slotNameIndex_ = SlotNameIndex{205}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -5636,22 +5671,22 @@ void ASTSlot::visit(NoexceptSpecifierAST* ast) { case 0: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{145}; + slotNameIndex_ = SlotNameIndex{146}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -5663,12 +5698,12 @@ void ASTSlot::visit(SimpleRequirementAST* ast) { case 0: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5680,37 +5715,37 @@ void ASTSlot::visit(CompoundRequirementAST* ast) { case 0: // lbraceLoc value_ = ast->lbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{121}; + slotNameIndex_ = SlotNameIndex{122}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{165}; break; case 3: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{145}; + slotNameIndex_ = SlotNameIndex{146}; break; case 4: // minusGreaterLoc value_ = ast->minusGreaterLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{132}; + slotNameIndex_ = SlotNameIndex{133}; break; case 5: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{208}; + slotNameIndex_ = SlotNameIndex{209}; break; case 6: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5722,32 +5757,32 @@ void ASTSlot::visit(TypeRequirementAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{217}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 2: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{199}; break; case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // isTemplateIntroduced value_ = std::intptr_t(ast->isTemplateIntroduced != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{115}; + slotNameIndex_ = SlotNameIndex{116}; break; } // switch @@ -5759,17 +5794,17 @@ void ASTSlot::visit(NestedRequirementAST* ast) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{172}; + slotNameIndex_ = SlotNameIndex{173}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5781,17 +5816,17 @@ void ASTSlot::visit(NewParenInitializerAST* ast) { case 0: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 1: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; } // switch @@ -5815,32 +5850,32 @@ void ASTSlot::visit(ParenMemInitializerAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 2: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 3: // expressionList value_ = reinterpret_cast(ast->expressionList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{78}; + slotNameIndex_ = SlotNameIndex{79}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; } // switch @@ -5852,12 +5887,12 @@ void ASTSlot::visit(BracedMemInitializerAST* ast) { case 0: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{140}; + slotNameIndex_ = SlotNameIndex{141}; break; case 1: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{220}; break; case 2: // bracedInitList value_ = reinterpret_cast(ast->bracedInitList); @@ -5867,7 +5902,7 @@ void ASTSlot::visit(BracedMemInitializerAST* ast) { case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; } // switch @@ -5879,7 +5914,7 @@ void ASTSlot::visit(ThisLambdaCaptureAST* ast) { case 0: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -5891,12 +5926,12 @@ void ASTSlot::visit(DerefThisLambdaCaptureAST* ast) { case 0: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -5908,17 +5943,17 @@ void ASTSlot::visit(SimpleLambdaCaptureAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5935,17 +5970,17 @@ void ASTSlot::visit(RefLambdaCaptureAST* ast) { case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5962,22 +5997,22 @@ void ASTSlot::visit(RefInitLambdaCaptureAST* ast) { case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 3: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 4: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -5989,22 +6024,22 @@ void ASTSlot::visit(InitLambdaCaptureAST* ast) { case 0: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{106}; + slotNameIndex_ = SlotNameIndex{107}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -6016,7 +6051,7 @@ void ASTSlot::visit(EllipsisExceptionDeclarationAST* ast) { case 0: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; } // switch @@ -6033,7 +6068,7 @@ void ASTSlot::visit(TypeExceptionDeclarationAST* ast) { case 1: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{214}; break; case 2: // declarator value_ = reinterpret_cast(ast->declarator); @@ -6050,12 +6085,12 @@ void ASTSlot::visit(CxxAttributeAST* ast) { case 0: // lbracketLoc value_ = ast->lbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{123}; + slotNameIndex_ = SlotNameIndex{124}; break; case 1: // lbracket2Loc value_ = ast->lbracket2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{122}; + slotNameIndex_ = SlotNameIndex{123}; break; case 2: // attributeUsingPrefix value_ = reinterpret_cast(ast->attributeUsingPrefix); @@ -6070,12 +6105,12 @@ void ASTSlot::visit(CxxAttributeAST* ast) { case 4: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{167}; break; case 5: // rbracket2Loc value_ = ast->rbracket2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{165}; + slotNameIndex_ = SlotNameIndex{166}; break; } // switch @@ -6092,22 +6127,22 @@ void ASTSlot::visit(GccAttributeAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // lparen2Loc value_ = ast->lparen2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{129}; + slotNameIndex_ = SlotNameIndex{130}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 4: // rparen2Loc value_ = ast->rparen2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{177}; break; } // switch @@ -6124,27 +6159,27 @@ void ASTSlot::visit(AlignasAttributeAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // expression value_ = reinterpret_cast(ast->expression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{77}; + slotNameIndex_ = SlotNameIndex{78}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -6161,27 +6196,27 @@ void ASTSlot::visit(AlignasTypeAttributeAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{63}; + slotNameIndex_ = SlotNameIndex{64}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 5: // isPack value_ = std::intptr_t(ast->isPack != 0); slotKind_ = ASTSlotKind::kBoolAttribute; - slotNameIndex_ = SlotNameIndex{113}; + slotNameIndex_ = SlotNameIndex{114}; break; } // switch @@ -6198,22 +6233,22 @@ void ASTSlot::visit(AsmAttributeAST* ast) { case 1: // lparenLoc value_ = ast->lparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{130}; + slotNameIndex_ = SlotNameIndex{131}; break; case 2: // literalLoc value_ = ast->literalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{127}; + slotNameIndex_ = SlotNameIndex{128}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{178}; break; case 4: // literal value_ = reinterpret_cast(ast->literal); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{126}; + slotNameIndex_ = SlotNameIndex{127}; break; } // switch @@ -6230,12 +6265,12 @@ void ASTSlot::visit(ScopedAttributeTokenAST* ast) { case 1: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{179}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 3: // attributeNamespace value_ = reinterpret_cast(ast->attributeNamespace); @@ -6245,7 +6280,7 @@ void ASTSlot::visit(ScopedAttributeTokenAST* ast) { case 4: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch @@ -6257,12 +6292,12 @@ void ASTSlot::visit(SimpleAttributeTokenAST* ast) { case 0: // identifierLoc value_ = ast->identifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{98}; + slotNameIndex_ = SlotNameIndex{99}; break; case 1: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{97}; + slotNameIndex_ = SlotNameIndex{98}; break; } // switch diff --git a/src/parser/cxx/ast_slot.h b/src/parser/cxx/ast_slot.h index 91f06a97..08de9a48 100644 --- a/src/parser/cxx/ast_slot.h +++ b/src/parser/cxx/ast_slot.h @@ -166,6 +166,9 @@ class ASTSlot final : ASTVisitor { void visit(BracedInitListAST* ast) override; void visit(ParenInitializerAST* ast) override; + void visit(DotDesignatorAST* ast) override; + void visit(SubscriptDesignatorAST* ast) override; + void visit(SplicerAST* ast) override; void visit(GlobalModuleFragmentAST* ast) override; void visit(PrivateModuleFragmentAST* ast) override; diff --git a/src/parser/cxx/ast_visitor.cc b/src/parser/cxx/ast_visitor.cc index 749e2ae7..4cd8aa3b 100644 --- a/src/parser/cxx/ast_visitor.cc +++ b/src/parser/cxx/ast_visitor.cc @@ -526,6 +526,9 @@ void ASTVisitor::visit(PackExpansionExpressionAST* ast) { } void ASTVisitor::visit(DesignatedInitializerClauseAST* ast) { + for (auto node : ListView{ast->designatorList}) { + accept(node); + } accept(ast->initializer); } @@ -560,6 +563,10 @@ void ASTVisitor::visit(ParenInitializerAST* ast) { } } +void ASTVisitor::visit(DotDesignatorAST* ast) {} + +void ASTVisitor::visit(SubscriptDesignatorAST* ast) { accept(ast->expression); } + void ASTVisitor::visit(SplicerAST* ast) { accept(ast->expression); } void ASTVisitor::visit(GlobalModuleFragmentAST* ast) { diff --git a/src/parser/cxx/ast_visitor.h b/src/parser/cxx/ast_visitor.h index 0d0a57ca..706a9052 100644 --- a/src/parser/cxx/ast_visitor.h +++ b/src/parser/cxx/ast_visitor.h @@ -150,6 +150,10 @@ class ASTVisitor { virtual void visit(BracedInitListAST* ast); virtual void visit(ParenInitializerAST* ast); + // DesignatorAST + virtual void visit(DotDesignatorAST* ast); + virtual void visit(SubscriptDesignatorAST* ast); + // AST virtual void visit(SplicerAST* ast); virtual void visit(GlobalModuleFragmentAST* ast); diff --git a/src/parser/cxx/flatbuffers/ast_decoder.cc b/src/parser/cxx/flatbuffers/ast_decoder.cc index 970c7699..97bab4e3 100644 --- a/src/parser/cxx/flatbuffers/ast_decoder.cc +++ b/src/parser/cxx/flatbuffers/ast_decoder.cc @@ -396,6 +396,20 @@ auto ASTDecoder::decodeExpression(const void* ptr, io::Expression type) } // switch } +auto ASTDecoder::decodeDesignator(const void* ptr, io::Designator type) + -> DesignatorAST* { + switch (type) { + case io::Designator_DotDesignator: + return decodeDotDesignator( + reinterpret_cast(ptr)); + case io::Designator_SubscriptDesignator: + return decodeSubscriptDesignator( + reinterpret_cast(ptr)); + default: + return nullptr; + } // switch +} + auto ASTDecoder::decodeTemplateParameter(const void* ptr, io::TemplateParameter type) -> TemplateParameterAST* { @@ -2559,11 +2573,14 @@ auto ASTDecoder::decodeDesignatedInitializerClause( if (!node) return nullptr; auto ast = new (pool_) DesignatedInitializerClauseAST(); - ast->dotLoc = SourceLocation(node->dot_loc()); - ast->identifierLoc = SourceLocation(node->identifier_loc()); - if (node->identifier()) { - ast->identifier = - unit_->control()->getIdentifier(node->identifier()->str()); + if (node->designator_list()) { + auto* inserter = &ast->designatorList; + for (std::uint32_t i = 0; i < node->designator_list()->size(); ++i) { + *inserter = new (pool_) List(decodeDesignator( + node->designator_list()->Get(i), + io::Designator(node->designator_list_type()->Get(i)))); + inserter = &(*inserter)->next; + } } ast->initializer = decodeExpression(node->initializer(), node->initializer_type()); @@ -2667,6 +2684,32 @@ auto ASTDecoder::decodeParenInitializer(const io::ParenInitializer* node) return ast; } +auto ASTDecoder::decodeDotDesignator(const io::DotDesignator* node) + -> DotDesignatorAST* { + if (!node) return nullptr; + + auto ast = new (pool_) DotDesignatorAST(); + ast->dotLoc = SourceLocation(node->dot_loc()); + ast->identifierLoc = SourceLocation(node->identifier_loc()); + if (node->identifier()) { + ast->identifier = + unit_->control()->getIdentifier(node->identifier()->str()); + } + return ast; +} + +auto ASTDecoder::decodeSubscriptDesignator(const io::SubscriptDesignator* node) + -> SubscriptDesignatorAST* { + if (!node) return nullptr; + + auto ast = new (pool_) SubscriptDesignatorAST(); + ast->lbracketLoc = SourceLocation(node->lbracket_loc()); + ast->expression = + decodeExpression(node->expression(), node->expression_type()); + ast->rbracketLoc = SourceLocation(node->rbracket_loc()); + return ast; +} + auto ASTDecoder::decodeSplicer(const io::Splicer* node) -> SplicerAST* { if (!node) return nullptr; diff --git a/src/parser/cxx/flatbuffers/ast_encoder.cc b/src/parser/cxx/flatbuffers/ast_encoder.cc index 8496feba..f23049ea 100644 --- a/src/parser/cxx/flatbuffers/ast_encoder.cc +++ b/src/parser/cxx/flatbuffers/ast_encoder.cc @@ -151,6 +151,19 @@ auto ASTEncoder::acceptExpression(ExpressionAST* ast) return {offset, type}; } +auto ASTEncoder::acceptDesignator(DesignatorAST* ast) + -> std::tuple, std::uint32_t> { + if (!ast) return {}; + flatbuffers::Offset<> offset; + std::uint32_t type = 0; + std::swap(offset, offset_); + std::swap(type, type_); + ast->accept(this); + std::swap(offset, offset_); + std::swap(type, type_); + return {offset, type}; +} + auto ASTEncoder::acceptTemplateParameter(TemplateParameterAST* ast) -> std::tuple, std::uint32_t> { if (!ast) return {}; @@ -2746,25 +2759,25 @@ void ASTEncoder::visit(PackExpansionExpressionAST* ast) { } void ASTEncoder::visit(DesignatedInitializerClauseAST* ast) { - flatbuffers::Offset identifier; - if (ast->identifier) { - if (identifiers_.contains(ast->identifier)) { - identifier = identifiers_.at(ast->identifier); - } else { - identifier = fbb_.CreateString(ast->identifier->value()); - identifiers_.emplace(ast->identifier, identifier); - } + std::vector> designatorListOffsets; + std::vector> designatorListTypes; + + for (auto node : ListView{ast->designatorList}) { + if (!node) continue; + const auto [offset, type] = acceptDesignator(node); + designatorListOffsets.push_back(offset); + designatorListTypes.push_back(type); } + auto designatorListOffsetsVector = fbb_.CreateVector(designatorListOffsets); + auto designatorListTypesVector = fbb_.CreateVector(designatorListTypes); + const auto [initializer, initializerType] = acceptExpression(ast->initializer); io::DesignatedInitializerClause::Builder builder{fbb_}; - builder.add_dot_loc(ast->dotLoc.index()); - builder.add_identifier_loc(ast->identifierLoc.index()); - if (ast->identifier) { - builder.add_identifier(identifier); - } + builder.add_designator_list(designatorListOffsetsVector); + builder.add_designator_list_type(designatorListTypesVector); builder.add_initializer(initializer); builder.add_initializer_type(static_cast(initializerType)); @@ -2899,6 +2912,41 @@ void ASTEncoder::visit(ParenInitializerAST* ast) { type_ = io::Expression_ParenInitializer; } +void ASTEncoder::visit(DotDesignatorAST* ast) { + flatbuffers::Offset identifier; + if (ast->identifier) { + if (identifiers_.contains(ast->identifier)) { + identifier = identifiers_.at(ast->identifier); + } else { + identifier = fbb_.CreateString(ast->identifier->value()); + identifiers_.emplace(ast->identifier, identifier); + } + } + + io::DotDesignator::Builder builder{fbb_}; + builder.add_dot_loc(ast->dotLoc.index()); + builder.add_identifier_loc(ast->identifierLoc.index()); + if (ast->identifier) { + builder.add_identifier(identifier); + } + + offset_ = builder.Finish().Union(); + type_ = io::Designator_DotDesignator; +} + +void ASTEncoder::visit(SubscriptDesignatorAST* ast) { + const auto [expression, expressionType] = acceptExpression(ast->expression); + + io::SubscriptDesignator::Builder builder{fbb_}; + builder.add_lbracket_loc(ast->lbracketLoc.index()); + builder.add_expression(expression); + builder.add_expression_type(static_cast(expressionType)); + builder.add_rbracket_loc(ast->rbracketLoc.index()); + + offset_ = builder.Finish().Union(); + type_ = io::Designator_SubscriptDesignator; +} + void ASTEncoder::visit(SplicerAST* ast) { const auto [expression, expressionType] = acceptExpression(ast->expression); diff --git a/src/parser/cxx/parser.cc b/src/parser/cxx/parser.cc index 16702158..72f91627 100644 --- a/src/parser/cxx/parser.cc +++ b/src/parser/cxx/parser.cc @@ -6020,17 +6020,43 @@ auto Parser::parse_initializer_list(List*& yyast, auto Parser::parse_designated_initializer_clause( DesignatedInitializerClauseAST*& yyast) -> bool { - SourceLocation dotLoc; - if (!match(TokenKind::T_DOT, dotLoc)) return false; - auto ast = make_node(pool_); yyast = ast; - ast->dotLoc = dotLoc; + auto it = &ast->designatorList; - expect(TokenKind::T_IDENTIFIER, ast->identifierLoc); + while (true) { + if (SourceLocation dotLoc; match(TokenKind::T_DOT, dotLoc)) { + auto designator = make_node(pool_); + designator->dotLoc = dotLoc; - ast->identifier = unit->identifier(ast->identifierLoc); + if (lookat(TokenKind::T_IDENTIFIER)) { + expect(TokenKind::T_IDENTIFIER, designator->identifierLoc); + designator->identifier = unit->identifier(designator->identifierLoc); + } else { + parse_error("expected identifier after '.'"); + } + + *it = make_list_node(pool_, designator); + it = &(*it)->next; + } else if (SourceLocation lbracketLoc; + match(TokenKind::T_LBRACKET, lbracketLoc)) { + auto designator = make_node(pool_); + designator->lbracketLoc = lbracketLoc; + + std::optional index; + if (!parse_constant_expression(designator->expression, index)) { + parse_error("expected expression after '['"); + } + + expect(TokenKind::T_RBRACKET, designator->rbracketLoc); + + *it = make_list_node(pool_, designator); + it = &(*it)->next; + } else { + break; + } + } if (!parse_brace_or_equal_initializer(ast->initializer)) { parse_error("expected an initializer"); diff --git a/src/parser/cxx/private/ast_decoder.h b/src/parser/cxx/private/ast_decoder.h index caec31a3..c2f666a9 100644 --- a/src/parser/cxx/private/ast_decoder.h +++ b/src/parser/cxx/private/ast_decoder.h @@ -43,6 +43,7 @@ class ASTDecoder { -> DeclarationAST*; auto decodeStatement(const void* ptr, io::Statement type) -> StatementAST*; auto decodeExpression(const void* ptr, io::Expression type) -> ExpressionAST*; + auto decodeDesignator(const void* ptr, io::Designator type) -> DesignatorAST*; auto decodeTemplateParameter(const void* ptr, io::TemplateParameter type) -> TemplateParameterAST*; auto decodeSpecifier(const void* ptr, io::Specifier type) -> SpecifierAST*; @@ -297,6 +298,10 @@ class ASTDecoder { auto decodeParenInitializer(const io::ParenInitializer* node) -> ParenInitializerAST*; + auto decodeDotDesignator(const io::DotDesignator* node) -> DotDesignatorAST*; + auto decodeSubscriptDesignator(const io::SubscriptDesignator* node) + -> SubscriptDesignatorAST*; + auto decodeSplicer(const io::Splicer* node) -> SplicerAST*; auto decodeGlobalModuleFragment(const io::GlobalModuleFragment* node) -> GlobalModuleFragmentAST*; diff --git a/src/parser/cxx/private/ast_encoder.h b/src/parser/cxx/private/ast_encoder.h index 3040f210..85ac0ad5 100644 --- a/src/parser/cxx/private/ast_encoder.h +++ b/src/parser/cxx/private/ast_encoder.h @@ -70,6 +70,9 @@ class ASTEncoder : ASTVisitor { auto acceptExpression(ExpressionAST* ast) -> std::tuple, std::uint32_t>; + auto acceptDesignator(DesignatorAST* ast) + -> std::tuple, std::uint32_t>; + auto acceptTemplateParameter(TemplateParameterAST* ast) -> std::tuple, std::uint32_t>; @@ -234,6 +237,9 @@ class ASTEncoder : ASTVisitor { void visit(BracedInitListAST* ast) override; void visit(ParenInitializerAST* ast) override; + void visit(DotDesignatorAST* ast) override; + void visit(SubscriptDesignatorAST* ast) override; + void visit(SplicerAST* ast) override; void visit(GlobalModuleFragmentAST* ast) override; void visit(PrivateModuleFragmentAST* ast) override; From 2d5f969f95f87da3c726f3b1dae0d863ac279cdf Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 8 Jul 2025 22:20:42 +0200 Subject: [PATCH 2/3] Parse subscript designators --- packages/cxx-gen-ast/src/new_ast_rewriter.ts | 34 ++++---- src/parser/cxx/ast_rewriter.cc | 54 ++++++++++++- src/parser/cxx/ast_rewriter.h | 2 + src/parser/cxx/parser.cc | 78 ++++++++++++------- src/parser/cxx/parser.h | 4 + src/parser/cxx/translation_unit.cc | 4 + src/parser/cxx/translation_unit.h | 2 + .../ast/designated_initializer_01.cc | 8 +- tests/unit_tests/ast/reflect_02.cc | 4 +- 9 files changed, 137 insertions(+), 53 deletions(-) diff --git a/packages/cxx-gen-ast/src/new_ast_rewriter.ts b/packages/cxx-gen-ast/src/new_ast_rewriter.ts index bbbe95f9..09af4b03 100644 --- a/packages/cxx-gen-ast/src/new_ast_rewriter.ts +++ b/packages/cxx-gen-ast/src/new_ast_rewriter.ts @@ -1,5 +1,3 @@ -#!/usr/bin/env node - // Copyright (c) 2025 Roberto Raggi // // Permission is hereby granted, free of charge, to any person obtaining a copy @@ -25,12 +23,9 @@ import * as path from "path"; import * as process from "process"; import * as child_process from "child_process"; import { parseAST } from "./parseAST.ts"; - -import { hideBin } from "yargs/helpers"; -import yargs from "yargs"; - import { new_ast_rewriter_h } from "./new_ast_rewriter_h.ts"; import { new_ast_rewriter_cc } from "./new_ast_rewriter_cc.ts"; +import { parseArgs } from "node:util"; const toSnakeName = (name: string) => { const r = name @@ -40,12 +35,7 @@ const toSnakeName = (name: string) => { return r.startsWith("_") ? r.slice(1) : r; }; -interface MainArgs { - name: string; -} - -function main(args: MainArgs) { - const opName = args.name; +function main({ opName }: { opName: string }) { const baseFileName = toSnakeName(opName); const outdir = process.cwd(); @@ -78,11 +68,15 @@ function main(args: MainArgs) { ); } -yargs(hideBin(process.argv)) - .option("name", { - alias: "n", - type: "string", - default: "ASTRewriter", - description: "Name of the new rewriter", - }) - .command("$0", "generate a new rewriter", () => {}, main).argv; +const { values } = parseArgs({ + options: { + name: { + short: "n", + type: "string", + default: "ASTRewriter", + description: "Name of the new rewriter", + }, + }, +}); + +main({ opName: values.name }); diff --git a/src/parser/cxx/ast_rewriter.cc b/src/parser/cxx/ast_rewriter.cc index 969d89b7..3450bae0 100644 --- a/src/parser/cxx/ast_rewriter.cc +++ b/src/parser/cxx/ast_rewriter.cc @@ -380,6 +380,22 @@ struct ASTRewriter::ExpressionVisitor { [[nodiscard]] auto operator()(ParenInitializerAST* ast) -> ExpressionAST*; }; +struct ASTRewriter::DesignatorVisitor { + ASTRewriter& rewrite; + [[nodiscard]] auto translationUnit() const -> TranslationUnit* { + return rewrite.unit_; + } + + [[nodiscard]] auto control() const -> Control* { return rewrite.control(); } + [[nodiscard]] auto arena() const -> Arena* { return rewrite.arena(); } + [[nodiscard]] auto rewriter() const -> ASTRewriter* { return &rewrite; } + [[nodiscard]] auto binder() const -> Binder* { return &rewrite.binder_; } + + [[nodiscard]] auto operator()(DotDesignatorAST* ast) -> DesignatorAST*; + + [[nodiscard]] auto operator()(SubscriptDesignatorAST* ast) -> DesignatorAST*; +}; + struct ASTRewriter::TemplateParameterVisitor { ASTRewriter& rewrite; [[nodiscard]] auto translationUnit() const -> TranslationUnit* { @@ -832,6 +848,11 @@ auto ASTRewriter::operator()(ExpressionAST* ast) -> ExpressionAST* { return expr; } +auto ASTRewriter::operator()(DesignatorAST* ast) -> DesignatorAST* { + if (!ast) return {}; + return visit(DesignatorVisitor{*this}, ast); +} + auto ASTRewriter::operator()(TemplateParameterAST* ast) -> TemplateParameterAST* { if (!ast) return {}; @@ -3191,9 +3212,14 @@ auto ASTRewriter::ExpressionVisitor::operator()( copy->valueCategory = ast->valueCategory; copy->type = ast->type; - copy->dotLoc = ast->dotLoc; - copy->identifierLoc = ast->identifierLoc; - copy->identifier = ast->identifier; + + for (auto designatorList = ©->designatorList; + auto node : ListView{ast->designatorList}) { + auto value = rewrite(node); + *designatorList = make_list_node(arena(), value); + designatorList = &(*designatorList)->next; + } + copy->initializer = rewrite(ast->initializer); return copy; @@ -3309,6 +3335,28 @@ auto ASTRewriter::ExpressionVisitor::operator()(ParenInitializerAST* ast) return copy; } +auto ASTRewriter::DesignatorVisitor::operator()(DotDesignatorAST* ast) + -> DesignatorAST* { + auto copy = make_node(arena()); + + copy->dotLoc = ast->dotLoc; + copy->identifierLoc = ast->identifierLoc; + copy->identifier = ast->identifier; + + return copy; +} + +auto ASTRewriter::DesignatorVisitor::operator()(SubscriptDesignatorAST* ast) + -> DesignatorAST* { + auto copy = make_node(arena()); + + copy->lbracketLoc = ast->lbracketLoc; + copy->expression = rewrite(ast->expression); + copy->rbracketLoc = ast->rbracketLoc; + + return copy; +} + auto ASTRewriter::TemplateParameterVisitor::operator()( TemplateTypeParameterAST* ast) -> TemplateParameterAST* { auto copy = make_node(arena()); diff --git a/src/parser/cxx/ast_rewriter.h b/src/parser/cxx/ast_rewriter.h index 0bf1d4cd..e4c63230 100644 --- a/src/parser/cxx/ast_rewriter.h +++ b/src/parser/cxx/ast_rewriter.h @@ -64,6 +64,7 @@ class ASTRewriter { [[nodiscard]] auto operator()(DeclarationAST* ast) -> DeclarationAST*; [[nodiscard]] auto operator()(StatementAST* ast) -> StatementAST*; [[nodiscard]] auto operator()(ExpressionAST* ast) -> ExpressionAST*; + [[nodiscard]] auto operator()(DesignatorAST* ast) -> DesignatorAST*; [[nodiscard]] auto operator()(TemplateParameterAST* ast) -> TemplateParameterAST*; [[nodiscard]] auto operator()(SpecifierAST* ast) -> SpecifierAST*; @@ -130,6 +131,7 @@ class ASTRewriter { struct DeclarationVisitor; struct StatementVisitor; struct ExpressionVisitor; + struct DesignatorVisitor; struct TemplateParameterVisitor; struct SpecifierVisitor; struct PtrOperatorVisitor; diff --git a/src/parser/cxx/parser.cc b/src/parser/cxx/parser.cc index 72f91627..fa97d43c 100644 --- a/src/parser/cxx/parser.cc +++ b/src/parser/cxx/parser.cc @@ -5922,7 +5922,7 @@ auto Parser::parse_braced_init_list(BracedInitListAST*& ast, ast->lbraceLoc = lbraceLoc; - if (lookat(TokenKind::T_DOT)) { + if (lookat_designator()) { auto it = &ast->expressionList; DesignatedInitializerClauseAST* designatedInitializerClause = nullptr; @@ -6018,6 +6018,47 @@ auto Parser::parse_initializer_list(List*& yyast, return true; } +auto Parser::lookat_designator() -> bool { + if (lookat(TokenKind::T_DOT)) return true; + + if (unit->language() == LanguageKind::kCXX) return false; + + if (lookat(TokenKind::T_LBRACKET)) return true; + + return false; +} + +void Parser::parse_designator(DesignatorAST*& yyast) { + if (lookat(TokenKind::T_DOT)) { + parse_dot_designator(yyast); + } else if (lookat(TokenKind::T_LBRACKET)) { + parse_subscript_designator(yyast); + } +} + +void Parser::parse_dot_designator(DesignatorAST*& yyast) { + auto ast = make_node(pool_); + yyast = ast; + + expect(TokenKind::T_DOT, ast->dotLoc); + expect(TokenKind::T_IDENTIFIER, ast->identifierLoc); + ast->identifier = unit->identifier(ast->identifierLoc); +} + +void Parser::parse_subscript_designator(DesignatorAST*& yyast) { + auto ast = make_node(pool_); + yyast = ast; + + expect(TokenKind::T_LBRACKET, ast->lbracketLoc); + + std::optional index; + if (!parse_constant_expression(ast->expression, index)) { + parse_error("expected expression after '['"); + } + + expect(TokenKind::T_RBRACKET, ast->rbracketLoc); +} + auto Parser::parse_designated_initializer_clause( DesignatedInitializerClauseAST*& yyast) -> bool { auto ast = make_node(pool_); @@ -6025,36 +6066,19 @@ auto Parser::parse_designated_initializer_clause( auto it = &ast->designatorList; - while (true) { - if (SourceLocation dotLoc; match(TokenKind::T_DOT, dotLoc)) { - auto designator = make_node(pool_); - designator->dotLoc = dotLoc; + DesignatorAST* designator = nullptr; + parse_designator(designator); - if (lookat(TokenKind::T_IDENTIFIER)) { - expect(TokenKind::T_IDENTIFIER, designator->identifierLoc); - designator->identifier = unit->identifier(designator->identifierLoc); - } else { - parse_error("expected identifier after '.'"); - } - - *it = make_list_node(pool_, designator); - it = &(*it)->next; - } else if (SourceLocation lbracketLoc; - match(TokenKind::T_LBRACKET, lbracketLoc)) { - auto designator = make_node(pool_); - designator->lbracketLoc = lbracketLoc; - - std::optional index; - if (!parse_constant_expression(designator->expression, index)) { - parse_error("expected expression after '['"); - } + *it = make_list_node(pool_, designator); + it = &(*it)->next; - expect(TokenKind::T_RBRACKET, designator->rbracketLoc); + if (unit->language() == LanguageKind::kC) { + while (lookat_designator()) { + DesignatorAST* designator = nullptr; + parse_designator(designator); - *it = make_list_node(pool_, designator); + *it = make_list_node(pool_, designator); it = &(*it)->next; - } else { - break; } } diff --git a/src/parser/cxx/parser.h b/src/parser/cxx/parser.h index afeaaeaf..b48e63fa 100644 --- a/src/parser/cxx/parser.h +++ b/src/parser/cxx/parser.h @@ -535,6 +535,10 @@ class Parser final { const ExprContext& ctx) -> bool; [[nodiscard]] auto parse_designated_initializer_clause( DesignatedInitializerClauseAST*& yyast) -> bool; + [[nodiscard]] auto lookat_designator() -> bool; + void parse_designator(DesignatorAST*& yyast); + void parse_dot_designator(DesignatorAST*& yyast); + void parse_subscript_designator(DesignatorAST*& yyast); void parse_expr_or_braced_init_list(ExpressionAST*& yyast, const ExprContext& ctx); void parse_virt_specifier_seq(FunctionDeclaratorChunkAST* functionDeclarator); diff --git a/src/parser/cxx/translation_unit.cc b/src/parser/cxx/translation_unit.cc index 29a73791..9103ac98 100644 --- a/src/parser/cxx/translation_unit.cc +++ b/src/parser/cxx/translation_unit.cc @@ -175,6 +175,10 @@ void TranslationUnit::parse(ParserConfiguration config) { parse(ast_); } +auto TranslationUnit::language() const -> LanguageKind { + return preprocessor_->language(); +} + auto TranslationUnit::config() const -> const ParserConfiguration& { return config_; } diff --git a/src/parser/cxx/translation_unit.h b/src/parser/cxx/translation_unit.h index 97e4fca1..5759ded2 100644 --- a/src/parser/cxx/translation_unit.h +++ b/src/parser/cxx/translation_unit.h @@ -66,6 +66,8 @@ class TranslationUnit { return preprocessor_.get(); } + [[nodiscard]] auto language() const -> LanguageKind; + void parse(ParserConfiguration config = {}); [[nodiscard]] auto config() const -> const ParserConfiguration&; diff --git a/tests/unit_tests/ast/designated_initializer_01.cc b/tests/unit_tests/ast/designated_initializer_01.cc index 74933980..6981adb1 100644 --- a/tests/unit_tests/ast/designated_initializer_01.cc +++ b/tests/unit_tests/ast/designated_initializer_01.cc @@ -57,12 +57,16 @@ auto pair = Pair{ // CHECK-NEXT: braced-init-list: braced-init-list // CHECK-NEXT: expression-list // CHECK-NEXT: designated-initializer-clause -// CHECK-NEXT: identifier: first +// CHECK-NEXT: designator-list +// CHECK-NEXT: dot-designator +// CHECK-NEXT: identifier: first // CHECK-NEXT: initializer: equal-initializer [prvalue int] // CHECK-NEXT: expression: int-literal-expression [prvalue int] // CHECK-NEXT: literal: 1 // CHECK-NEXT: designated-initializer-clause -// CHECK-NEXT: identifier: second +// CHECK-NEXT: designator-list +// CHECK-NEXT: dot-designator +// CHECK-NEXT: identifier: second // CHECK-NEXT: initializer: equal-initializer [prvalue int] // CHECK-NEXT: expression: int-literal-expression [prvalue int] // CHECK-NEXT: literal: 2 diff --git a/tests/unit_tests/ast/reflect_02.cc b/tests/unit_tests/ast/reflect_02.cc index edd4aece..7623bf84 100644 --- a/tests/unit_tests/ast/reflect_02.cc +++ b/tests/unit_tests/ast/reflect_02.cc @@ -55,7 +55,9 @@ auto main() -> int { return S{.x = 10}.[:^S::x:]; } // CHECK-NEXT: braced-init-list: braced-init-list // CHECK-NEXT: expression-list // CHECK-NEXT: designated-initializer-clause -// CHECK-NEXT: identifier: x +// CHECK-NEXT: designator-list +// CHECK-NEXT: dot-designator +// CHECK-NEXT: identifier: x // CHECK-NEXT: initializer: equal-initializer [prvalue int] // CHECK-NEXT: expression: int-literal-expression [prvalue int] // CHECK-NEXT: literal: 10 From 5a320a5c23ad018da2523c30e9072092054186d6 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Tue, 8 Jul 2025 22:43:09 +0200 Subject: [PATCH 3/3] Exclude fold expressions and for range loops in C mode --- packages/cxx-gen-ast/src/tokens.ts | 2 ++ src/parser/cxx/parser.cc | 18 ++++++++++++---- src/parser/cxx/parser.h | 3 +++ src/parser/cxx/private/c_keywords-priv.h | 26 ++++++++++++++++++++++++ src/parser/cxx/token_fwd.h | 4 ++-- 5 files changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/cxx-gen-ast/src/tokens.ts b/packages/cxx-gen-ast/src/tokens.ts index 425a657f..5dc8c861 100644 --- a/packages/cxx-gen-ast/src/tokens.ts +++ b/packages/cxx-gen-ast/src/tokens.ts @@ -365,6 +365,8 @@ export const C_TOKEN_ALIASES = { _Bool: "BOOL", _Static_assert: "STATIC_ASSERT", _Thread_local: "THREAD_LOCAL", + __typeof__: "typeof", + __typeof: "typeof", }; export const C_AND_CXX_KEYWORDS = Array.from( diff --git a/src/parser/cxx/parser.cc b/src/parser/cxx/parser.cc index fa97d43c..04be114b 100644 --- a/src/parser/cxx/parser.cc +++ b/src/parser/cxx/parser.cc @@ -246,6 +246,14 @@ auto Parser::prec(TokenKind tk) -> Parser::Prec { } // switch } +auto Parser::is_c() const -> bool { + return unit->language() == LanguageKind::kC; +} + +auto Parser::is_cxx() const -> bool { + return unit->language() == LanguageKind::kCXX; +} + auto Parser::LA(int n) const -> const Token& { return unit->tokenAt(SourceLocation(cursor_ + n)); } @@ -1462,6 +1470,8 @@ auto Parser::parse_nested_expession(ExpressionAST*& yyast, auto Parser::parse_fold_expression(ExpressionAST*& yyast, const ExprContext& ctx) -> bool { + if (!is_cxx()) return false; + if (!lookat(TokenKind::T_LPAREN)) return false; if (parse_left_fold_expression(yyast, ctx)) return true; @@ -3513,6 +3523,8 @@ auto Parser::parse_for_statement(StatementAST*& yyast) -> bool { SourceLocation colonLoc; auto lookat_for_range_declaration = [&] { + if (!is_cxx()) return false; + LookaheadParser lookahead{this}; if (!parse_for_range_declaration(rangeDeclaration)) return false; @@ -6021,9 +6033,7 @@ auto Parser::parse_initializer_list(List*& yyast, auto Parser::lookat_designator() -> bool { if (lookat(TokenKind::T_DOT)) return true; - if (unit->language() == LanguageKind::kCXX) return false; - - if (lookat(TokenKind::T_LBRACKET)) return true; + if (is_c() && lookat(TokenKind::T_LBRACKET)) return true; return false; } @@ -6072,7 +6082,7 @@ auto Parser::parse_designated_initializer_clause( *it = make_list_node(pool_, designator); it = &(*it)->next; - if (unit->language() == LanguageKind::kC) { + if (is_c()) { while (lookat_designator()) { DesignatorAST* designator = nullptr; parse_designator(designator); diff --git a/src/parser/cxx/parser.h b/src/parser/cxx/parser.h index b48e63fa..003f3256 100644 --- a/src/parser/cxx/parser.h +++ b/src/parser/cxx/parser.h @@ -739,6 +739,9 @@ class Parser final { [[nodiscard]] auto parse_identifier_list(List*& yyast) -> bool; private: + [[nodiscard]] auto is_c() const -> bool; + [[nodiscard]] auto is_cxx() const -> bool; + [[nodiscard]] auto lookat(auto... tokens) { return lookatHelper(0, tokens...); } diff --git a/src/parser/cxx/private/c_keywords-priv.h b/src/parser/cxx/private/c_keywords-priv.h index 06ec4eb8..57fa821c 100644 --- a/src/parser/cxx/private/c_keywords-priv.h +++ b/src/parser/cxx/private/c_keywords-priv.h @@ -620,6 +620,16 @@ static inline auto classifyC8(const char* s) -> cxx::TokenKind { } } } + } else if (s[3] == 'y') { + if (s[4] == 'p') { + if (s[5] == 'e') { + if (s[6] == 'o') { + if (s[7] == 'f') { + return cxx::TokenKind::T___TYPEOF; + } + } + } + } } } } else if (s[1] == 'A') { @@ -777,6 +787,22 @@ static inline auto classifyC10(const char* s) -> cxx::TokenKind { } } } + } else if (s[2] == 't') { + if (s[3] == 'y') { + if (s[4] == 'p') { + if (s[5] == 'e') { + if (s[6] == 'o') { + if (s[7] == 'f') { + if (s[8] == '_') { + if (s[9] == '_') { + return cxx::TokenKind::T___TYPEOF__; + } + } + } + } + } + } + } } } } diff --git a/src/parser/cxx/token_fwd.h b/src/parser/cxx/token_fwd.h index f0c30266..81ea55e6 100644 --- a/src/parser/cxx/token_fwd.h +++ b/src/parser/cxx/token_fwd.h @@ -276,6 +276,8 @@ class Token; V(_BOOL, BOOL) \ V(_STATIC_ASSERT, STATIC_ASSERT) \ V(_THREAD_LOCAL, THREAD_LOCAL) \ + V(__TYPEOF__, DECLTYPE) \ + V(__TYPEOF, DECLTYPE) \ V(AND_EQ, AMP_EQUAL) \ V(AND, AMP_AMP) \ V(BITAND, AMP) \ @@ -293,8 +295,6 @@ class Token; V(__DECLTYPE__, DECLTYPE) \ V(__DECLTYPE, DECLTYPE) \ V(__RESTRICT, __RESTRICT__) \ - V(__TYPEOF__, DECLTYPE) \ - V(__TYPEOF, DECLTYPE) \ V(__VOLATILE__, VOLATILE) \ V(__VOLATILE, VOLATILE)