- specifier_qualifier_list struct_or_variant_declarator_list SEMICOLON
- | specifier_qualifier_list TYPEDEF specifier_qualifier_list type_declarator_list SEMICOLON
- | TYPEDEF specifier_qualifier_list type_declarator_list SEMICOLON
- | specifier_qualifier_list TYPEDEF type_declarator_list SEMICOLON
- | TYPEALIAS specifier_qualifier_list abstract_declarator_list COLON specifier_qualifier_list abstract_type_declarator_list SEMICOLON
- | TYPEALIAS specifier_qualifier_list abstract_declarator_list COLON type_declarator_list SEMICOLON
+ declaration_specifiers struct_or_variant_declarator_list SEMICOLON
+ {
+ $$ = make_node(scanner, NODE_STRUCT_OR_VARIANT_DECLARATION);
+ _cds_list_splice_tail(&($1)->tmp_head, &($$)->u.struct_or_variant_declaration.declaration_specifier);
+ _cds_list_splice_tail(&($2)->tmp_head, &($$)->u.struct_or_variant_declaration.type_declarators);
+ }
+ | declaration_specifiers TYPEDEF declaration_specifiers type_declarator_list SEMICOLON
+ {
+ $$ = make_node(scanner, NODE_TYPEDEF);
+ _cds_list_splice_tail(&($1)->tmp_head, &($$)->u._typedef.declaration_specifier);
+ _cds_list_splice_tail(&($3)->tmp_head, &($$)->u._typedef.declaration_specifier);
+ _cds_list_splice_tail(&($4)->tmp_head, &($$)->u._typedef.type_declarators);
+ }
+ | TYPEDEF declaration_specifiers type_declarator_list SEMICOLON
+ {
+ $$ = make_node(scanner, NODE_TYPEDEF);
+ _cds_list_splice_tail(&($2)->tmp_head, &($$)->u._typedef.declaration_specifier);
+ _cds_list_splice_tail(&($3)->tmp_head, &($$)->u._typedef.type_declarators);
+ }
+ | declaration_specifiers TYPEDEF type_declarator_list SEMICOLON
+ {
+ $$ = make_node(scanner, NODE_TYPEDEF);
+ _cds_list_splice_tail(&($1)->tmp_head, &($$)->u._typedef.declaration_specifier);
+ _cds_list_splice_tail(&($3)->tmp_head, &($$)->u._typedef.type_declarators);
+ }
+ | TYPEALIAS declaration_specifiers abstract_declarator_list COLON alias_declaration_specifiers alias_abstract_declarator_list SEMICOLON
+ {
+ $$ = make_node(scanner, NODE_TYPEALIAS);
+ $$->u.typealias.target = make_node(scanner, NODE_TYPEALIAS_TARGET);
+ $$->u.typealias.alias = make_node(scanner, NODE_TYPEALIAS_ALIAS);
+ _cds_list_splice_tail(&($2)->tmp_head, &($$)->u.typealias.target->u.typealias_target.declaration_specifier);
+ _cds_list_splice_tail(&($3)->tmp_head, &($$)->u.typealias.target->u.typealias_target.type_declarators);
+ _cds_list_splice_tail(&($5)->tmp_head, &($$)->u.typealias.alias->u.typealias_alias.declaration_specifier);
+ _cds_list_splice_tail(&($6)->tmp_head, &($$)->u.typealias.alias->u.typealias_alias.type_declarators);
+ }