Changeset 42422fb for src/Parser
- Timestamp:
- Mar 16, 2024, 6:41:24 PM (5 months ago)
- Branches:
- master
- Children:
- 8f650f0
- Parents:
- 30ee3155
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r30ee3155 r42422fb 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Mar 16 1 1:17:15202413 // Update Count : 6 59912 // Last Modified On : Sat Mar 16 18:19:23 2024 13 // Update Count : 6617 14 14 // 15 15 … … 485 485 %type<decl> elaborated_type elaborated_type_nobody 486 486 487 %type<decl> enumerator_list enum_type enum_type_nobody 487 %type<decl> enumerator_list enum_type enum_type_nobody enumerator_type 488 488 %type<init> enumerator_value_opt 489 489 … … 2750 2750 $$ = DeclarationNode::newEnum( nullptr, $5, true, false )->addQualifiers( $2 ); 2751 2751 } 2752 // pure enumeration 2753 | ENUM '(' ')' attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2754 { 2755 if ( $5 == EnumHiding::Hide ) { 2752 | ENUM enumerator_type attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2753 { 2754 if ( $2 && ($2->storageClasses.val != 0 || $2->type->qualifiers.any()) ) { 2755 SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); 2756 } 2757 if ( $4 == EnumHiding::Hide ) { 2756 2758 SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; 2757 2759 } // if 2758 $$ = DeclarationNode::newEnum( nullptr, $7, true, true )->addQualifiers( $4 ); 2759 } 2760 // typed enumeration 2761 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '{' enumerator_list comma_opt '}' 2762 { 2763 if ( $3->storageClasses.val != 0 || $3->type->qualifiers.any() ) { 2764 SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); 2765 } 2766 $$ = DeclarationNode::newEnum( nullptr, $7, true, true, $3 )->addQualifiers( $5 ); 2767 } 2768 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '!' '{' enumerator_list comma_opt '}' // unqualified type name 2769 { SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; } 2770 2771 // type name 2760 $$ = DeclarationNode::newEnum( nullptr, $6, true, true, $2 )->addQualifiers( $3 ); 2761 } 2762 2763 // named type 2772 2764 | ENUM attribute_list_opt identifier 2773 2765 { typedefTable.makeTypedef( *$3, "enum_type 1" ); } … … 2776 2768 | ENUM attribute_list_opt typedef_name hide_opt '{' enumerator_list comma_opt '}' // unqualified type name 2777 2769 { $$ = DeclarationNode::newEnum( $3->name, $6, true, false, nullptr, $4 )->addQualifiers( $2 ); } 2778 // pure enumeration 2779 | ENUM '(' ')' attribute_list_opt identifier attribute_list_opt 2780 { typedefTable.makeTypedef( *$5, "enum_type 2" ); } 2781 hide_opt '{' enumerator_list comma_opt '}' 2782 { 2783 $$ = DeclarationNode::newEnum( $5, $10, true, true, nullptr, $8 )->addQualifiers( $4 )->addQualifiers( $6 ); 2784 } 2785 | ENUM '(' ')' attribute_list_opt typedef_name attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2786 { 2787 $$ = DeclarationNode::newEnum( $5->name, $9, true, true, nullptr, $7 )->addQualifiers( $4 )->addQualifiers( $6 ); 2788 } 2789 // typed enumeration 2790 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt 2791 { 2792 if ( $3 && ($3->storageClasses.any() || $3->type->qualifiers.val != 0) ) { 2770 | ENUM enumerator_type attribute_list_opt identifier attribute_list_opt 2771 { 2772 if ( $2 && ($2->storageClasses.any() || $2->type->qualifiers.val != 0) ) { 2793 2773 SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); 2794 2774 } 2795 typedefTable.makeTypedef( *$ 6, "enum_type 3" );2775 typedefTable.makeTypedef( *$4, "enum_type 2" ); 2796 2776 } 2797 2777 hide_opt '{' enumerator_list comma_opt '}' 2798 { 2799 $$ = DeclarationNode::newEnum( $6, $11, true, true, $3, $9 )->addQualifiers( $5 )->addQualifiers( $7 ); 2800 } 2801 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt typedef_name attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2802 { 2803 $$ = DeclarationNode::newEnum( $6->name, $10, true, true, $3, $8 )->addQualifiers( $5 )->addQualifiers( $7 ); 2804 } 2778 { $$ = DeclarationNode::newEnum( $4, $9, true, true, $2, $7 )->addQualifiers( $3 )->addQualifiers( $5 ); } 2779 | ENUM enumerator_type attribute_list_opt typedef_name attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2780 { $$ = DeclarationNode::newEnum( $4->name, $8, true, true, $2, $6 )->addQualifiers( $3 )->addQualifiers( $5 ); } 2805 2781 2806 2782 // forward declaration 2807 2783 | enum_type_nobody 2784 ; 2785 2786 enumerator_type: 2787 '(' ')' // pure enumeration 2788 { $$ = nullptr; } 2789 | '(' cfa_abstract_parameter_declaration ')' // typed enumeration 2790 { $$ = $2; } 2808 2791 ; 2809 2792
Note: See TracChangeset
for help on using the changeset viewer.