@@ -420,6 +420,13 @@ export class Demangler {
420
420
default : ( ) => ( { } ) ,
421
421
} ) ;
422
422
}
423
+ parse_template_parameter_index ( ) {
424
+ const num = this . parse_integer ( ) ;
425
+ const parm_index = num & ~ ( - 1n << 12n ) ;
426
+ const parm_nesting = ( num >> 12n ) & ~ ( - 1n << 8n ) ;
427
+ const parm_cumulative_parent_number = ( num >> 20n ) & ~ ( - 1n << 10n ) ;
428
+ return { parm_index, parm_nesting, parm_cumulative_parent_number } ;
429
+ }
423
430
parse_template_argument ( ) {
424
431
return this . parse ( "non-type template argument" ) ( {
425
432
'A' : ( ) => {
@@ -470,15 +477,9 @@ export class Demangler {
470
477
'O' : error ,
471
478
'P' : todo ,
472
479
'Q' : todo ,
473
- 'R' : ( ) => {
474
- const num = this . parse_integer ( ) ;
475
- const parm_index = num & ~ ( - 1n << 12n ) ;
476
- const parm_nesting = ( num >> 12n ) & ~ ( - 1n << 8n ) ;
477
- const parm_cumulative_parent_number = ( num >> 20n ) & ~ ( - 1n << 10n ) ;
478
- return { typekind : 'template argument' , argkind : 'parameter' , parm_index, parm_nesting, parm_cumulative_parent_number } ;
479
- } ,
480
+ 'R' : ( ) => ( { typekind : 'template argument' , argkind : 'parameter' , ...this . parse_template_parameter_index ( ) } ) ,
480
481
'S' : ( ) => ( { typekind : 'template argument' , argkind : 'empty non-type' } ) ,
481
- 'T' : todo ,
482
+ 'T' : ( ) => ( { typekind : 'template argument' , argkind : 'parameter pack' , ... this . parse_template_parameter_index ( ) } ) ,
482
483
'0' : ( ) => ( { typekind : 'template argument' , argkind : 'integral' , value : this . parse_integer ( ) } ) ,
483
484
'1' : ( ) => ( { typekind : 'template argument' , argkind : 'entity' , entity : this . parse_mangled ( ) } ) ,
484
485
'2' : ( ) => this . parse_class_non_type_template_argument ( ) ,
@@ -846,6 +847,7 @@ function print_template_argument(ast) {
846
847
case 'alias' :
847
848
return print_qualified_name ( ast . typename ) ;
848
849
case 'parameter' :
850
+ case 'parameter pack' :
849
851
if ( ast . parm_nesting > 1 )
850
852
return quoted ( `T-${ ast . parm_nesting } -${ ast . parm_index } ` ) ;
851
853
return quoted ( `T${ ast . parm_index } ` ) ;
0 commit comments