From 422729a3b5844726e8b6b6de517ea17630c57a22 Mon Sep 17 00:00:00 2001 From: Roberto Raggi Date: Sat, 7 Oct 2023 16:15:27 +0200 Subject: [PATCH] fix: Simplified the AST for new expressions --- packages/cxx-frontend/src/AST.ts | 134 ++-- packages/cxx-frontend/src/ASTKind.ts | 2 - packages/cxx-frontend/src/ASTSlot.ts | 165 +++-- packages/cxx-frontend/src/ASTVisitor.ts | 21 - .../cxx-frontend/src/RecursiveASTVisitor.ts | 33 +- src/frontend/cxx/ast_printer.cc | 53 +- src/frontend/cxx/ast_printer.h | 2 - src/parser/cxx/ast.cc | 130 ++-- src/parser/cxx/ast.fbs | 17 +- src/parser/cxx/ast.h | 35 +- src/parser/cxx/ast_cloner.cc | 60 +- src/parser/cxx/ast_cloner.h | 2 - src/parser/cxx/ast_decoder.cc | 53 +- src/parser/cxx/ast_encoder.cc | 83 +-- src/parser/cxx/ast_fwd.h | 2 - src/parser/cxx/ast_kind.h | 2 - src/parser/cxx/ast_slot.cc | 655 +++++++++--------- src/parser/cxx/ast_slot.h | 2 - src/parser/cxx/ast_visitor.h | 2 - src/parser/cxx/default_ast_visitor.cc | 8 - src/parser/cxx/default_ast_visitor.h | 2 - src/parser/cxx/parser.cc | 229 ++---- src/parser/cxx/parser.h | 18 +- src/parser/cxx/private/ast_decoder.h | 2 - src/parser/cxx/private/ast_encoder.h | 2 - src/parser/cxx/recursive_ast_visitor.cc | 32 +- src/parser/cxx/recursive_ast_visitor.h | 5 - tests/unit_tests/ast/new_expression_01.cc | 20 +- 28 files changed, 666 insertions(+), 1105 deletions(-) diff --git a/packages/cxx-frontend/src/AST.ts b/packages/cxx-frontend/src/AST.ts index 22fee91e..fccb87c1 100644 --- a/packages/cxx-frontend/src/AST.ts +++ b/packages/cxx-frontend/src/AST.ts @@ -648,94 +648,6 @@ export class BaseClauseAST extends AST { } } -/** - * NewDeclaratorAST node. - */ -export class NewDeclaratorAST extends AST { - /** - * 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.visitNewDeclarator(this, context); - } - - /** - * Returns the ptrOpList of this node - */ - *getPtrOpList(): Generator { - for ( - let it = cxx.getASTSlot(this.getHandle(), 0); - it; - it = cxx.getListNext(it) - ) { - yield AST.from(cxx.getListValue(it), this.parser); - } - } - - /** - * Returns the declaratorChunkList of this node - */ - *getDeclaratorChunkList(): Generator { - for ( - let it = cxx.getASTSlot(this.getHandle(), 1); - it; - it = cxx.getListNext(it) - ) { - yield AST.from( - cxx.getListValue(it), - this.parser, - ); - } - } -} - -/** - * NewTypeIdAST node. - */ -export class NewTypeIdAST extends AST { - /** - * 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.visitNewTypeId(this, context); - } - - /** - * Returns the typeSpecifierList of this node - */ - *getTypeSpecifierList(): Generator { - for ( - let it = cxx.getASTSlot(this.getHandle(), 0); - it; - it = cxx.getListNext(it) - ) { - yield AST.from(cxx.getListValue(it), this.parser); - } - } - - /** - * Returns the newDeclarator of this node - */ - getNewDeclarator(): NewDeclaratorAST | undefined { - return AST.from( - cxx.getASTSlot(this.getHandle(), 1), - this.parser, - ); - } -} - /** * RequiresClauseAST node. */ @@ -4149,21 +4061,48 @@ export class NewExpressionAST extends ExpressionAST { } /** - * Returns the typeId of this node + * Returns the location of the lparen token in this node */ - getTypeId(): NewTypeIdAST | undefined { - return AST.from( - cxx.getASTSlot(this.getHandle(), 3), + getLparenToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 3), this.parser); + } + + /** + * Returns the typeSpecifierList of this node + */ + *getTypeSpecifierList(): Generator { + for ( + let it = cxx.getASTSlot(this.getHandle(), 4); + it; + it = cxx.getListNext(it) + ) { + yield AST.from(cxx.getListValue(it), this.parser); + } + } + + /** + * Returns the declarator of this node + */ + getDeclarator(): DeclaratorAST | undefined { + return AST.from( + cxx.getASTSlot(this.getHandle(), 5), this.parser, ); } + /** + * Returns the location of the rparen token in this node + */ + getRparenToken(): Token | undefined { + return Token.from(cxx.getASTSlot(this.getHandle(), 6), this.parser); + } + /** * Returns the newInitalizer of this node */ getNewInitalizer(): NewInitializerAST | undefined { return AST.from( - cxx.getASTSlot(this.getHandle(), 4), + cxx.getASTSlot(this.getHandle(), 7), this.parser, ); } @@ -8615,6 +8554,13 @@ export class TypenameTypeParameterAST extends TemplateParameterAST { const slot = cxx.getASTSlot(this.getHandle(), 5); return cxx.getIdentifierValue(slot); } + + /** + * Returns the isPack attribute of this node + */ + getIsPack(): boolean { + return cxx.getASTSlot(this.getHandle(), 6) !== 0; + } } /** @@ -11141,8 +11087,6 @@ const AST_CONSTRUCTORS: Array< InitDeclaratorAST, BaseSpecifierAST, BaseClauseAST, - NewDeclaratorAST, - NewTypeIdAST, RequiresClauseAST, ParameterDeclarationClauseAST, ParametersAndQualifiersAST, diff --git a/packages/cxx-frontend/src/ASTKind.ts b/packages/cxx-frontend/src/ASTKind.ts index 797ed6ab..2c373c9e 100644 --- a/packages/cxx-frontend/src/ASTKind.ts +++ b/packages/cxx-frontend/src/ASTKind.ts @@ -29,8 +29,6 @@ export enum ASTKind { InitDeclarator, BaseSpecifier, BaseClause, - NewDeclarator, - NewTypeId, RequiresClause, ParameterDeclarationClause, ParametersAndQualifiers, diff --git a/packages/cxx-frontend/src/ASTSlot.ts b/packages/cxx-frontend/src/ASTSlot.ts index fde265fe..399e5fe0 100644 --- a/packages/cxx-frontend/src/ASTSlot.ts +++ b/packages/cxx-frontend/src/ASTSlot.ts @@ -165,87 +165,86 @@ export enum ASTSlot { namespaceLoc = 143, nestedNameSpecifier = 144, nestedNamespaceSpecifierList = 145, - newDeclarator = 146, - newInitalizer = 147, - newLoc = 148, - newPlacement = 149, - noexceptLoc = 150, - op = 151, - opLoc = 152, - openLoc = 153, - operatorFunctionId = 154, - operatorLoc = 155, - outputOperandList = 156, - parameterDeclarationClause = 157, - parameterDeclarationList = 158, - parametersAndQualifiers = 159, - privateLoc = 160, - privateModuleFragment = 161, - ptrOpList = 162, - qualifier = 163, - qualifierLoc = 164, - questionLoc = 165, - rangeDeclaration = 166, - rangeInitializer = 167, - rbraceLoc = 168, - rbracket2Loc = 169, - rbracketLoc = 170, - refLoc = 171, - refOp = 172, - refQualifierLoc = 173, - requirementBody = 174, - requirementList = 175, - requiresClause = 176, - requiresLoc = 177, - restrictLoc = 178, - returnLoc = 179, - rightExpression = 180, - rparen2Loc = 181, - rparenLoc = 182, - scopeLoc = 183, - semicolonLoc = 184, - sizeExpression = 185, - sizeofLoc = 186, - specifier = 187, - specifierLoc = 188, - starLoc = 189, - statement = 190, - statementList = 191, - staticAssertLoc = 192, - staticLoc = 193, - stringLiteral = 194, - stringliteralLoc = 195, - switchLoc = 196, - symbolicName = 197, - symbolicNameLoc = 198, - templateArgumentList = 199, - templateId = 200, - templateLoc = 201, - templateParameterList = 202, - thisLoc = 203, - threadLoc = 204, - threadLocalLoc = 205, - throwLoc = 206, - tildeLoc = 207, - trailingReturnType = 208, - tryLoc = 209, - typeConstraint = 210, - typeId = 211, - typeIdList = 212, - typeSpecifier = 213, - typeSpecifierList = 214, - typeTraits = 215, - typeTraitsLoc = 216, - typedefLoc = 217, - typeidLoc = 218, - typenameLoc = 219, - underlyingTypeLoc = 220, - unqualifiedId = 221, - usingDeclaratorList = 222, - usingLoc = 223, - virtualLoc = 224, - voidLoc = 225, - volatileLoc = 226, - whileLoc = 227, - yieldLoc = 228, + newInitalizer = 146, + newLoc = 147, + newPlacement = 148, + noexceptLoc = 149, + op = 150, + opLoc = 151, + openLoc = 152, + operatorFunctionId = 153, + operatorLoc = 154, + outputOperandList = 155, + parameterDeclarationClause = 156, + parameterDeclarationList = 157, + parametersAndQualifiers = 158, + privateLoc = 159, + privateModuleFragment = 160, + ptrOpList = 161, + qualifier = 162, + qualifierLoc = 163, + questionLoc = 164, + rangeDeclaration = 165, + rangeInitializer = 166, + rbraceLoc = 167, + rbracket2Loc = 168, + rbracketLoc = 169, + refLoc = 170, + refOp = 171, + refQualifierLoc = 172, + requirementBody = 173, + requirementList = 174, + requiresClause = 175, + requiresLoc = 176, + restrictLoc = 177, + returnLoc = 178, + rightExpression = 179, + rparen2Loc = 180, + rparenLoc = 181, + scopeLoc = 182, + semicolonLoc = 183, + sizeExpression = 184, + sizeofLoc = 185, + specifier = 186, + specifierLoc = 187, + starLoc = 188, + statement = 189, + statementList = 190, + staticAssertLoc = 191, + staticLoc = 192, + stringLiteral = 193, + stringliteralLoc = 194, + switchLoc = 195, + symbolicName = 196, + symbolicNameLoc = 197, + templateArgumentList = 198, + templateId = 199, + templateLoc = 200, + templateParameterList = 201, + thisLoc = 202, + threadLoc = 203, + threadLocalLoc = 204, + throwLoc = 205, + tildeLoc = 206, + trailingReturnType = 207, + tryLoc = 208, + typeConstraint = 209, + typeId = 210, + typeIdList = 211, + typeSpecifier = 212, + typeSpecifierList = 213, + typeTraits = 214, + typeTraitsLoc = 215, + typedefLoc = 216, + typeidLoc = 217, + typenameLoc = 218, + underlyingTypeLoc = 219, + unqualifiedId = 220, + usingDeclaratorList = 221, + usingLoc = 222, + virtualLoc = 223, + voidLoc = 224, + volatileLoc = 225, + whileLoc = 226, + yieldLoc = 227, } diff --git a/packages/cxx-frontend/src/ASTVisitor.ts b/packages/cxx-frontend/src/ASTVisitor.ts index 3931f4f2..23eea2c3 100644 --- a/packages/cxx-frontend/src/ASTVisitor.ts +++ b/packages/cxx-frontend/src/ASTVisitor.ts @@ -118,27 +118,6 @@ export abstract class ASTVisitor { */ abstract visitBaseClause(node: ast.BaseClauseAST, context: Context): Result; - /** - * Visit NewDeclarator node. - * - * @param node The node to visit. - * @param context The context. - * @returns The result of the visit. - */ - abstract visitNewDeclarator( - node: ast.NewDeclaratorAST, - context: Context, - ): Result; - - /** - * Visit NewTypeId node. - * - * @param node The node to visit. - * @param context The context. - * @returns The result of the visit. - */ - abstract visitNewTypeId(node: ast.NewTypeIdAST, context: Context): Result; - /** * Visit RequiresClause node. * diff --git a/packages/cxx-frontend/src/RecursiveASTVisitor.ts b/packages/cxx-frontend/src/RecursiveASTVisitor.ts index eca70abc..8b371edc 100644 --- a/packages/cxx-frontend/src/RecursiveASTVisitor.ts +++ b/packages/cxx-frontend/src/RecursiveASTVisitor.ts @@ -158,34 +158,6 @@ export class RecursiveASTVisitor extends ASTVisitor { } } - /** - * Visit a NewDeclarator node. - * - * @param node The node to visit. - * @param context The context. - */ - visitNewDeclarator(node: ast.NewDeclaratorAST, context: Context): void { - for (const element of node.getPtrOpList()) { - this.accept(element, context); - } - for (const element of node.getDeclaratorChunkList()) { - this.accept(element, context); - } - } - - /** - * Visit a NewTypeId node. - * - * @param node The node to visit. - * @param context The context. - */ - visitNewTypeId(node: ast.NewTypeIdAST, context: Context): void { - for (const element of node.getTypeSpecifierList()) { - this.accept(element, context); - } - this.accept(node.getNewDeclarator(), context); - } - /** * Visit a RequiresClause node. * @@ -1060,7 +1032,10 @@ export class RecursiveASTVisitor extends ASTVisitor { */ visitNewExpression(node: ast.NewExpressionAST, context: Context): void { this.accept(node.getNewPlacement(), context); - this.accept(node.getTypeId(), context); + for (const element of node.getTypeSpecifierList()) { + this.accept(element, context); + } + this.accept(node.getDeclarator(), context); this.accept(node.getNewInitalizer(), context); } diff --git a/src/frontend/cxx/ast_printer.cc b/src/frontend/cxx/ast_printer.cc index 7535cde6..8979be7d 100644 --- a/src/frontend/cxx/ast_printer.cc +++ b/src/frontend/cxx/ast_printer.cc @@ -192,42 +192,6 @@ void ASTPrinter::visit(BaseClauseAST* ast) { } } -void ASTPrinter::visit(NewDeclaratorAST* ast) { - fmt::print(out_, "{}\n", "new-declarator"); - if (ast->ptrOpList) { - ++indent_; - fmt::print(out_, "{:{}}", "", indent_ * 2); - fmt::print(out_, "{}\n", "ptr-op-list"); - for (auto it = ast->ptrOpList; it; it = it->next) { - accept(it->value); - } - --indent_; - } - if (ast->declaratorChunkList) { - ++indent_; - fmt::print(out_, "{:{}}", "", indent_ * 2); - fmt::print(out_, "{}\n", "declarator-chunk-list"); - for (auto it = ast->declaratorChunkList; it; it = it->next) { - accept(it->value); - } - --indent_; - } -} - -void ASTPrinter::visit(NewTypeIdAST* ast) { - fmt::print(out_, "{}\n", "new-type-id"); - if (ast->typeSpecifierList) { - ++indent_; - fmt::print(out_, "{:{}}", "", indent_ * 2); - fmt::print(out_, "{}\n", "type-specifier-list"); - for (auto it = ast->typeSpecifierList; it; it = it->next) { - accept(it->value); - } - --indent_; - } - accept(ast->newDeclarator, "new-declarator"); -} - void ASTPrinter::visit(RequiresClauseAST* ast) { fmt::print(out_, "{}\n", "requires-clause"); accept(ast->expression, "expression"); @@ -893,7 +857,16 @@ void ASTPrinter::visit(CppCastExpressionAST* ast) { void ASTPrinter::visit(NewExpressionAST* ast) { fmt::print(out_, "{}\n", "new-expression"); accept(ast->newPlacement, "new-placement"); - accept(ast->typeId, "type-id"); + if (ast->typeSpecifierList) { + ++indent_; + fmt::print(out_, "{:{}}", "", indent_ * 2); + fmt::print(out_, "{}\n", "type-specifier-list"); + for (auto it = ast->typeSpecifierList; it; it = it->next) { + accept(it->value); + } + --indent_; + } + accept(ast->declarator, "declarator"); accept(ast->newInitalizer, "new-initalizer"); } @@ -1764,6 +1737,12 @@ void ASTPrinter::visit(NonTypeTemplateParameterAST* ast) { void ASTPrinter::visit(TypenameTypeParameterAST* ast) { fmt::print(out_, "{}\n", "typename-type-parameter"); accept(ast->identifier, "identifier"); + if (ast->isPack) { + ++indent_; + fmt::print(out_, "{:{}}", "", indent_ * 2); + fmt::print(out_, "is-pack: {}\n", ast->isPack); + --indent_; + } accept(ast->typeId, "type-id"); } diff --git a/src/frontend/cxx/ast_printer.h b/src/frontend/cxx/ast_printer.h index 7b0a50ca..b5aa771f 100644 --- a/src/frontend/cxx/ast_printer.h +++ b/src/frontend/cxx/ast_printer.h @@ -51,8 +51,6 @@ class ASTPrinter : ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/src/parser/cxx/ast.cc b/src/parser/cxx/ast.cc index d288c1be..f3f2f0ee 100644 --- a/src/parser/cxx/ast.cc +++ b/src/parser/cxx/ast.cc @@ -154,30 +154,6 @@ auto BaseClauseAST::lastSourceLocation() -> SourceLocation { return {}; } -auto NewDeclaratorAST::firstSourceLocation() -> SourceLocation { - if (auto loc = cxx::firstSourceLocation(ptrOpList)) return loc; - if (auto loc = cxx::firstSourceLocation(declaratorChunkList)) return loc; - return {}; -} - -auto NewDeclaratorAST::lastSourceLocation() -> SourceLocation { - if (auto loc = cxx::lastSourceLocation(declaratorChunkList)) return loc; - if (auto loc = cxx::lastSourceLocation(ptrOpList)) return loc; - return {}; -} - -auto NewTypeIdAST::firstSourceLocation() -> SourceLocation { - if (auto loc = cxx::firstSourceLocation(typeSpecifierList)) return loc; - if (auto loc = cxx::firstSourceLocation(newDeclarator)) return loc; - return {}; -} - -auto NewTypeIdAST::lastSourceLocation() -> SourceLocation { - if (auto loc = cxx::lastSourceLocation(newDeclarator)) return loc; - if (auto loc = cxx::lastSourceLocation(typeSpecifierList)) return loc; - return {}; -} - auto RequiresClauseAST::firstSourceLocation() -> SourceLocation { if (auto loc = cxx::firstSourceLocation(requiresLoc)) return loc; if (auto loc = cxx::firstSourceLocation(expression)) return loc; @@ -1196,14 +1172,20 @@ auto NewExpressionAST::firstSourceLocation() -> SourceLocation { if (auto loc = cxx::firstSourceLocation(scopeLoc)) return loc; if (auto loc = cxx::firstSourceLocation(newLoc)) return loc; if (auto loc = cxx::firstSourceLocation(newPlacement)) return loc; - if (auto loc = cxx::firstSourceLocation(typeId)) return loc; + if (auto loc = cxx::firstSourceLocation(lparenLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(typeSpecifierList)) return loc; + if (auto loc = cxx::firstSourceLocation(declarator)) return loc; + if (auto loc = cxx::firstSourceLocation(rparenLoc)) return loc; if (auto loc = cxx::firstSourceLocation(newInitalizer)) return loc; return {}; } auto NewExpressionAST::lastSourceLocation() -> SourceLocation { if (auto loc = cxx::lastSourceLocation(newInitalizer)) return loc; - if (auto loc = cxx::lastSourceLocation(typeId)) return loc; + if (auto loc = cxx::lastSourceLocation(rparenLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(declarator)) return loc; + if (auto loc = cxx::lastSourceLocation(typeSpecifierList)) return loc; + if (auto loc = cxx::lastSourceLocation(lparenLoc)) return loc; if (auto loc = cxx::lastSourceLocation(newPlacement)) return loc; if (auto loc = cxx::lastSourceLocation(newLoc)) return loc; if (auto loc = cxx::lastSourceLocation(scopeLoc)) return loc; @@ -2360,54 +2342,6 @@ auto TemplateDeclarationAST::lastSourceLocation() -> SourceLocation { return {}; } -auto TemplateTypeParameterAST::firstSourceLocation() -> SourceLocation { - if (auto loc = cxx::firstSourceLocation(templateLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(lessLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(templateParameterList)) return loc; - if (auto loc = cxx::firstSourceLocation(greaterLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(requiresClause)) return loc; - if (auto loc = cxx::firstSourceLocation(classKeyLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(equalLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(idExpression)) return loc; - return {}; -} - -auto TemplateTypeParameterAST::lastSourceLocation() -> SourceLocation { - if (auto loc = cxx::lastSourceLocation(idExpression)) return loc; - if (auto loc = cxx::lastSourceLocation(equalLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(classKeyLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(requiresClause)) return loc; - if (auto loc = cxx::lastSourceLocation(greaterLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(templateParameterList)) return loc; - if (auto loc = cxx::lastSourceLocation(lessLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(templateLoc)) return loc; - return {}; -} - -auto TemplatePackTypeParameterAST::firstSourceLocation() -> SourceLocation { - if (auto loc = cxx::firstSourceLocation(templateLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(lessLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(templateParameterList)) return loc; - if (auto loc = cxx::firstSourceLocation(greaterLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(classKeyLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(ellipsisLoc)) return loc; - if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; - return {}; -} - -auto TemplatePackTypeParameterAST::lastSourceLocation() -> SourceLocation { - if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(ellipsisLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(classKeyLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(greaterLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(templateParameterList)) return loc; - if (auto loc = cxx::lastSourceLocation(lessLoc)) return loc; - if (auto loc = cxx::lastSourceLocation(templateLoc)) return loc; - return {}; -} - auto DeductionGuideAST::firstSourceLocation() -> SourceLocation { if (auto loc = cxx::firstSourceLocation(explicitSpecifier)) return loc; if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; @@ -2486,6 +2420,54 @@ auto LinkageSpecificationAST::lastSourceLocation() -> SourceLocation { return {}; } +auto TemplateTypeParameterAST::firstSourceLocation() -> SourceLocation { + if (auto loc = cxx::firstSourceLocation(templateLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(lessLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(templateParameterList)) return loc; + if (auto loc = cxx::firstSourceLocation(greaterLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(requiresClause)) return loc; + if (auto loc = cxx::firstSourceLocation(classKeyLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(equalLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(idExpression)) return loc; + return {}; +} + +auto TemplateTypeParameterAST::lastSourceLocation() -> SourceLocation { + if (auto loc = cxx::lastSourceLocation(idExpression)) return loc; + if (auto loc = cxx::lastSourceLocation(equalLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(classKeyLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(requiresClause)) return loc; + if (auto loc = cxx::lastSourceLocation(greaterLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(templateParameterList)) return loc; + if (auto loc = cxx::lastSourceLocation(lessLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(templateLoc)) return loc; + return {}; +} + +auto TemplatePackTypeParameterAST::firstSourceLocation() -> SourceLocation { + if (auto loc = cxx::firstSourceLocation(templateLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(lessLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(templateParameterList)) return loc; + if (auto loc = cxx::firstSourceLocation(greaterLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(classKeyLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(ellipsisLoc)) return loc; + if (auto loc = cxx::firstSourceLocation(identifierLoc)) return loc; + return {}; +} + +auto TemplatePackTypeParameterAST::lastSourceLocation() -> SourceLocation { + if (auto loc = cxx::lastSourceLocation(identifierLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(ellipsisLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(classKeyLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(greaterLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(templateParameterList)) return loc; + if (auto loc = cxx::lastSourceLocation(lessLoc)) return loc; + if (auto loc = cxx::lastSourceLocation(templateLoc)) return loc; + return {}; +} + auto NonTypeTemplateParameterAST::firstSourceLocation() -> SourceLocation { if (auto loc = cxx::firstSourceLocation(declaration)) return loc; return {}; diff --git a/src/parser/cxx/ast.fbs b/src/parser/cxx/ast.fbs index 7cc43a21..03dd9571 100644 --- a/src/parser/cxx/ast.fbs +++ b/src/parser/cxx/ast.fbs @@ -40,8 +40,6 @@ union AST { InitDeclarator, BaseSpecifier, BaseClause, - NewDeclarator, - NewTypeId, RequiresClause, ParameterDeclarationClause, ParametersAndQualifiers, @@ -377,16 +375,6 @@ table BaseClause /* AST */ { colon_loc: SourceLocation; } -table NewDeclarator /* AST */ { - ptr_op_list: [PtrOperator]; - declarator_chunk_list: [ArrayDeclaratorChunk]; -} - -table NewTypeId /* AST */ { - type_specifier_list: [Specifier]; - new_declarator: NewDeclarator; -} - table RequiresClause /* AST */ { expression: Expression; requires_loc: SourceLocation; @@ -1143,10 +1131,13 @@ table CppCastExpression /* ExpressionAST */ { table NewExpression /* ExpressionAST */ { new_placement: NewPlacement; - type_id: NewTypeId; + type_specifier_list: [Specifier]; + declarator: Declarator; new_initalizer: NewInitializer; scope_loc: SourceLocation; new_loc: SourceLocation; + lparen_loc: SourceLocation; + rparen_loc: SourceLocation; } table DeleteExpression /* ExpressionAST */ { diff --git a/src/parser/cxx/ast.h b/src/parser/cxx/ast.h index 0928d1a8..8bf9ec7e 100644 --- a/src/parser/cxx/ast.h +++ b/src/parser/cxx/ast.h @@ -358,36 +358,6 @@ class BaseClauseAST final : public AST { auto lastSourceLocation() -> SourceLocation override; }; -class NewDeclaratorAST final : public AST { - public: - static constexpr ASTKind Kind = ASTKind::NewDeclarator; - - NewDeclaratorAST() : AST(Kind) {} - - List* ptrOpList = nullptr; - List* declaratorChunkList = nullptr; - - void accept(ASTVisitor* visitor) override { visitor->visit(this); } - - auto firstSourceLocation() -> SourceLocation override; - auto lastSourceLocation() -> SourceLocation override; -}; - -class NewTypeIdAST final : public AST { - public: - static constexpr ASTKind Kind = ASTKind::NewTypeId; - - NewTypeIdAST() : AST(Kind) {} - - List* typeSpecifierList = nullptr; - NewDeclaratorAST* newDeclarator = nullptr; - - void accept(ASTVisitor* visitor) override { visitor->visit(this); } - - auto firstSourceLocation() -> SourceLocation override; - auto lastSourceLocation() -> SourceLocation override; -}; - class RequiresClauseAST final : public AST { public: static constexpr ASTKind Kind = ASTKind::RequiresClause; @@ -1560,7 +1530,10 @@ class NewExpressionAST final : public ExpressionAST { SourceLocation scopeLoc; SourceLocation newLoc; NewPlacementAST* newPlacement = nullptr; - NewTypeIdAST* typeId = nullptr; + SourceLocation lparenLoc; + List* typeSpecifierList = nullptr; + DeclaratorAST* declarator = nullptr; + SourceLocation rparenLoc; NewInitializerAST* newInitalizer = nullptr; void accept(ASTVisitor* visitor) override { visitor->visit(this); } diff --git a/src/parser/cxx/ast_cloner.cc b/src/parser/cxx/ast_cloner.cc index 6ba35ff2..cbe24949 100644 --- a/src/parser/cxx/ast_cloner.cc +++ b/src/parser/cxx/ast_cloner.cc @@ -210,49 +210,6 @@ void ASTCloner::visit(BaseClauseAST* ast) { } } -void ASTCloner::visit(NewDeclaratorAST* ast) { - auto copy = new (arena_) NewDeclaratorAST(); - copy_ = copy; - - copy->setChecked(ast->checked()); - - if (auto it = ast->ptrOpList) { - auto out = ©->ptrOpList; - - for (; it; it = it->next) { - *out = new (arena_) List(accept(it->value)); - out = &(*out)->next; - } - } - - if (auto it = ast->declaratorChunkList) { - auto out = ©->declaratorChunkList; - - for (; it; it = it->next) { - *out = new (arena_) List(accept(it->value)); - out = &(*out)->next; - } - } -} - -void ASTCloner::visit(NewTypeIdAST* ast) { - auto copy = new (arena_) NewTypeIdAST(); - copy_ = copy; - - copy->setChecked(ast->checked()); - - if (auto it = ast->typeSpecifierList) { - auto out = ©->typeSpecifierList; - - for (; it; it = it->next) { - *out = new (arena_) List(accept(it->value)); - out = &(*out)->next; - } - } - - copy->newDeclarator = accept(ast->newDeclarator); -} - void ASTCloner::visit(RequiresClauseAST* ast) { auto copy = new (arena_) RequiresClauseAST(); copy_ = copy; @@ -1562,7 +1519,20 @@ void ASTCloner::visit(NewExpressionAST* ast) { copy->newPlacement = accept(ast->newPlacement); - copy->typeId = accept(ast->typeId); + copy->lparenLoc = ast->lparenLoc; + + if (auto it = ast->typeSpecifierList) { + auto out = ©->typeSpecifierList; + + for (; it; it = it->next) { + *out = new (arena_) List(accept(it->value)); + out = &(*out)->next; + } + } + + copy->declarator = accept(ast->declarator); + + copy->rparenLoc = ast->rparenLoc; copy->newInitalizer = accept(ast->newInitalizer); } @@ -3153,6 +3123,8 @@ void ASTCloner::visit(TypenameTypeParameterAST* ast) { copy->typeId = accept(ast->typeId); copy->identifier = ast->identifier; + + copy->isPack = ast->isPack; } void ASTCloner::visit(ConstraintTypeParameterAST* ast) { diff --git a/src/parser/cxx/ast_cloner.h b/src/parser/cxx/ast_cloner.h index d15b36e7..6d392c97 100644 --- a/src/parser/cxx/ast_cloner.h +++ b/src/parser/cxx/ast_cloner.h @@ -39,8 +39,6 @@ class ASTCloner : public ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/src/parser/cxx/ast_decoder.cc b/src/parser/cxx/ast_decoder.cc index a925e5e1..f9082994 100644 --- a/src/parser/cxx/ast_decoder.cc +++ b/src/parser/cxx/ast_decoder.cc @@ -928,48 +928,6 @@ auto ASTDecoder::decodeBaseClause(const io::BaseClause* node) return ast; } -auto ASTDecoder::decodeNewDeclarator(const io::NewDeclarator* node) - -> NewDeclaratorAST* { - if (!node) return nullptr; - - auto ast = new (pool_) NewDeclaratorAST(); - if (node->ptr_op_list()) { - auto* inserter = &ast->ptrOpList; - for (std::size_t i = 0; i < node->ptr_op_list()->size(); ++i) { - *inserter = new (pool_) List( - decodePtrOperator(node->ptr_op_list()->Get(i), - io::PtrOperator(node->ptr_op_list_type()->Get(i)))); - inserter = &(*inserter)->next; - } - } - if (node->declarator_chunk_list()) { - auto* inserter = &ast->declaratorChunkList; - for (std::size_t i = 0; i < node->declarator_chunk_list()->size(); ++i) { - *inserter = new (pool_) List( - decodeArrayDeclaratorChunk(node->declarator_chunk_list()->Get(i))); - inserter = &(*inserter)->next; - } - } - return ast; -} - -auto ASTDecoder::decodeNewTypeId(const io::NewTypeId* node) -> NewTypeIdAST* { - if (!node) return nullptr; - - auto ast = new (pool_) NewTypeIdAST(); - if (node->type_specifier_list()) { - auto* inserter = &ast->typeSpecifierList; - for (std::size_t i = 0; i < node->type_specifier_list()->size(); ++i) { - *inserter = new (pool_) List(decodeSpecifier( - node->type_specifier_list()->Get(i), - io::Specifier(node->type_specifier_list_type()->Get(i)))); - inserter = &(*inserter)->next; - } - } - ast->newDeclarator = decodeNewDeclarator(node->new_declarator()); - return ast; -} - auto ASTDecoder::decodeRequiresClause(const io::RequiresClause* node) -> RequiresClauseAST* { if (!node) return nullptr; @@ -1880,7 +1838,16 @@ auto ASTDecoder::decodeNewExpression(const io::NewExpression* node) auto ast = new (pool_) NewExpressionAST(); ast->newPlacement = decodeNewPlacement(node->new_placement()); - ast->typeId = decodeNewTypeId(node->type_id()); + if (node->type_specifier_list()) { + auto* inserter = &ast->typeSpecifierList; + for (std::size_t i = 0; i < node->type_specifier_list()->size(); ++i) { + *inserter = new (pool_) List(decodeSpecifier( + node->type_specifier_list()->Get(i), + io::Specifier(node->type_specifier_list_type()->Get(i)))); + inserter = &(*inserter)->next; + } + } + ast->declarator = decodeDeclarator(node->declarator()); ast->newInitalizer = decodeNewInitializer(node->new_initalizer(), node->new_initalizer_type()); return ast; diff --git a/src/parser/cxx/ast_encoder.cc b/src/parser/cxx/ast_encoder.cc index b3c39e22..11aae143 100644 --- a/src/parser/cxx/ast_encoder.cc +++ b/src/parser/cxx/ast_encoder.cc @@ -662,63 +662,6 @@ void ASTEncoder::visit(BaseClauseAST* ast) { offset_ = builder.Finish().Union(); } -void ASTEncoder::visit(NewDeclaratorAST* ast) { - std::vector> ptrOpListOffsets; - std::vector> ptrOpListTypes; - - for (auto it = ast->ptrOpList; it; it = it->next) { - if (!it->value) continue; - const auto [offset, type] = acceptPtrOperator(it->value); - ptrOpListOffsets.push_back(offset); - ptrOpListTypes.push_back(type); - } - - auto ptrOpListOffsetsVector = fbb_.CreateVector(ptrOpListOffsets); - auto ptrOpListTypesVector = fbb_.CreateVector(ptrOpListTypes); - - std::vector> - declaratorChunkListOffsets; - for (auto it = ast->declaratorChunkList; it; it = it->next) { - if (!it->value) continue; - declaratorChunkListOffsets.emplace_back(accept(it->value).o); - } - - auto declaratorChunkListOffsetsVector = - fbb_.CreateVector(declaratorChunkListOffsets); - - io::NewDeclarator::Builder builder{fbb_}; - builder.add_ptr_op_list(ptrOpListOffsetsVector); - builder.add_ptr_op_list_type(ptrOpListTypesVector); - builder.add_declarator_chunk_list(declaratorChunkListOffsetsVector); - - offset_ = builder.Finish().Union(); -} - -void ASTEncoder::visit(NewTypeIdAST* ast) { - std::vector> typeSpecifierListOffsets; - std::vector> typeSpecifierListTypes; - - for (auto it = ast->typeSpecifierList; it; it = it->next) { - if (!it->value) continue; - const auto [offset, type] = acceptSpecifier(it->value); - typeSpecifierListOffsets.push_back(offset); - typeSpecifierListTypes.push_back(type); - } - - auto typeSpecifierListOffsetsVector = - fbb_.CreateVector(typeSpecifierListOffsets); - auto typeSpecifierListTypesVector = fbb_.CreateVector(typeSpecifierListTypes); - - const auto newDeclarator = accept(ast->newDeclarator); - - io::NewTypeId::Builder builder{fbb_}; - builder.add_type_specifier_list(typeSpecifierListOffsetsVector); - builder.add_type_specifier_list_type(typeSpecifierListTypesVector); - builder.add_new_declarator(newDeclarator.o); - - offset_ = builder.Finish().Union(); -} - void ASTEncoder::visit(RequiresClauseAST* ast) { auto requiresLoc = encodeSourceLocation(ast->requiresLoc); @@ -2340,7 +2283,25 @@ void ASTEncoder::visit(NewExpressionAST* ast) { const auto newPlacement = accept(ast->newPlacement); - const auto typeId = accept(ast->typeId); + auto lparenLoc = encodeSourceLocation(ast->lparenLoc); + + std::vector> typeSpecifierListOffsets; + std::vector> typeSpecifierListTypes; + + for (auto it = ast->typeSpecifierList; it; it = it->next) { + if (!it->value) continue; + const auto [offset, type] = acceptSpecifier(it->value); + typeSpecifierListOffsets.push_back(offset); + typeSpecifierListTypes.push_back(type); + } + + auto typeSpecifierListOffsetsVector = + fbb_.CreateVector(typeSpecifierListOffsets); + auto typeSpecifierListTypesVector = fbb_.CreateVector(typeSpecifierListTypes); + + const auto declarator = accept(ast->declarator); + + auto rparenLoc = encodeSourceLocation(ast->rparenLoc); const auto [newInitalizer, newInitalizerType] = acceptNewInitializer(ast->newInitalizer); @@ -2349,7 +2310,11 @@ void ASTEncoder::visit(NewExpressionAST* ast) { builder.add_scope_loc(scopeLoc.o); builder.add_new_loc(newLoc.o); builder.add_new_placement(newPlacement.o); - builder.add_type_id(typeId.o); + builder.add_lparen_loc(lparenLoc.o); + builder.add_type_specifier_list(typeSpecifierListOffsetsVector); + builder.add_type_specifier_list_type(typeSpecifierListTypesVector); + builder.add_declarator(declarator.o); + builder.add_rparen_loc(rparenLoc.o); builder.add_new_initalizer(newInitalizer); builder.add_new_initalizer_type( static_cast(newInitalizerType)); diff --git a/src/parser/cxx/ast_fwd.h b/src/parser/cxx/ast_fwd.h index 22fcc4df..8febd238 100644 --- a/src/parser/cxx/ast_fwd.h +++ b/src/parser/cxx/ast_fwd.h @@ -84,8 +84,6 @@ class DeclaratorAST; class InitDeclaratorAST; class BaseSpecifierAST; class BaseClauseAST; -class NewDeclaratorAST; -class NewTypeIdAST; class RequiresClauseAST; class ParameterDeclarationClauseAST; class ParametersAndQualifiersAST; diff --git a/src/parser/cxx/ast_kind.h b/src/parser/cxx/ast_kind.h index a622a526..e2eed529 100644 --- a/src/parser/cxx/ast_kind.h +++ b/src/parser/cxx/ast_kind.h @@ -34,8 +34,6 @@ enum struct ASTKind { InitDeclarator, BaseSpecifier, BaseClause, - NewDeclarator, - NewTypeId, RequiresClause, ParameterDeclarationClause, ParametersAndQualifiers, diff --git a/src/parser/cxx/ast_slot.cc b/src/parser/cxx/ast_slot.cc index 5945a3b2..d0caf269 100644 --- a/src/parser/cxx/ast_slot.cc +++ b/src/parser/cxx/ast_slot.cc @@ -195,7 +195,6 @@ std::string_view kMemberSlotNames[] = { "namespaceLoc", "nestedNameSpecifier", "nestedNamespaceSpecifierList", - "newDeclarator", "newInitalizer", "newLoc", "newPlacement", @@ -289,7 +288,7 @@ void ASTSlot::visit(TypeIdAST* ast) { case 0: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{214}; + slotNameIndex_ = SlotNameIndex{213}; break; case 1: // declarator value_ = reinterpret_cast(ast->declarator); @@ -306,7 +305,7 @@ void ASTSlot::visit(UsingDeclaratorAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); @@ -316,7 +315,7 @@ void ASTSlot::visit(UsingDeclaratorAST* ast) { case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -353,12 +352,12 @@ void ASTSlot::visit(HandlerAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -375,7 +374,7 @@ void ASTSlot::visit(EnumBaseAST* ast) { case 1: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{214}; + slotNameIndex_ = SlotNameIndex{213}; break; } // switch @@ -419,7 +418,7 @@ void ASTSlot::visit(DeclaratorAST* ast) { case 0: // ptrOpList value_ = reinterpret_cast(ast->ptrOpList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{162}; + slotNameIndex_ = SlotNameIndex{161}; break; case 1: // coreDeclarator value_ = reinterpret_cast(ast->coreDeclarator); @@ -446,7 +445,7 @@ void ASTSlot::visit(InitDeclaratorAST* ast) { case 1: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 2: // initializer value_ = reinterpret_cast(ast->initializer); @@ -473,12 +472,12 @@ void ASTSlot::visit(BaseSpecifierAST* ast) { case 2: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // isTemplateIntroduced value_ = intptr_t(ast->isTemplateIntroduced != 0); @@ -517,46 +516,12 @@ void ASTSlot::visit(BaseClauseAST* ast) { slotCount_ = 2; } -void ASTSlot::visit(NewDeclaratorAST* ast) { - switch (slot_) { - case 0: // ptrOpList - value_ = reinterpret_cast(ast->ptrOpList); - slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{162}; - break; - case 1: // declaratorChunkList - value_ = reinterpret_cast(ast->declaratorChunkList); - slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{56}; - break; - } // switch - - slotCount_ = 2; -} - -void ASTSlot::visit(NewTypeIdAST* ast) { - switch (slot_) { - case 0: // typeSpecifierList - value_ = reinterpret_cast(ast->typeSpecifierList); - slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{214}; - break; - case 1: // newDeclarator - value_ = reinterpret_cast(ast->newDeclarator); - slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{146}; - break; - } // switch - - slotCount_ = 2; -} - void ASTSlot::visit(RequiresClauseAST* ast) { switch (slot_) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{176}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -573,7 +538,7 @@ void ASTSlot::visit(ParameterDeclarationClauseAST* ast) { case 0: // parameterDeclarationList value_ = reinterpret_cast(ast->parameterDeclarationList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{158}; + slotNameIndex_ = SlotNameIndex{157}; break; case 1: // commaLoc value_ = ast->commaLoc.index(); @@ -605,12 +570,12 @@ void ASTSlot::visit(ParametersAndQualifiersAST* ast) { case 1: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{157}; + slotNameIndex_ = SlotNameIndex{156}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 3: // cvQualifierList value_ = reinterpret_cast(ast->cvQualifierList); @@ -620,7 +585,7 @@ void ASTSlot::visit(ParametersAndQualifiersAST* ast) { case 4: // refLoc value_ = ast->refLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{170}; break; case 5: // exceptionSpecifier value_ = reinterpret_cast(ast->exceptionSpecifier); @@ -657,7 +622,7 @@ void ASTSlot::visit(LambdaIntroducerAST* ast) { case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; } // switch @@ -669,12 +634,12 @@ void ASTSlot::visit(LambdaSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -691,12 +656,12 @@ void ASTSlot::visit(LambdaDeclaratorAST* ast) { case 1: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{157}; + slotNameIndex_ = SlotNameIndex{156}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 3: // lambdaSpecifierList value_ = reinterpret_cast(ast->lambdaSpecifierList); @@ -716,12 +681,12 @@ void ASTSlot::visit(LambdaDeclaratorAST* ast) { case 6: // trailingReturnType value_ = reinterpret_cast(ast->trailingReturnType); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{208}; + slotNameIndex_ = SlotNameIndex{207}; break; case 7: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; } // switch @@ -738,7 +703,7 @@ void ASTSlot::visit(TrailingReturnTypeAST* ast) { case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -772,12 +737,12 @@ void ASTSlot::visit(RequirementBodyAST* ast) { case 1: // requirementList value_ = reinterpret_cast(ast->requirementList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{175}; + slotNameIndex_ = SlotNameIndex{174}; break; case 2: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -804,7 +769,7 @@ void ASTSlot::visit(TypeConstraintAST* ast) { case 3: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{198}; break; case 4: // greaterLoc value_ = ast->greaterLoc.index(); @@ -831,7 +796,7 @@ void ASTSlot::visit(GlobalModuleFragmentAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 2: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -858,12 +823,12 @@ void ASTSlot::visit(PrivateModuleFragmentAST* ast) { case 2: // privateLoc value_ = ast->privateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{160}; + slotNameIndex_ = SlotNameIndex{159}; break; case 3: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 4: // declarationList value_ = reinterpret_cast(ast->declarationList); @@ -954,7 +919,7 @@ void ASTSlot::visit(ModuleDeclarationAST* ast) { case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -1010,7 +975,7 @@ void ASTSlot::visit(AttributeArgumentClauseAST* ast) { case 1: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1044,7 +1009,7 @@ void ASTSlot::visit(AttributeUsingPrefixAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // attributeNamespaceLoc value_ = ast->attributeNamespaceLoc.index(); @@ -1098,7 +1063,7 @@ void ASTSlot::visit(NewPlacementAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1120,7 +1085,7 @@ void ASTSlot::visit(NestedNamespaceSpecifierAST* ast) { case 2: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); @@ -1142,7 +1107,7 @@ void ASTSlot::visit(GlobalNestedNameSpecifierAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; } // switch @@ -1169,7 +1134,7 @@ void ASTSlot::visit(SimpleNestedNameSpecifierAST* ast) { case 3: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; } // switch @@ -1191,7 +1156,7 @@ void ASTSlot::visit(DecltypeNestedNameSpecifierAST* ast) { case 2: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; } // switch @@ -1208,17 +1173,17 @@ void ASTSlot::visit(TemplateNestedNameSpecifierAST* ast) { case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 2: // templateId value_ = reinterpret_cast(ast->templateId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{200}; + slotNameIndex_ = SlotNameIndex{199}; break; case 3: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; case 4: // isTemplateIntroduced value_ = intptr_t(ast->isTemplateIntroduced != 0); @@ -1235,7 +1200,7 @@ void ASTSlot::visit(ThrowExceptionSpecifierAST* ast) { case 0: // throwLoc value_ = ast->throwLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{206}; + slotNameIndex_ = SlotNameIndex{205}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1245,7 +1210,7 @@ void ASTSlot::visit(ThrowExceptionSpecifierAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1257,7 +1222,7 @@ void ASTSlot::visit(NoexceptSpecifierAST* ast) { case 0: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{150}; + slotNameIndex_ = SlotNameIndex{149}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1272,7 +1237,7 @@ void ASTSlot::visit(NoexceptSpecifierAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1318,7 +1283,7 @@ void ASTSlot::visit(ThisExpressionAST* ast) { case 0: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{203}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -1454,12 +1419,12 @@ void ASTSlot::visit(IdExpressionAST* ast) { case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // isTemplateIntroduced value_ = intptr_t(ast->isTemplateIntroduced != 0); @@ -1476,7 +1441,7 @@ void ASTSlot::visit(RequiresExpressionAST* ast) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{176}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1486,17 +1451,17 @@ void ASTSlot::visit(RequiresExpressionAST* ast) { case 2: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{157}; + slotNameIndex_ = SlotNameIndex{156}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // requirementBody value_ = reinterpret_cast(ast->requirementBody); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{174}; + slotNameIndex_ = SlotNameIndex{173}; break; } // switch @@ -1518,7 +1483,7 @@ void ASTSlot::visit(NestedExpressionAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1540,7 +1505,7 @@ void ASTSlot::visit(RightFoldExpressionAST* ast) { case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -1550,12 +1515,12 @@ void ASTSlot::visit(RightFoldExpressionAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -1577,7 +1542,7 @@ void ASTSlot::visit(LeftFoldExpressionAST* ast) { case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); @@ -1587,12 +1552,12 @@ void ASTSlot::visit(LeftFoldExpressionAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -1614,7 +1579,7 @@ void ASTSlot::visit(FoldExpressionAST* ast) { case 2: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 3: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -1629,17 +1594,17 @@ void ASTSlot::visit(FoldExpressionAST* ast) { case 5: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{179}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; case 8: // foldOp value_ = intptr_t(ast->foldOp); @@ -1666,7 +1631,7 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{202}; + slotNameIndex_ = SlotNameIndex{201}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -1676,7 +1641,7 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 4: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 5: // lambdaDeclarator value_ = reinterpret_cast(ast->lambdaDeclarator); @@ -1686,7 +1651,7 @@ void ASTSlot::visit(LambdaExpressionAST* ast) { case 6: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -1698,7 +1663,7 @@ void ASTSlot::visit(SizeofExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -1715,7 +1680,7 @@ void ASTSlot::visit(SizeofTypeExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1725,12 +1690,12 @@ void ASTSlot::visit(SizeofTypeExpressionAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1742,7 +1707,7 @@ void ASTSlot::visit(SizeofPackExpressionAST* ast) { case 0: // sizeofLoc value_ = ast->sizeofLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{186}; + slotNameIndex_ = SlotNameIndex{185}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -1762,7 +1727,7 @@ void ASTSlot::visit(SizeofPackExpressionAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); @@ -1779,7 +1744,7 @@ void ASTSlot::visit(TypeidExpressionAST* ast) { case 0: // typeidLoc value_ = ast->typeidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{218}; + slotNameIndex_ = SlotNameIndex{217}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1794,7 +1759,7 @@ void ASTSlot::visit(TypeidExpressionAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1806,7 +1771,7 @@ void ASTSlot::visit(TypeidOfTypeExpressionAST* ast) { case 0: // typeidLoc value_ = ast->typeidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{218}; + slotNameIndex_ = SlotNameIndex{217}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1816,12 +1781,12 @@ void ASTSlot::visit(TypeidOfTypeExpressionAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1843,12 +1808,12 @@ void ASTSlot::visit(AlignofTypeExpressionAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -1877,7 +1842,7 @@ void ASTSlot::visit(TypeTraitsExpressionAST* ast) { case 0: // typeTraitsLoc value_ = ast->typeTraitsLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{216}; + slotNameIndex_ = SlotNameIndex{215}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -1887,17 +1852,17 @@ void ASTSlot::visit(TypeTraitsExpressionAST* ast) { case 2: // typeIdList value_ = reinterpret_cast(ast->typeIdList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{212}; + slotNameIndex_ = SlotNameIndex{211}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // typeTraits value_ = intptr_t(ast->typeTraits); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{215}; + slotNameIndex_ = SlotNameIndex{214}; break; } // switch @@ -1909,7 +1874,7 @@ void ASTSlot::visit(YieldExpressionAST* ast) { case 0: // yieldLoc value_ = ast->yieldLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{228}; + slotNameIndex_ = SlotNameIndex{227}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -1943,7 +1908,7 @@ void ASTSlot::visit(UnaryExpressionAST* ast) { case 0: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -1953,7 +1918,7 @@ void ASTSlot::visit(UnaryExpressionAST* ast) { case 2: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -1970,17 +1935,17 @@ void ASTSlot::visit(BinaryExpressionAST* ast) { case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 2: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{179}; break; case 3: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -1997,17 +1962,17 @@ void ASTSlot::visit(AssignmentExpressionAST* ast) { case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 2: // rightExpression value_ = reinterpret_cast(ast->rightExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{180}; + slotNameIndex_ = SlotNameIndex{179}; break; case 3: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -2046,7 +2011,7 @@ void ASTSlot::visit(BracedTypeConstructionAST* ast) { case 0: // typeSpecifier value_ = reinterpret_cast(ast->typeSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{212}; break; case 1: // bracedInitList value_ = reinterpret_cast(ast->bracedInitList); @@ -2063,7 +2028,7 @@ void ASTSlot::visit(TypeConstructionAST* ast) { case 0: // typeSpecifier value_ = reinterpret_cast(ast->typeSpecifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{213}; + slotNameIndex_ = SlotNameIndex{212}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -2078,7 +2043,7 @@ void ASTSlot::visit(TypeConstructionAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2105,7 +2070,7 @@ void ASTSlot::visit(CallExpressionAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2132,7 +2097,7 @@ void ASTSlot::visit(SubscriptExpressionAST* ast) { case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; } // switch @@ -2176,12 +2141,12 @@ void ASTSlot::visit(PostIncrExpressionAST* ast) { case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 2: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -2198,7 +2163,7 @@ void ASTSlot::visit(ConditionalExpressionAST* ast) { case 1: // questionLoc value_ = ast->questionLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{165}; + slotNameIndex_ = SlotNameIndex{164}; break; case 2: // iftrueExpression value_ = reinterpret_cast(ast->iftrueExpression); @@ -2242,12 +2207,12 @@ void ASTSlot::visit(CastExpressionAST* ast) { case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 3: // expression value_ = reinterpret_cast(ast->expression); @@ -2274,7 +2239,7 @@ void ASTSlot::visit(CppCastExpressionAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -2294,7 +2259,7 @@ void ASTSlot::visit(CppCastExpressionAST* ast) { case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2306,31 +2271,46 @@ void ASTSlot::visit(NewExpressionAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; case 1: // newLoc value_ = ast->newLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{148}; + slotNameIndex_ = SlotNameIndex{147}; break; case 2: // newPlacement value_ = reinterpret_cast(ast->newPlacement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{149}; + slotNameIndex_ = SlotNameIndex{148}; break; - case 3: // typeId - value_ = reinterpret_cast(ast->typeId); + case 3: // lparenLoc + value_ = ast->lparenLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{133}; + break; + case 4: // typeSpecifierList + value_ = reinterpret_cast(ast->typeSpecifierList); + slotKind_ = ASTSlotKind::kNodeList; + slotNameIndex_ = SlotNameIndex{213}; + break; + case 5: // declarator + value_ = reinterpret_cast(ast->declarator); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{55}; + break; + case 6: // rparenLoc + value_ = ast->rparenLoc.index(); + slotKind_ = ASTSlotKind::kToken; + slotNameIndex_ = SlotNameIndex{181}; break; - case 4: // newInitalizer + case 7: // newInitalizer value_ = reinterpret_cast(ast->newInitalizer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{147}; + slotNameIndex_ = SlotNameIndex{146}; break; } // switch - slotCount_ = 5; + slotCount_ = 8; } void ASTSlot::visit(DeleteExpressionAST* ast) { @@ -2338,7 +2318,7 @@ void ASTSlot::visit(DeleteExpressionAST* ast) { case 0: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; case 1: // deleteLoc value_ = ast->deleteLoc.index(); @@ -2353,7 +2333,7 @@ void ASTSlot::visit(DeleteExpressionAST* ast) { case 3: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; case 4: // expression value_ = reinterpret_cast(ast->expression); @@ -2370,7 +2350,7 @@ void ASTSlot::visit(ThrowExpressionAST* ast) { case 0: // throwLoc value_ = ast->throwLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{206}; + slotNameIndex_ = SlotNameIndex{205}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -2387,7 +2367,7 @@ void ASTSlot::visit(NoexceptExpressionAST* ast) { case 0: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{150}; + slotNameIndex_ = SlotNameIndex{149}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -2402,7 +2382,7 @@ void ASTSlot::visit(NoexceptExpressionAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2446,7 +2426,7 @@ void ASTSlot::visit(BracedInitListAST* ast) { case 3: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -2468,7 +2448,7 @@ void ASTSlot::visit(ParenInitializerAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2485,7 +2465,7 @@ void ASTSlot::visit(SimpleRequirementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2507,12 +2487,12 @@ void ASTSlot::visit(CompoundRequirementAST* ast) { case 2: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; case 3: // noexceptLoc value_ = ast->noexceptLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{150}; + slotNameIndex_ = SlotNameIndex{149}; break; case 4: // minusGreaterLoc value_ = ast->minusGreaterLoc.index(); @@ -2522,12 +2502,12 @@ void ASTSlot::visit(CompoundRequirementAST* ast) { case 5: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{210}; + slotNameIndex_ = SlotNameIndex{209}; break; case 6: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2539,7 +2519,7 @@ void ASTSlot::visit(TypeRequirementAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); @@ -2549,12 +2529,12 @@ void ASTSlot::visit(TypeRequirementAST* ast) { case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2566,7 +2546,7 @@ void ASTSlot::visit(NestedRequirementAST* ast) { case 0: // requiresLoc value_ = ast->requiresLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{177}; + slotNameIndex_ = SlotNameIndex{176}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -2576,7 +2556,7 @@ void ASTSlot::visit(NestedRequirementAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2588,7 +2568,7 @@ void ASTSlot::visit(TypeTemplateArgumentAST* ast) { case 0: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -2617,7 +2597,7 @@ void ASTSlot::visit(ParenMemInitializerAST* ast) { case 1: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 2: // lparenLoc value_ = ast->lparenLoc.index(); @@ -2632,7 +2612,7 @@ void ASTSlot::visit(ParenMemInitializerAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -2654,7 +2634,7 @@ void ASTSlot::visit(BracedMemInitializerAST* ast) { case 1: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 2: // bracedInitList value_ = reinterpret_cast(ast->bracedInitList); @@ -2676,7 +2656,7 @@ void ASTSlot::visit(ThisLambdaCaptureAST* ast) { case 0: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{203}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -2688,12 +2668,12 @@ void ASTSlot::visit(DerefThisLambdaCaptureAST* ast) { case 0: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{189}; + slotNameIndex_ = SlotNameIndex{188}; break; case 1: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{203}; + slotNameIndex_ = SlotNameIndex{202}; break; } // switch @@ -2823,7 +2803,7 @@ void ASTSlot::visit(NewParenInitializerAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -2864,7 +2844,7 @@ void ASTSlot::visit(TypeExceptionDeclarationAST* ast) { case 1: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{214}; + slotNameIndex_ = SlotNameIndex{213}; break; case 2: // declarator value_ = reinterpret_cast(ast->declarator); @@ -2891,7 +2871,7 @@ void ASTSlot::visit(DefaultFunctionBodyAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2908,7 +2888,7 @@ void ASTSlot::visit(CompoundStatementFunctionBodyAST* ast) { case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -2920,7 +2900,7 @@ void ASTSlot::visit(TryStatementFunctionBodyAST* ast) { case 0: // tryLoc value_ = ast->tryLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{208}; break; case 1: // ctorInitializer value_ = reinterpret_cast(ast->ctorInitializer); @@ -2930,7 +2910,7 @@ void ASTSlot::visit(TryStatementFunctionBodyAST* ast) { case 2: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; case 3: // handlerList value_ = reinterpret_cast(ast->handlerList); @@ -2957,7 +2937,7 @@ void ASTSlot::visit(DeleteFunctionBodyAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -2996,7 +2976,7 @@ void ASTSlot::visit(ModuleUnitAST* ast) { case 3: // privateModuleFragment value_ = reinterpret_cast(ast->privateModuleFragment); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{161}; + slotNameIndex_ = SlotNameIndex{160}; break; } // switch @@ -3074,7 +3054,7 @@ void ASTSlot::visit(ExpressionStatementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3091,12 +3071,12 @@ void ASTSlot::visit(CompoundStatementAST* ast) { case 1: // statementList value_ = reinterpret_cast(ast->statementList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{191}; + slotNameIndex_ = SlotNameIndex{190}; break; case 2: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -3133,12 +3113,12 @@ void ASTSlot::visit(IfStatementAST* ast) { case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 6: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; case 7: // elseLoc value_ = ast->elseLoc.index(); @@ -3175,7 +3155,7 @@ void ASTSlot::visit(ConstevalIfStatementAST* ast) { case 3: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; case 4: // elseLoc value_ = ast->elseLoc.index(); @@ -3202,7 +3182,7 @@ void ASTSlot::visit(SwitchStatementAST* ast) { case 0: // switchLoc value_ = ast->switchLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{196}; + slotNameIndex_ = SlotNameIndex{195}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -3222,12 +3202,12 @@ void ASTSlot::visit(SwitchStatementAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -3239,7 +3219,7 @@ void ASTSlot::visit(WhileStatementAST* ast) { case 0: // whileLoc value_ = ast->whileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{227}; + slotNameIndex_ = SlotNameIndex{226}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -3254,12 +3234,12 @@ void ASTSlot::visit(WhileStatementAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -3276,12 +3256,12 @@ void ASTSlot::visit(DoStatementAST* ast) { case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; case 2: // whileLoc value_ = ast->whileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{227}; + slotNameIndex_ = SlotNameIndex{226}; break; case 3: // lparenLoc value_ = ast->lparenLoc.index(); @@ -3296,12 +3276,12 @@ void ASTSlot::visit(DoStatementAST* ast) { case 5: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 6: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3328,7 +3308,7 @@ void ASTSlot::visit(ForRangeStatementAST* ast) { case 3: // rangeDeclaration value_ = reinterpret_cast(ast->rangeDeclaration); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{166}; + slotNameIndex_ = SlotNameIndex{165}; break; case 4: // colonLoc value_ = ast->colonLoc.index(); @@ -3338,17 +3318,17 @@ void ASTSlot::visit(ForRangeStatementAST* ast) { case 5: // rangeInitializer value_ = reinterpret_cast(ast->rangeInitializer); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{167}; + slotNameIndex_ = SlotNameIndex{166}; break; case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -3380,7 +3360,7 @@ void ASTSlot::visit(ForStatementAST* ast) { case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 5: // expression value_ = reinterpret_cast(ast->expression); @@ -3390,12 +3370,12 @@ void ASTSlot::visit(ForStatementAST* ast) { case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; } // switch @@ -3412,7 +3392,7 @@ void ASTSlot::visit(BreakStatementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3429,7 +3409,7 @@ void ASTSlot::visit(ContinueStatementAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3441,7 +3421,7 @@ void ASTSlot::visit(ReturnStatementAST* ast) { case 0: // returnLoc value_ = ast->returnLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{179}; + slotNameIndex_ = SlotNameIndex{178}; break; case 1: // expression value_ = reinterpret_cast(ast->expression); @@ -3451,7 +3431,7 @@ void ASTSlot::visit(ReturnStatementAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3473,7 +3453,7 @@ void ASTSlot::visit(GotoStatementAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); @@ -3500,7 +3480,7 @@ void ASTSlot::visit(CoroutineReturnStatementAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3524,12 +3504,12 @@ void ASTSlot::visit(TryBlockStatementAST* ast) { case 0: // tryLoc value_ = ast->tryLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{209}; + slotNameIndex_ = SlotNameIndex{208}; break; case 1: // statement value_ = reinterpret_cast(ast->statement); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{190}; + slotNameIndex_ = SlotNameIndex{189}; break; case 2: // handlerList value_ = reinterpret_cast(ast->handlerList); @@ -3583,7 +3563,7 @@ void ASTSlot::visit(FunctionDefinitionAST* ast) { case 3: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 4: // functionBody value_ = reinterpret_cast(ast->functionBody); @@ -3620,7 +3600,7 @@ void ASTSlot::visit(ConceptDefinitionAST* ast) { case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); @@ -3639,7 +3619,7 @@ void ASTSlot::visit(AliasDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // identifierLoc value_ = ast->identifierLoc.index(); @@ -3659,12 +3639,12 @@ void ASTSlot::visit(AliasDeclarationAST* ast) { case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 6: // identifier value_ = reinterpret_cast(ast->identifier); @@ -3696,12 +3676,12 @@ void ASTSlot::visit(SimpleDeclarationAST* ast) { case 3: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 4: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3723,7 +3703,7 @@ void ASTSlot::visit(StructuredBindingDeclarationAST* ast) { case 2: // refQualifierLoc value_ = ast->refQualifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{173}; + slotNameIndex_ = SlotNameIndex{172}; break; case 3: // lbracketLoc value_ = ast->lbracketLoc.index(); @@ -3738,7 +3718,7 @@ void ASTSlot::visit(StructuredBindingDeclarationAST* ast) { case 5: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; case 6: // initializer value_ = reinterpret_cast(ast->initializer); @@ -3748,7 +3728,7 @@ void ASTSlot::visit(StructuredBindingDeclarationAST* ast) { case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3760,7 +3740,7 @@ void ASTSlot::visit(StaticAssertDeclarationAST* ast) { case 0: // staticAssertLoc value_ = ast->staticAssertLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{192}; + slotNameIndex_ = SlotNameIndex{191}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -3790,12 +3770,12 @@ void ASTSlot::visit(StaticAssertDeclarationAST* ast) { case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3807,7 +3787,7 @@ void ASTSlot::visit(EmptyDeclarationAST* ast) { case 0: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3824,7 +3804,7 @@ void ASTSlot::visit(AttributeDeclarationAST* ast) { case 1: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -3856,7 +3836,7 @@ void ASTSlot::visit(OpaqueEnumDeclarationAST* ast) { case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // enumBase value_ = reinterpret_cast(ast->enumBase); @@ -3919,7 +3899,7 @@ void ASTSlot::visit(NamespaceDefinitionAST* ast) { case 8: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; case 9: // identifier value_ = reinterpret_cast(ast->identifier); @@ -3961,12 +3941,12 @@ void ASTSlot::visit(NamespaceAliasDefinitionAST* ast) { case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 6: // identifier value_ = reinterpret_cast(ast->identifier); @@ -3988,7 +3968,7 @@ void ASTSlot::visit(UsingDirectiveAST* ast) { case 1: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{222}; break; case 2: // namespaceLoc value_ = ast->namespaceLoc.index(); @@ -4003,12 +3983,12 @@ void ASTSlot::visit(UsingDirectiveAST* ast) { case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -4020,17 +4000,17 @@ void ASTSlot::visit(UsingDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // usingDeclaratorList value_ = reinterpret_cast(ast->usingDeclaratorList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{222}; + slotNameIndex_ = SlotNameIndex{221}; break; case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -4042,7 +4022,7 @@ void ASTSlot::visit(UsingEnumDeclarationAST* ast) { case 0: // usingLoc value_ = ast->usingLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{223}; + slotNameIndex_ = SlotNameIndex{222}; break; case 1: // enumTypeSpecifier value_ = reinterpret_cast(ast->enumTypeSpecifier); @@ -4052,7 +4032,7 @@ void ASTSlot::visit(UsingEnumDeclarationAST* ast) { case 2: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -4069,12 +4049,12 @@ void ASTSlot::visit(AsmOperandAST* ast) { case 1: // symbolicNameLoc value_ = ast->symbolicNameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{198}; + slotNameIndex_ = SlotNameIndex{197}; break; case 2: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; case 3: // constraintLiteralLoc value_ = ast->constraintLiteralLoc.index(); @@ -4094,12 +4074,12 @@ void ASTSlot::visit(AsmOperandAST* ast) { case 6: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 7: // symbolicName value_ = reinterpret_cast(ast->symbolicName); slotKind_ = ASTSlotKind::kIdentifierAttribute; - slotNameIndex_ = SlotNameIndex{197}; + slotNameIndex_ = SlotNameIndex{196}; break; case 8: // constraintLiteral value_ = reinterpret_cast(ast->constraintLiteral); @@ -4116,12 +4096,12 @@ void ASTSlot::visit(AsmQualifierAST* ast) { case 0: // qualifierLoc value_ = ast->qualifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{164}; + slotNameIndex_ = SlotNameIndex{163}; break; case 1: // qualifier value_ = intptr_t(ast->qualifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{163}; + slotNameIndex_ = SlotNameIndex{162}; break; } // switch @@ -4192,7 +4172,7 @@ void ASTSlot::visit(AsmDeclarationAST* ast) { case 5: // outputOperandList value_ = reinterpret_cast(ast->outputOperandList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{156}; + slotNameIndex_ = SlotNameIndex{155}; break; case 6: // inputOperandList value_ = reinterpret_cast(ast->inputOperandList); @@ -4212,12 +4192,12 @@ void ASTSlot::visit(AsmDeclarationAST* ast) { case 9: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 10: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 11: // literal value_ = reinterpret_cast(ast->literal); @@ -4266,7 +4246,7 @@ void ASTSlot::visit(ExportCompoundDeclarationAST* ast) { case 3: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -4293,7 +4273,7 @@ void ASTSlot::visit(ModuleImportDeclarationAST* ast) { case 3: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; } // switch @@ -4305,7 +4285,7 @@ void ASTSlot::visit(TemplateDeclarationAST* ast) { case 0: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); @@ -4315,7 +4295,7 @@ void ASTSlot::visit(TemplateDeclarationAST* ast) { case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{202}; + slotNameIndex_ = SlotNameIndex{201}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4325,7 +4305,7 @@ void ASTSlot::visit(TemplateDeclarationAST* ast) { case 4: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 5: // declaration value_ = reinterpret_cast(ast->declaration); @@ -4357,12 +4337,12 @@ void ASTSlot::visit(DeductionGuideAST* ast) { case 3: // parameterDeclarationClause value_ = reinterpret_cast(ast->parameterDeclarationClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{157}; + slotNameIndex_ = SlotNameIndex{156}; break; case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 5: // arrowLoc value_ = ast->arrowLoc.index(); @@ -4372,12 +4352,12 @@ void ASTSlot::visit(DeductionGuideAST* ast) { case 6: // templateId value_ = reinterpret_cast(ast->templateId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{200}; + slotNameIndex_ = SlotNameIndex{199}; break; case 7: // semicolonLoc value_ = ast->semicolonLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{184}; + slotNameIndex_ = SlotNameIndex{183}; break; case 8: // identifier value_ = reinterpret_cast(ast->identifier); @@ -4399,7 +4379,7 @@ void ASTSlot::visit(ExplicitInstantiationAST* ast) { case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 2: // declaration value_ = reinterpret_cast(ast->declaration); @@ -4421,12 +4401,12 @@ void ASTSlot::visit(ParameterDeclarationAST* ast) { case 1: // thisLoc value_ = ast->thisLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{203}; + slotNameIndex_ = SlotNameIndex{202}; break; case 2: // typeSpecifierList value_ = reinterpret_cast(ast->typeSpecifierList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{214}; + slotNameIndex_ = SlotNameIndex{213}; break; case 3: // declarator value_ = reinterpret_cast(ast->declarator); @@ -4463,7 +4443,7 @@ void ASTSlot::visit(LinkageSpecificationAST* ast) { case 1: // stringliteralLoc value_ = ast->stringliteralLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{195}; + slotNameIndex_ = SlotNameIndex{194}; break; case 2: // lbraceLoc value_ = ast->lbraceLoc.index(); @@ -4478,12 +4458,12 @@ void ASTSlot::visit(LinkageSpecificationAST* ast) { case 4: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; case 5: // stringLiteral value_ = reinterpret_cast(ast->stringLiteral); slotKind_ = ASTSlotKind::kLiteralAttribute; - slotNameIndex_ = SlotNameIndex{194}; + slotNameIndex_ = SlotNameIndex{193}; break; } // switch @@ -4495,7 +4475,7 @@ void ASTSlot::visit(TemplateTypeParameterAST* ast) { case 0: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); @@ -4505,7 +4485,7 @@ void ASTSlot::visit(TemplateTypeParameterAST* ast) { case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{202}; + slotNameIndex_ = SlotNameIndex{201}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4515,7 +4495,7 @@ void ASTSlot::visit(TemplateTypeParameterAST* ast) { case 4: // requiresClause value_ = reinterpret_cast(ast->requiresClause); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{176}; + slotNameIndex_ = SlotNameIndex{175}; break; case 5: // classKeyLoc value_ = ast->classKeyLoc.index(); @@ -4552,7 +4532,7 @@ void ASTSlot::visit(TemplatePackTypeParameterAST* ast) { case 0: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); @@ -4562,7 +4542,7 @@ void ASTSlot::visit(TemplatePackTypeParameterAST* ast) { case 2: // templateParameterList value_ = reinterpret_cast(ast->templateParameterList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{202}; + slotNameIndex_ = SlotNameIndex{201}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4631,16 +4611,21 @@ void ASTSlot::visit(TypenameTypeParameterAST* ast) { case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); slotKind_ = ASTSlotKind::kIdentifierAttribute; slotNameIndex_ = SlotNameIndex{98}; break; + case 6: // isPack + value_ = intptr_t(ast->isPack != 0); + slotKind_ = ASTSlotKind::kBoolAttribute; + slotNameIndex_ = SlotNameIndex{114}; + break; } // switch - slotCount_ = 6; + slotCount_ = 7; } void ASTSlot::visit(ConstraintTypeParameterAST* ast) { @@ -4648,7 +4633,7 @@ void ASTSlot::visit(ConstraintTypeParameterAST* ast) { case 0: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{210}; + slotNameIndex_ = SlotNameIndex{209}; break; case 1: // ellipsisLoc value_ = ast->ellipsisLoc.index(); @@ -4668,7 +4653,7 @@ void ASTSlot::visit(ConstraintTypeParameterAST* ast) { case 4: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 5: // identifier value_ = reinterpret_cast(ast->identifier); @@ -4702,7 +4687,7 @@ void ASTSlot::visit(DestructorIdAST* ast) { case 0: // tildeLoc value_ = ast->tildeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{207}; + slotNameIndex_ = SlotNameIndex{206}; break; case 1: // id value_ = reinterpret_cast(ast->id); @@ -4731,17 +4716,17 @@ void ASTSlot::visit(OperatorFunctionIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{155}; + slotNameIndex_ = SlotNameIndex{154}; break; case 1: // opLoc value_ = ast->opLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{152}; + slotNameIndex_ = SlotNameIndex{151}; break; case 2: // openLoc value_ = ast->openLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{153}; + slotNameIndex_ = SlotNameIndex{152}; break; case 3: // closeLoc value_ = ast->closeLoc.index(); @@ -4751,7 +4736,7 @@ void ASTSlot::visit(OperatorFunctionIdAST* ast) { case 4: // op value_ = intptr_t(ast->op); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{151}; + slotNameIndex_ = SlotNameIndex{150}; break; } // switch @@ -4763,7 +4748,7 @@ void ASTSlot::visit(LiteralOperatorIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{155}; + slotNameIndex_ = SlotNameIndex{154}; break; case 1: // literalLoc value_ = ast->literalLoc.index(); @@ -4795,12 +4780,12 @@ void ASTSlot::visit(ConversionFunctionIdAST* ast) { case 0: // operatorLoc value_ = ast->operatorLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{155}; + slotNameIndex_ = SlotNameIndex{154}; break; case 1: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; } // switch @@ -4822,7 +4807,7 @@ void ASTSlot::visit(SimpleTemplateIdAST* ast) { case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{198}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4854,7 +4839,7 @@ void ASTSlot::visit(LiteralOperatorTemplateIdAST* ast) { case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{198}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4871,7 +4856,7 @@ void ASTSlot::visit(OperatorFunctionTemplateIdAST* ast) { case 0: // operatorFunctionId value_ = reinterpret_cast(ast->operatorFunctionId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{154}; + slotNameIndex_ = SlotNameIndex{153}; break; case 1: // lessLoc value_ = ast->lessLoc.index(); @@ -4881,7 +4866,7 @@ void ASTSlot::visit(OperatorFunctionTemplateIdAST* ast) { case 2: // templateArgumentList value_ = reinterpret_cast(ast->templateArgumentList); slotKind_ = ASTSlotKind::kNodeList; - slotNameIndex_ = SlotNameIndex{199}; + slotNameIndex_ = SlotNameIndex{198}; break; case 3: // greaterLoc value_ = ast->greaterLoc.index(); @@ -4898,7 +4883,7 @@ void ASTSlot::visit(TypedefSpecifierAST* ast) { case 0: // typedefLoc value_ = ast->typedefLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{217}; + slotNameIndex_ = SlotNameIndex{216}; break; } // switch @@ -4970,7 +4955,7 @@ void ASTSlot::visit(StaticSpecifierAST* ast) { case 0: // staticLoc value_ = ast->staticLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{193}; + slotNameIndex_ = SlotNameIndex{192}; break; } // switch @@ -4994,7 +4979,7 @@ void ASTSlot::visit(ThreadLocalSpecifierAST* ast) { case 0: // threadLocalLoc value_ = ast->threadLocalLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{205}; + slotNameIndex_ = SlotNameIndex{204}; break; } // switch @@ -5006,7 +4991,7 @@ void ASTSlot::visit(ThreadSpecifierAST* ast) { case 0: // threadLoc value_ = ast->threadLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{204}; + slotNameIndex_ = SlotNameIndex{203}; break; } // switch @@ -5030,7 +5015,7 @@ void ASTSlot::visit(VirtualSpecifierAST* ast) { case 0: // virtualLoc value_ = ast->virtualLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{224}; + slotNameIndex_ = SlotNameIndex{223}; break; } // switch @@ -5057,7 +5042,7 @@ void ASTSlot::visit(ExplicitSpecifierAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5081,7 +5066,7 @@ void ASTSlot::visit(VoidTypeSpecifierAST* ast) { case 0: // voidLoc value_ = ast->voidLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{225}; + slotNameIndex_ = SlotNameIndex{224}; break; } // switch @@ -5093,12 +5078,12 @@ void ASTSlot::visit(SizeTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5110,12 +5095,12 @@ void ASTSlot::visit(SignTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5127,12 +5112,12 @@ void ASTSlot::visit(VaListTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5144,12 +5129,12 @@ void ASTSlot::visit(IntegralTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5161,12 +5146,12 @@ void ASTSlot::visit(FloatingPointTypeSpecifierAST* ast) { case 0: // specifierLoc value_ = ast->specifierLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{188}; + slotNameIndex_ = SlotNameIndex{187}; break; case 1: // specifier value_ = intptr_t(ast->specifier); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5195,12 +5180,12 @@ void ASTSlot::visit(NamedTypeSpecifierAST* ast) { case 1: // templateLoc value_ = ast->templateLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{201}; + slotNameIndex_ = SlotNameIndex{200}; break; case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 3: // isTemplateIntroduced value_ = intptr_t(ast->isTemplateIntroduced != 0); @@ -5227,12 +5212,12 @@ void ASTSlot::visit(AtomicTypeSpecifierAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5244,7 +5229,7 @@ void ASTSlot::visit(UnderlyingTypeSpecifierAST* ast) { case 0: // underlyingTypeLoc value_ = ast->underlyingTypeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{220}; + slotNameIndex_ = SlotNameIndex{219}; break; case 1: // lparenLoc value_ = ast->lparenLoc.index(); @@ -5254,12 +5239,12 @@ void ASTSlot::visit(UnderlyingTypeSpecifierAST* ast) { case 2: // typeId value_ = reinterpret_cast(ast->typeId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{211}; + slotNameIndex_ = SlotNameIndex{210}; break; case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5286,7 +5271,7 @@ void ASTSlot::visit(ElaboratedTypeSpecifierAST* ast) { case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // classKey value_ = intptr_t(ast->classKey); @@ -5318,7 +5303,7 @@ void ASTSlot::visit(DecltypeAutoSpecifierAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5345,7 +5330,7 @@ void ASTSlot::visit(DecltypeSpecifierAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5357,12 +5342,12 @@ void ASTSlot::visit(PlaceholderTypeSpecifierAST* ast) { case 0: // typeConstraint value_ = reinterpret_cast(ast->typeConstraint); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{210}; + slotNameIndex_ = SlotNameIndex{209}; break; case 1: // specifier value_ = reinterpret_cast(ast->specifier); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{187}; + slotNameIndex_ = SlotNameIndex{186}; break; } // switch @@ -5386,7 +5371,7 @@ void ASTSlot::visit(VolatileQualifierAST* ast) { case 0: // volatileLoc value_ = ast->volatileLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{226}; + slotNameIndex_ = SlotNameIndex{225}; break; } // switch @@ -5398,7 +5383,7 @@ void ASTSlot::visit(RestrictQualifierAST* ast) { case 0: // restrictLoc value_ = ast->restrictLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{178}; + slotNameIndex_ = SlotNameIndex{177}; break; } // switch @@ -5430,7 +5415,7 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 4: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 5: // enumBase value_ = reinterpret_cast(ast->enumBase); @@ -5455,7 +5440,7 @@ void ASTSlot::visit(EnumSpecifierAST* ast) { case 9: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; } // switch @@ -5482,7 +5467,7 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 3: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; case 4: // finalLoc value_ = ast->finalLoc.index(); @@ -5507,7 +5492,7 @@ void ASTSlot::visit(ClassSpecifierAST* ast) { case 8: // rbraceLoc value_ = ast->rbraceLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{168}; + slotNameIndex_ = SlotNameIndex{167}; break; case 9: // classKey value_ = intptr_t(ast->classKey); @@ -5529,7 +5514,7 @@ void ASTSlot::visit(TypenameSpecifierAST* ast) { case 0: // typenameLoc value_ = ast->typenameLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{219}; + slotNameIndex_ = SlotNameIndex{218}; break; case 1: // nestedNameSpecifier value_ = reinterpret_cast(ast->nestedNameSpecifier); @@ -5539,7 +5524,7 @@ void ASTSlot::visit(TypenameSpecifierAST* ast) { case 2: // unqualifiedId value_ = reinterpret_cast(ast->unqualifiedId); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{221}; + slotNameIndex_ = SlotNameIndex{220}; break; } // switch @@ -5561,7 +5546,7 @@ void ASTSlot::visit(BitfieldDeclaratorAST* ast) { case 2: // sizeExpression value_ = reinterpret_cast(ast->sizeExpression); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{185}; + slotNameIndex_ = SlotNameIndex{184}; break; case 3: // identifier value_ = reinterpret_cast(ast->identifier); @@ -5622,7 +5607,7 @@ void ASTSlot::visit(NestedDeclaratorAST* ast) { case 2: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5634,7 +5619,7 @@ void ASTSlot::visit(PointerOperatorAST* ast) { case 0: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{189}; + slotNameIndex_ = SlotNameIndex{188}; break; case 1: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5656,7 +5641,7 @@ void ASTSlot::visit(ReferenceOperatorAST* ast) { case 0: // refLoc value_ = ast->refLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{171}; + slotNameIndex_ = SlotNameIndex{170}; break; case 1: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5666,7 +5651,7 @@ void ASTSlot::visit(ReferenceOperatorAST* ast) { case 2: // refOp value_ = intptr_t(ast->refOp); slotKind_ = ASTSlotKind::kIntAttribute; - slotNameIndex_ = SlotNameIndex{172}; + slotNameIndex_ = SlotNameIndex{171}; break; } // switch @@ -5683,7 +5668,7 @@ void ASTSlot::visit(PtrToMemberOperatorAST* ast) { case 1: // starLoc value_ = ast->starLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{189}; + slotNameIndex_ = SlotNameIndex{188}; break; case 2: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5705,12 +5690,12 @@ void ASTSlot::visit(FunctionDeclaratorChunkAST* ast) { case 0: // parametersAndQualifiers value_ = reinterpret_cast(ast->parametersAndQualifiers); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{159}; + slotNameIndex_ = SlotNameIndex{158}; break; case 1: // trailingReturnType value_ = reinterpret_cast(ast->trailingReturnType); slotKind_ = ASTSlotKind::kNode; - slotNameIndex_ = SlotNameIndex{208}; + slotNameIndex_ = SlotNameIndex{207}; break; case 2: // isFinal value_ = intptr_t(ast->isFinal != 0); @@ -5747,7 +5732,7 @@ void ASTSlot::visit(ArrayDeclaratorChunkAST* ast) { case 2: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; case 3: // attributeList value_ = reinterpret_cast(ast->attributeList); @@ -5784,12 +5769,12 @@ void ASTSlot::visit(CxxAttributeAST* ast) { case 4: // rbracketLoc value_ = ast->rbracketLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{170}; + slotNameIndex_ = SlotNameIndex{169}; break; case 5: // rbracket2Loc value_ = ast->rbracket2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{169}; + slotNameIndex_ = SlotNameIndex{168}; break; } // switch @@ -5816,12 +5801,12 @@ void ASTSlot::visit(GccAttributeAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // rparen2Loc value_ = ast->rparen2Loc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{181}; + slotNameIndex_ = SlotNameIndex{180}; break; } // switch @@ -5853,7 +5838,7 @@ void ASTSlot::visit(AlignasAttributeAST* ast) { case 4: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; } // switch @@ -5880,7 +5865,7 @@ void ASTSlot::visit(AsmAttributeAST* ast) { case 3: // rparenLoc value_ = ast->rparenLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{182}; + slotNameIndex_ = SlotNameIndex{181}; break; case 4: // literal value_ = reinterpret_cast(ast->literal); @@ -5902,7 +5887,7 @@ void ASTSlot::visit(ScopedAttributeTokenAST* ast) { case 1: // scopeLoc value_ = ast->scopeLoc.index(); slotKind_ = ASTSlotKind::kToken; - slotNameIndex_ = SlotNameIndex{183}; + slotNameIndex_ = SlotNameIndex{182}; break; case 2: // identifierLoc value_ = ast->identifierLoc.index(); diff --git a/src/parser/cxx/ast_slot.h b/src/parser/cxx/ast_slot.h index 6896e397..f706099c 100644 --- a/src/parser/cxx/ast_slot.h +++ b/src/parser/cxx/ast_slot.h @@ -62,8 +62,6 @@ class ASTSlot final : ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/src/parser/cxx/ast_visitor.h b/src/parser/cxx/ast_visitor.h index e86794ee..b887fa44 100644 --- a/src/parser/cxx/ast_visitor.h +++ b/src/parser/cxx/ast_visitor.h @@ -38,8 +38,6 @@ class ASTVisitor { virtual void visit(InitDeclaratorAST* ast) = 0; virtual void visit(BaseSpecifierAST* ast) = 0; virtual void visit(BaseClauseAST* ast) = 0; - virtual void visit(NewDeclaratorAST* ast) = 0; - virtual void visit(NewTypeIdAST* ast) = 0; virtual void visit(RequiresClauseAST* ast) = 0; virtual void visit(ParameterDeclarationClauseAST* ast) = 0; virtual void visit(ParametersAndQualifiersAST* ast) = 0; diff --git a/src/parser/cxx/default_ast_visitor.cc b/src/parser/cxx/default_ast_visitor.cc index c77fd463..95ec47ff 100644 --- a/src/parser/cxx/default_ast_visitor.cc +++ b/src/parser/cxx/default_ast_visitor.cc @@ -62,14 +62,6 @@ void DefaultASTVisitor::visit(BaseClauseAST* ast) { cxx_runtime_error("visit(BaseClauseAST): not implemented"); } -void DefaultASTVisitor::visit(NewDeclaratorAST* ast) { - cxx_runtime_error("visit(NewDeclaratorAST): not implemented"); -} - -void DefaultASTVisitor::visit(NewTypeIdAST* ast) { - cxx_runtime_error("visit(NewTypeIdAST): not implemented"); -} - void DefaultASTVisitor::visit(RequiresClauseAST* ast) { cxx_runtime_error("visit(RequiresClauseAST): not implemented"); } diff --git a/src/parser/cxx/default_ast_visitor.h b/src/parser/cxx/default_ast_visitor.h index 5e6b9322..abe60626 100644 --- a/src/parser/cxx/default_ast_visitor.h +++ b/src/parser/cxx/default_ast_visitor.h @@ -36,8 +36,6 @@ class DefaultASTVisitor : public ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/src/parser/cxx/parser.cc b/src/parser/cxx/parser.cc index 4d43bd87..6a3ff452 100644 --- a/src/parser/cxx/parser.cc +++ b/src/parser/cxx/parser.cc @@ -2209,70 +2209,73 @@ auto Parser::parse_noexcept_expression(ExpressionAST*& yyast) -> bool { } auto Parser::parse_new_expression(ExpressionAST*& yyast) -> bool { - const auto start = currentLocation(); - - SourceLocation scopeLoc; - - match(TokenKind::T_COLON_COLON, scopeLoc); - - SourceLocation newLoc; - - if (!match(TokenKind::T_NEW, newLoc)) { - rewind(start); + if (!lookat(TokenKind::T_NEW) && + !lookat(TokenKind::T_COLON_COLON, TokenKind::T_NEW)) return false; - } auto ast = new (pool) NewExpressionAST(); yyast = ast; - ast->scopeLoc = scopeLoc; - ast->newLoc = newLoc; + match(TokenKind::T_COLON_COLON, ast->scopeLoc); + expect(TokenKind::T_NEW, ast->newLoc); - const auto after_new_op = currentLocation(); + parse_optional_new_placement(ast->newPlacement); - NewPlacementAST* newPlacement = nullptr; + const auto after_new_placement = currentLocation(); - if (!parse_new_placement(ast->newPlacement)) rewind(after_new_op); + auto lookat_nested_type_id = [&] { + LookaheadParser lookahead{this}; - const auto after_new_placement = currentLocation(); + SourceLocation lparenLoc; + if (!match(TokenKind::T_LPAREN, lparenLoc)) return false; - TypeIdAST* typeId = nullptr; + List* typeSpecifierList = nullptr; + if (!parse_type_specifier_seq(typeSpecifierList)) return false; - SourceLocation lparenLoc; - SourceLocation rparenLoc; + DeclaratorAST* declarator = nullptr; + (void)parse_abstract_declarator(declarator); - if (match(TokenKind::T_LPAREN, lparenLoc) && parse_type_id(typeId) && - match(TokenKind::T_RPAREN, rparenLoc)) { - const auto saved = currentLocation(); + SourceLocation rparenLoc; + if (!match(TokenKind::T_RPAREN, rparenLoc)) return false; - if (!parse_new_initializer(ast->newInitalizer)) rewind(saved); + lookahead.commit(); + + NewInitializerAST* newInitializer = nullptr; + parse_optional_new_initializer(newInitializer); + + ast->lparenLoc = lparenLoc; + ast->typeSpecifierList = typeSpecifierList; + ast->rparenLoc = rparenLoc; + ast->newInitalizer = newInitializer; return true; - } + }; - rewind(after_new_placement); + if (lookat_nested_type_id()) return true; - if (!parse_new_type_id(ast->typeId)) return false; + if (!parse_type_specifier_seq(ast->typeSpecifierList)) + parse_error("expected a type specifier"); - const auto saved = currentLocation(); + (void)parse_abstract_declarator(ast->declarator, /*isNewDeclarator*/ true); - if (!parse_new_initializer(ast->newInitalizer)) rewind(saved); + parse_optional_new_initializer(ast->newInitalizer); return true; } -auto Parser::parse_new_placement(NewPlacementAST*& yyast) -> bool { - SourceLocation lparenLoc; +void Parser::parse_optional_new_placement(NewPlacementAST*& yyast) { + LookaheadParser lookahead{this}; - if (!match(TokenKind::T_LPAREN, lparenLoc)) return false; + SourceLocation lparenLoc; + if (!match(TokenKind::T_LPAREN, lparenLoc)) return; List* expressionList = nullptr; - - if (!parse_expression_list(expressionList)) return false; + if (!parse_expression_list(expressionList)) return; SourceLocation rparenLoc; + if (!match(TokenKind::T_RPAREN, rparenLoc)) return; - if (!match(TokenKind::T_RPAREN, rparenLoc)) return false; + lookahead.commit(); auto ast = new (pool) NewPlacementAST(); yyast = ast; @@ -2280,118 +2283,38 @@ auto Parser::parse_new_placement(NewPlacementAST*& yyast) -> bool { ast->lparenLoc = lparenLoc; ast->expressionList = expressionList; ast->rparenLoc = rparenLoc; - - return true; -} - -auto Parser::parse_new_type_id(NewTypeIdAST*& yyast) -> bool { - List* typeSpecifierList = nullptr; - - if (!parse_type_specifier_seq(typeSpecifierList)) return false; - - auto ast = new (pool) NewTypeIdAST(); - yyast = ast; - - ast->typeSpecifierList = typeSpecifierList; - - const auto saved = currentLocation(); - - if (!parse_new_declarator(ast->newDeclarator)) rewind(saved); - - return true; } -auto Parser::parse_new_declarator(NewDeclaratorAST*& yyast) -> bool { - List* ptrOpList = nullptr; - - const auto hasPtrList = parse_ptr_operator_seq(ptrOpList); - - List* declaratorChunkList = nullptr; - - const auto hasDeclChunks = parse_noptr_new_declarator(declaratorChunkList); - - if (!hasPtrList && !hasDeclChunks) return false; - - auto ast = new (pool) NewDeclaratorAST(); - yyast = ast; - - ast->ptrOpList = ptrOpList; - ast->declaratorChunkList = declaratorChunkList; - - return true; -} - -auto Parser::parse_noptr_new_declarator(List*& yyast) - -> bool { - auto it = &yyast; - - SourceLocation lbracketLoc; - - if (!match(TokenKind::T_LBRACKET, lbracketLoc)) return false; - - auto declarator = new (pool) ArrayDeclaratorChunkAST(); - - declarator->lbracketLoc = lbracketLoc; - - if (!match(TokenKind::T_RBRACKET, declarator->rbracketLoc)) { - parse_expression(declarator->expression); - expect(TokenKind::T_RBRACKET, declarator->rbracketLoc); - } - - parse_optional_attribute_specifier_seq(declarator->attributeList); - - *it = new (pool) List(declarator); - it = &(*it)->next; - - while (match(TokenKind::T_LBRACKET, lbracketLoc)) { - auto declarator = new (pool) ArrayDeclaratorChunkAST(); - *it = new (pool) List(declarator); - it = &(*it)->next; - - declarator->lbracketLoc = lbracketLoc; - - if (!match(TokenKind::T_RBRACKET, declarator->rbracketLoc)) { - ExpressionAST* expression = nullptr; - - if (!parse_constant_expression(declarator->expression)) { - parse_error("expected an expression"); - } - - expect(TokenKind::T_RBRACKET, declarator->rbracketLoc); - } - - parse_optional_attribute_specifier_seq(declarator->attributeList); - } - - return true; -} - -auto Parser::parse_new_initializer(NewInitializerAST*& yyast) -> bool { - BracedInitListAST* bracedInitList = nullptr; - - if (parse_braced_init_list(bracedInitList)) { +void Parser::parse_optional_new_initializer(NewInitializerAST*& yyast) { + if (BracedInitListAST* bracedInitList = nullptr; + parse_braced_init_list(bracedInitList)) { auto ast = new (pool) NewBracedInitializerAST(); yyast = ast; ast->bracedInitList = bracedInitList; - - return true; + return; } + LookaheadParser lookahead{this}; + SourceLocation lparenLoc; + List* expressionList = nullptr; + SourceLocation rparenLoc; - if (!match(TokenKind::T_LPAREN, lparenLoc)) return false; + if (!match(TokenKind::T_LPAREN, lparenLoc)) return; + if (!match(TokenKind::T_RPAREN, rparenLoc)) { + if (!parse_expression_list(expressionList)) return; + if (!match(TokenKind::T_RPAREN, rparenLoc)) return; + } + + lookahead.commit(); auto ast = new (pool) NewParenInitializerAST(); yyast = ast; - if (!match(TokenKind::T_RPAREN, ast->rparenLoc)) { - if (!parse_expression_list(ast->expressionList)) return false; - - if (!match(TokenKind::T_RPAREN, ast->rparenLoc)) return false; - } - - return true; + ast->lparenLoc = lparenLoc; + ast->expressionList = expressionList; + ast->rparenLoc = rparenLoc; } auto Parser::parse_delete_expression(ExpressionAST*& yyast) -> bool { @@ -5263,10 +5186,11 @@ auto Parser::parse_defining_type_id( return true; } -auto Parser::parse_abstract_declarator(DeclaratorAST*& yyast) -> bool { - if (parse_abstract_pack_declarator(yyast)) return true; +auto Parser::parse_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator) -> bool { + if (!isNewDeclarator && parse_abstract_pack_declarator(yyast)) return true; - if (parse_ptr_abstract_declarator(yyast)) return true; + if (parse_ptr_abstract_declarator(yyast, isNewDeclarator)) return true; const auto saved = currentLocation(); @@ -5290,31 +5214,13 @@ auto Parser::parse_abstract_declarator(DeclaratorAST*& yyast) -> bool { rewind(saved); - if (!parse_noptr_abstract_declarator(yyast)) return false; - -#if 0 - const auto after_noptr_declarator = currentLocation(); - - parametersAndQualifiers = nullptr; - trailingReturnType = nullptr; - - if (parse_parameters_and_qualifiers(parametersAndQualifiers) && - parse_trailing_return_type(trailingReturnType)) { - auto functionDeclarator = new (pool) FunctionDeclaratorChunkAST(); - functionDeclarator->parametersAndQualifiers = parametersAndQualifiers; - functionDeclarator->trailingReturnType = trailingReturnType; - - ast->declaratorChunkList = - new (pool) List(functionDeclarator); - } else { - rewind(after_noptr_declarator); - } -#endif + if (!parse_noptr_abstract_declarator(yyast, isNewDeclarator)) return false; return true; } -auto Parser::parse_ptr_abstract_declarator(DeclaratorAST*& yyast) -> bool { +auto Parser::parse_ptr_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator) -> bool { List* ptrOpList = nullptr; if (!parse_ptr_operator_seq(ptrOpList)) return false; @@ -5326,12 +5232,13 @@ auto Parser::parse_ptr_abstract_declarator(DeclaratorAST*& yyast) -> bool { const auto saved = currentLocation(); - if (!parse_noptr_abstract_declarator(yyast)) rewind(saved); + if (!parse_noptr_abstract_declarator(yyast, isNewDeclarator)) rewind(saved); return true; } -auto Parser::parse_noptr_abstract_declarator(DeclaratorAST*& yyast) -> bool { +auto Parser::parse_noptr_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator) -> bool { if (!yyast) yyast = new (pool) DeclaratorAST(); const auto start = currentLocation(); @@ -5342,7 +5249,7 @@ auto Parser::parse_noptr_abstract_declarator(DeclaratorAST*& yyast) -> bool { SourceLocation rparenLoc; if (match(TokenKind::T_LPAREN, lparenLoc) && - parse_ptr_abstract_declarator(declarator) && + parse_ptr_abstract_declarator(declarator, isNewDeclarator) && match(TokenKind::T_RPAREN, rparenLoc)) { auto nestedDeclarator = new (pool) NestedDeclaratorAST(); nestedDeclarator->lparenLoc = lparenLoc; @@ -5360,7 +5267,7 @@ auto Parser::parse_noptr_abstract_declarator(DeclaratorAST*& yyast) -> bool { auto it = &yyast->declaratorChunkList; - if (lookat(TokenKind::T_LPAREN)) { + if (!isNewDeclarator && lookat(TokenKind::T_LPAREN)) { if (parse_parameters_and_qualifiers(parametersAndQualifiers)) { auto functionDeclarator = new (pool) FunctionDeclaratorChunkAST(); diff --git a/src/parser/cxx/parser.h b/src/parser/cxx/parser.h index 26d84166..fc6877a5 100644 --- a/src/parser/cxx/parser.h +++ b/src/parser/cxx/parser.h @@ -200,12 +200,8 @@ class Parser final { [[nodiscard]] auto parse_await_expression(ExpressionAST*& yyast) -> bool; [[nodiscard]] auto parse_noexcept_expression(ExpressionAST*& yyast) -> bool; [[nodiscard]] auto parse_new_expression(ExpressionAST*& yyast) -> bool; - [[nodiscard]] auto parse_new_placement(NewPlacementAST*& yyast) -> bool; - [[nodiscard]] auto parse_new_type_id(NewTypeIdAST*& yyast) -> bool; - [[nodiscard]] auto parse_new_declarator(NewDeclaratorAST*& yyast) -> bool; - [[nodiscard]] auto parse_noptr_new_declarator( - List*& yyast) -> bool; - [[nodiscard]] auto parse_new_initializer(NewInitializerAST*& yyast) -> bool; + void parse_optional_new_placement(NewPlacementAST*& yyast); + void parse_optional_new_initializer(NewInitializerAST*& yyast); [[nodiscard]] auto parse_delete_expression(ExpressionAST*& yyast) -> bool; [[nodiscard]] auto parse_cast_expression(ExpressionAST*& yyast) -> bool; [[nodiscard]] auto parse_cast_expression_helper(ExpressionAST*& yyast) @@ -414,10 +410,14 @@ class Parser final { [[nodiscard]] auto parse_defining_type_id( TypeIdAST*& yyast, const std::vector& templateDeclarations) -> bool; - [[nodiscard]] auto parse_abstract_declarator(DeclaratorAST*& yyast) -> bool; - [[nodiscard]] auto parse_ptr_abstract_declarator(DeclaratorAST*& yyast) + [[nodiscard]] auto parse_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator = false) -> bool; - [[nodiscard]] auto parse_noptr_abstract_declarator(DeclaratorAST*& yyast) + [[nodiscard]] auto parse_ptr_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator) + -> bool; + [[nodiscard]] auto parse_noptr_abstract_declarator(DeclaratorAST*& yyast, + bool isNewDeclarator) -> bool; [[nodiscard]] auto parse_abstract_pack_declarator(DeclaratorAST*& yyast) -> bool; diff --git a/src/parser/cxx/private/ast_decoder.h b/src/parser/cxx/private/ast_decoder.h index 972989af..771e01ba 100644 --- a/src/parser/cxx/private/ast_decoder.h +++ b/src/parser/cxx/private/ast_decoder.h @@ -89,8 +89,6 @@ class ASTDecoder { -> InitDeclaratorAST*; auto decodeBaseSpecifier(const io::BaseSpecifier* node) -> BaseSpecifierAST*; auto decodeBaseClause(const io::BaseClause* node) -> BaseClauseAST*; - auto decodeNewDeclarator(const io::NewDeclarator* node) -> NewDeclaratorAST*; - auto decodeNewTypeId(const io::NewTypeId* node) -> NewTypeIdAST*; auto decodeRequiresClause(const io::RequiresClause* node) -> RequiresClauseAST*; auto decodeParameterDeclarationClause( diff --git a/src/parser/cxx/private/ast_encoder.h b/src/parser/cxx/private/ast_encoder.h index ecb8e4a2..b7a50ba2 100644 --- a/src/parser/cxx/private/ast_encoder.h +++ b/src/parser/cxx/private/ast_encoder.h @@ -141,8 +141,6 @@ class ASTEncoder : ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/src/parser/cxx/recursive_ast_visitor.cc b/src/parser/cxx/recursive_ast_visitor.cc index f821d6d0..da58de6e 100644 --- a/src/parser/cxx/recursive_ast_visitor.cc +++ b/src/parser/cxx/recursive_ast_visitor.cc @@ -77,15 +77,6 @@ void RecursiveASTVisitor::acceptBaseSpecifier(BaseSpecifierAST* ast) { accept(ast); } -void RecursiveASTVisitor::acceptArrayDeclaratorChunk( - ArrayDeclaratorChunkAST* ast) { - accept(ast); -} - -void RecursiveASTVisitor::acceptNewDeclarator(NewDeclaratorAST* ast) { - accept(ast); -} - void RecursiveASTVisitor::acceptParameterDeclaration( ParameterDeclarationAST* ast) { accept(ast); @@ -187,8 +178,6 @@ void RecursiveASTVisitor::acceptNewPlacement(NewPlacementAST* ast) { accept(ast); } -void RecursiveASTVisitor::acceptNewTypeId(NewTypeIdAST* ast) { accept(ast); } - void RecursiveASTVisitor::acceptNewInitializer(NewInitializerAST* ast) { accept(ast); } @@ -343,22 +332,6 @@ void RecursiveASTVisitor::visit(BaseClauseAST* ast) { } } -void RecursiveASTVisitor::visit(NewDeclaratorAST* ast) { - for (auto it = ast->ptrOpList; it; it = it->next) { - acceptPtrOperator(it->value); - } - for (auto it = ast->declaratorChunkList; it; it = it->next) { - acceptArrayDeclaratorChunk(it->value); - } -} - -void RecursiveASTVisitor::visit(NewTypeIdAST* ast) { - for (auto it = ast->typeSpecifierList; it; it = it->next) { - acceptSpecifier(it->value); - } - acceptNewDeclarator(ast->newDeclarator); -} - void RecursiveASTVisitor::visit(RequiresClauseAST* ast) { acceptExpression(ast->expression); } @@ -684,7 +657,10 @@ void RecursiveASTVisitor::visit(CppCastExpressionAST* ast) { void RecursiveASTVisitor::visit(NewExpressionAST* ast) { acceptNewPlacement(ast->newPlacement); - acceptNewTypeId(ast->typeId); + for (auto it = ast->typeSpecifierList; it; it = it->next) { + acceptSpecifier(it->value); + } + acceptDeclarator(ast->declarator); acceptNewInitializer(ast->newInitalizer); } diff --git a/src/parser/cxx/recursive_ast_visitor.h b/src/parser/cxx/recursive_ast_visitor.h index eea4a0d7..1657c7b9 100644 --- a/src/parser/cxx/recursive_ast_visitor.h +++ b/src/parser/cxx/recursive_ast_visitor.h @@ -41,8 +41,6 @@ class RecursiveASTVisitor : public ASTVisitor { virtual void acceptDeclaratorChunk(DeclaratorChunkAST* ast); virtual void acceptRequiresClause(RequiresClauseAST* ast); virtual void acceptBaseSpecifier(BaseSpecifierAST* ast); - virtual void acceptArrayDeclaratorChunk(ArrayDeclaratorChunkAST* ast); - virtual void acceptNewDeclarator(NewDeclaratorAST* ast); virtual void acceptParameterDeclaration(ParameterDeclarationAST* ast); virtual void acceptParameterDeclarationClause( ParameterDeclarationClauseAST* ast); @@ -70,7 +68,6 @@ class RecursiveASTVisitor : public ASTVisitor { virtual void acceptBracedInitList(BracedInitListAST* ast); virtual void acceptIdExpression(IdExpressionAST* ast); virtual void acceptNewPlacement(NewPlacementAST* ast); - virtual void acceptNewTypeId(NewTypeIdAST* ast); virtual void acceptNewInitializer(NewInitializerAST* ast); virtual void acceptTypeConstraint(TypeConstraintAST* ast); virtual void acceptCtorInitializer(CtorInitializerAST* ast); @@ -110,8 +107,6 @@ class RecursiveASTVisitor : public ASTVisitor { void visit(InitDeclaratorAST* ast) override; void visit(BaseSpecifierAST* ast) override; void visit(BaseClauseAST* ast) override; - void visit(NewDeclaratorAST* ast) override; - void visit(NewTypeIdAST* ast) override; void visit(RequiresClauseAST* ast) override; void visit(ParameterDeclarationClauseAST* ast) override; void visit(ParametersAndQualifiersAST* ast) override; diff --git a/tests/unit_tests/ast/new_expression_01.cc b/tests/unit_tests/ast/new_expression_01.cc index cff3e1d2..92110751 100644 --- a/tests/unit_tests/ast/new_expression_01.cc +++ b/tests/unit_tests/ast/new_expression_01.cc @@ -67,11 +67,11 @@ auto make(void* where, T init) { // CHECK-NEXT: id-expression // CHECK-NEXT: unqualified-id: name-id // CHECK-NEXT: identifier: where -// CHECK-NEXT: type-id: new-type-id -// CHECK-NEXT: type-specifier-list -// CHECK-NEXT: named-type-specifier -// CHECK-NEXT: unqualified-id: name-id -// CHECK-NEXT: identifier: T +// CHECK-NEXT: type-specifier-list +// CHECK-NEXT: named-type-specifier +// CHECK-NEXT: unqualified-id: name-id +// CHECK-NEXT: identifier: T +// CHECK-NEXT: declarator: declarator // CHECK-NEXT: new-initalizer: new-braced-initializer // CHECK-NEXT: braced-init-list: braced-init-list // CHECK-NEXT: expression-list @@ -96,11 +96,11 @@ auto make(void* where, T init) { // CHECK-NEXT: id-expression // CHECK-NEXT: unqualified-id: name-id // CHECK-NEXT: identifier: where -// CHECK-NEXT: type-id: new-type-id -// CHECK-NEXT: type-specifier-list -// CHECK-NEXT: named-type-specifier -// CHECK-NEXT: unqualified-id: name-id -// CHECK-NEXT: identifier: T +// CHECK-NEXT: type-specifier-list +// CHECK-NEXT: named-type-specifier +// CHECK-NEXT: unqualified-id: name-id +// CHECK-NEXT: identifier: T +// CHECK-NEXT: declarator: declarator // CHECK-NEXT: new-initalizer: new-paren-initializer // CHECK-NEXT: expression-list // CHECK-NEXT: id-expression