Changes in src/Parser/parser.yy [30aab55:446740a]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r30aab55 r446740a 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 11:17:15202413 // Update Count : 65 9912 // Last Modified On : Mon Mar 11 18:30:03 2024 13 // Update Count : 6589 14 14 // 15 15 … … 2742 2742 2743 2743 enum_type: 2744 // anonymous, no type name 2745 ENUM attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2746 { 2747 if ( $3 == EnumHiding::Hide ) { 2748 SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; 2749 } // if 2750 $$ = DeclarationNode::newEnum( nullptr, $5, true, false )->addQualifiers( $2 ); 2751 } 2752 // pure enumeration 2753 | ENUM '(' ')' attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2754 { 2755 if ( $5 == EnumHiding::Hide ) { 2756 SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; 2757 } // 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 2744 ENUM attribute_list_opt '{' enumerator_list comma_opt '}' 2745 { $$ = DeclarationNode::newEnum( nullptr, $4, true, false )->addQualifiers( $2 ); } 2746 | ENUM attribute_list_opt '!' '{' enumerator_list comma_opt '}' // invalid syntax rule 2769 2747 { SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; } 2770 2771 // type name2772 2748 | ENUM attribute_list_opt identifier 2773 2749 { typedefTable.makeTypedef( *$3, "enum_type 1" ); } … … 2776 2752 | ENUM attribute_list_opt typedef_name hide_opt '{' enumerator_list comma_opt '}' // unqualified type name 2777 2753 { $$ = 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 2754 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '{' enumerator_list comma_opt '}' 2755 { 2756 if ( $3->storageClasses.val != 0 || $3->type->qualifiers.any() ) { 2757 SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); 2758 } 2759 $$ = DeclarationNode::newEnum( nullptr, $7, true, true, $3 )->addQualifiers( $5 ); 2760 } 2761 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt '!' '{' enumerator_list comma_opt '}' // unqualified type name 2762 { SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; } 2763 | ENUM '(' ')' attribute_list_opt '{' enumerator_list comma_opt '}' 2764 { 2765 $$ = DeclarationNode::newEnum( nullptr, $6, true, true )->addQualifiers( $4 ); 2766 } 2767 | ENUM '(' ')' attribute_list_opt '!' '{' enumerator_list comma_opt '}' // invalid syntax rule 2768 { SemanticError( yylloc, "syntax error, hiding ('!') the enumerator names of an anonymous enumeration means the names are inaccessible." ); $$ = nullptr; } 2790 2769 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt identifier attribute_list_opt 2791 2770 { … … 2793 2772 SemanticError( yylloc, "syntax error, storage-class and CV qualifiers are not meaningful for enumeration constants, which are const." ); 2794 2773 } 2795 typedefTable.makeTypedef( *$6, "enum_type 3" );2774 typedefTable.makeTypedef( *$6, "enum_type 2" ); 2796 2775 } 2797 2776 hide_opt '{' enumerator_list comma_opt '}' … … 2799 2778 $$ = DeclarationNode::newEnum( $6, $11, true, true, $3, $9 )->addQualifiers( $5 )->addQualifiers( $7 ); 2800 2779 } 2780 | ENUM '(' ')' attribute_list_opt identifier attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2781 { 2782 $$ = DeclarationNode::newEnum( $5, $9, true, true, nullptr, $7 )->addQualifiers( $4 )->addQualifiers( $6 ); 2783 } 2801 2784 | ENUM '(' cfa_abstract_parameter_declaration ')' attribute_list_opt typedef_name attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2802 2785 { 2803 2786 $$ = DeclarationNode::newEnum( $6->name, $10, true, true, $3, $8 )->addQualifiers( $5 )->addQualifiers( $7 ); 2804 2787 } 2805 2806 // forward declaration 2788 | ENUM '(' ')' attribute_list_opt typedef_name attribute_list_opt hide_opt '{' enumerator_list comma_opt '}' 2789 { 2790 $$ = DeclarationNode::newEnum( $5->name, $9, true, true, nullptr, $7 )->addQualifiers( $4 )->addQualifiers( $6 ); 2791 } 2807 2792 | enum_type_nobody 2808 2793 ;
Note:
See TracChangeset
for help on using the changeset viewer.