@@ -8277,8 +8277,6 @@ auto Parser::parse_using_declarator_list(List<UsingDeclaratorAST*>*& yyast)
82778277
82788278 if (!parse_using_declarator (declarator)) return false ;
82798279
8280- declarator->isPack = match (TokenKind::T_DOT_DOT_DOT, declarator->ellipsisLoc );
8281-
82828280 *it = make_list_node (pool_, declarator);
82838281 it = &(*it)->next ;
82848282
@@ -8287,9 +8285,6 @@ auto Parser::parse_using_declarator_list(List<UsingDeclaratorAST*>*& yyast)
82878285 while (match (TokenKind::T_COMMA, commaLoc)) {
82888286 if (UsingDeclaratorAST* declarator = nullptr ;
82898287 parse_using_declarator (declarator)) {
8290- declarator->isPack =
8291- match (TokenKind::T_DOT_DOT_DOT, declarator->ellipsisLoc );
8292-
82938288 *it = make_list_node (pool_, declarator);
82948289 it = &(*it)->next ;
82958290 } else {
@@ -8316,10 +8311,30 @@ auto Parser::parse_using_declarator(UsingDeclaratorAST*& yyast) -> bool {
83168311 /* inRequiresClause*/ false ))
83178312 return false ;
83188313
8314+ auto name = convertName (unqualifiedId);
8315+
8316+ SourceLocation ellipsisLoc;
8317+ auto isPack = match (TokenKind::T_DOT_DOT_DOT, ellipsisLoc);
8318+
83198319 yyast = make_node<UsingDeclaratorAST>(pool_);
83208320 yyast->typenameLoc = typenameLoc;
83218321 yyast->nestedNameSpecifier = nestedNameSpecifier;
83228322 yyast->unqualifiedId = unqualifiedId;
8323+ yyast->ellipsisLoc = ellipsisLoc;
8324+ yyast->isPack = isPack;
8325+
8326+ auto target = Lookup{scope_}.lookup (nestedNameSpecifier, name);
8327+
8328+ auto symbol = control_->newUsingDeclarationSymbol (
8329+ scope_, unqualifiedId->firstSourceLocation ());
8330+
8331+ yyast->symbol = symbol;
8332+
8333+ symbol->setName (name);
8334+ symbol->setDeclarator (yyast);
8335+ symbol->setTarget (target);
8336+
8337+ std::invoke (DeclareSymbol{this , scope_}, symbol);
83238338
83248339 return true ;
83258340}
0 commit comments