Changes in src/Parser/parser.yy [5e25953:2d019af]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r5e25953 r2d019af 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Mar 15 13:34:17202113 // Update Count : 47 4012 // Last Modified On : Fri Mar 12 15:21:02 2021 13 // Update Count : 4728 14 14 // 15 15 … … 1030 1030 { $$ = new StatementNode( build_compound( (StatementNode *)0 ) ); } 1031 1031 | '{' push 1032 local_label_declaration_opt // GCC, local labels appear at start of block1032 local_label_declaration_opt // GCC, local labels 1033 1033 statement_decl_list // C99, intermix declarations and statements 1034 1034 pop '}' … … 1779 1779 type_qualifier: 1780 1780 type_qualifier_name 1781 | attribute // trick handles most atrribute locations1781 | attribute 1782 1782 ; 1783 1783 … … 2649 2649 } 2650 2650 | ASM '(' string_literal ')' ';' // GCC, global assembler statement 2651 { $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); } 2651 { 2652 $$ = DeclarationNode::newAsmStmt( new StatementNode( build_asm( false, $3, 0 ) ) ); 2653 } 2652 2654 | EXTERN STRINGliteral // C++-style linkage specifier 2653 2655 { … … 2862 2864 // declaring an array of functions versus a pointer to an array of functions. 2863 2865 2864 paren_identifier:2865 identifier2866 { $$ = DeclarationNode::newName( $1 ); }2867 | '(' paren_identifier ')' // redundant parenthesis2868 { $$ = $2; }2869 ;2870 2871 2866 variable_declarator: 2872 2867 paren_identifier attribute_list_opt … … 2879 2874 ; 2880 2875 2876 paren_identifier: 2877 identifier 2878 { $$ = DeclarationNode::newName( $1 ); } 2879 | '(' paren_identifier ')' // redundant parenthesis 2880 { $$ = $2; } 2881 ; 2882 2881 2883 variable_ptr: 2882 2884 ptrref_operator variable_declarator … … 2884 2886 | ptrref_operator type_qualifier_list variable_declarator 2885 2887 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2886 | '(' variable_ptr ')' attribute_list_opt // redundant parenthesis 2887 { $$ = $2->addQualifiers( $4 ); } 2888 | '(' attribute_list variable_ptr ')' attribute_list_opt // redundant parenthesis 2889 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); } 2888 | '(' variable_ptr ')' attribute_list_opt 2889 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis 2890 2890 ; 2891 2891 … … 2895 2895 | '(' variable_ptr ')' array_dimension 2896 2896 { $$ = $2->addArray( $4 ); } 2897 | '(' attribute_list variable_ptr ')' array_dimension 2898 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); } 2899 | '(' variable_array ')' multi_array_dimension // redundant parenthesis 2897 | '(' variable_array ')' multi_array_dimension // redundant parenthesis 2900 2898 { $$ = $2->addArray( $4 ); } 2901 | '(' attribute_list variable_array ')' multi_array_dimension // redundant parenthesis2902 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }2903 2899 | '(' variable_array ')' // redundant parenthesis 2904 2900 { $$ = $2; } 2905 | '(' attribute_list variable_array ')' // redundant parenthesis2906 { $$ = $3->addQualifiers( $2 ); }2907 2901 ; 2908 2902 … … 2910 2904 '(' variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 2911 2905 { $$ = $2->addParamList( $6 ); } 2912 | '(' attribute_list variable_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)2913 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }2914 2906 | '(' variable_function ')' // redundant parenthesis 2915 2907 { $$ = $2; } 2916 | '(' attribute_list variable_function ')' // redundant parenthesis2917 { $$ = $3->addQualifiers( $2 ); }2918 2908 ; 2919 2909 … … 2935 2925 | '(' function_ptr ')' '(' push parameter_type_list_opt pop ')' 2936 2926 { $$ = $2->addParamList( $6 ); } 2937 | '(' attribute_list function_ptr ')' '(' push parameter_type_list_opt pop ')'2938 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }2939 2927 | '(' function_no_ptr ')' // redundant parenthesis 2940 2928 { $$ = $2; } 2941 | '(' attribute_list function_no_ptr ')' // redundant parenthesis2942 { $$ = $3->addQualifiers( $2 ); }2943 2929 ; 2944 2930 … … 2948 2934 | ptrref_operator type_qualifier_list function_declarator 2949 2935 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 2950 | '(' function_ptr ')' attribute_list_opt 2951 { $$ = $2->addQualifiers( $4 ); } 2952 | '(' attribute_list function_ptr ')' attribute_list_opt 2953 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); } 2936 | '(' function_ptr ')' 2937 { $$ = $2; } 2954 2938 ; 2955 2939 … … 2957 2941 '(' function_ptr ')' array_dimension 2958 2942 { $$ = $2->addArray( $4 ); } 2959 | '(' attribute_list function_ptr ')' array_dimension2960 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }2961 2943 | '(' function_array ')' multi_array_dimension // redundant parenthesis 2962 2944 { $$ = $2->addArray( $4 ); } 2963 | '(' attribute_list function_array ')' multi_array_dimension // redundant parenthesis2964 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }2965 2945 | '(' function_array ')' // redundant parenthesis 2966 2946 { $$ = $2; } 2967 | '(' attribute_list function_array ')' // redundant parenthesis2968 { $$ = $3->addQualifiers( $2 ); }2969 2947 ; 2970 2948 … … 2987 2965 | '(' KR_function_ptr ')' '(' push parameter_type_list_opt pop ')' 2988 2966 { $$ = $2->addParamList( $6 ); } 2989 | '(' attribute_list KR_function_ptr ')' '(' push parameter_type_list_opt pop ')'2990 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }2991 2967 | '(' KR_function_no_ptr ')' // redundant parenthesis 2992 2968 { $$ = $2; } 2993 | '(' attribute_list KR_function_no_ptr ')' // redundant parenthesis2994 { $$ = $3->addQualifiers( $2 ); }2995 2969 ; 2996 2970 … … 3002 2976 | '(' KR_function_ptr ')' 3003 2977 { $$ = $2; } 3004 | '(' attribute_list KR_function_ptr ')'3005 { $$ = $3->addQualifiers( $2 ); }3006 2978 ; 3007 2979 … … 3009 2981 '(' KR_function_ptr ')' array_dimension 3010 2982 { $$ = $2->addArray( $4 ); } 3011 | '(' attribute_list KR_function_ptr ')' array_dimension3012 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }3013 2983 | '(' KR_function_array ')' multi_array_dimension // redundant parenthesis 3014 2984 { $$ = $2->addArray( $4 ); } 3015 | '(' attribute_list KR_function_array ')' multi_array_dimension // redundant parenthesis3016 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }3017 2985 | '(' KR_function_array ')' // redundant parenthesis 3018 2986 { $$ = $2; } 3019 | '(' attribute_list KR_function_array ')' // redundant parenthesis3020 { $$ = $3->addQualifiers( $2 ); }3021 2987 ; 3022 2988 … … 3030 2996 // The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays 3031 2997 // and functions versus pointers to arrays and functions. 3032 3033 paren_type:3034 typedef3035 // hide type name in enclosing scope by variable name3036 {3037 // if ( ! typedefTable.existsCurr( *$1->name ) ) {3038 typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" );3039 // } else {3040 // SemanticError( yylloc, string("'") + *$1->name + "' redeclared as different kind of symbol." ); $$ = nullptr;3041 // } // if3042 }3043 | '(' paren_type ')'3044 { $$ = $2; }3045 ;3046 2998 3047 2999 variable_type_redeclarator: … … 3055 3007 ; 3056 3008 3009 paren_type: 3010 typedef 3011 // hide type name in enclosing scope by variable name 3012 { 3013 // if ( ! typedefTable.existsCurr( *$1->name ) ) { 3014 typedefTable.addToEnclosingScope( *$1->name, IDENTIFIER, "ID" ); 3015 // } else { 3016 // SemanticError( yylloc, string("'") + *$1->name + "' redeclared as different kind of symbol." ); $$ = nullptr; 3017 // } // if 3018 } 3019 | '(' paren_type ')' 3020 { $$ = $2; } 3021 ; 3022 3057 3023 type_ptr: 3058 3024 ptrref_operator variable_type_redeclarator … … 3060 3026 | ptrref_operator type_qualifier_list variable_type_redeclarator 3061 3027 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3062 | '(' type_ptr ')' attribute_list_opt // redundant parenthesis 3063 { $$ = $2->addQualifiers( $4 ); } 3064 | '(' attribute_list type_ptr ')' attribute_list_opt // redundant parenthesis 3065 { $$ = $3->addQualifiers( $2 )->addQualifiers( $5 ); } 3028 | '(' type_ptr ')' attribute_list_opt 3029 { $$ = $2->addQualifiers( $4 ); } // redundant parenthesis 3066 3030 ; 3067 3031 … … 3071 3035 | '(' type_ptr ')' array_dimension 3072 3036 { $$ = $2->addArray( $4 ); } 3073 | '(' attribute_list type_ptr ')' array_dimension3074 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }3075 3037 | '(' type_array ')' multi_array_dimension // redundant parenthesis 3076 3038 { $$ = $2->addArray( $4 ); } 3077 | '(' attribute_list type_array ')' multi_array_dimension // redundant parenthesis3078 { $$ = $3->addQualifiers( $2 )->addArray( $5 ); }3079 3039 | '(' type_array ')' // redundant parenthesis 3080 3040 { $$ = $2; } 3081 | '(' attribute_list type_array ')' // redundant parenthesis3082 { $$ = $3->addQualifiers( $2 ); }3083 3041 ; 3084 3042 … … 3088 3046 | '(' type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3) 3089 3047 { $$ = $2->addParamList( $6 ); } 3090 | '(' attribute_list type_ptr ')' '(' push parameter_type_list_opt pop ')' // empty parameter list OBSOLESCENT (see 3)3091 { $$ = $3->addQualifiers( $2 )->addParamList( $7 ); }3092 3048 | '(' type_function ')' // redundant parenthesis 3093 3049 { $$ = $2; } 3094 | '(' attribute_list type_function ')' // redundant parenthesis3095 { $$ = $3->addQualifiers( $2 ); }3096 3050 ; 3097 3051 … … 3118 3072 | ptrref_operator type_qualifier_list identifier_parameter_declarator 3119 3073 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3120 | '(' identifier_parameter_ptr ')' attribute_list_opt // redundant parenthesis3074 | '(' identifier_parameter_ptr ')' attribute_list_opt 3121 3075 { $$ = $2->addQualifiers( $4 ); } 3122 3076 ; … … 3175 3129 | ptrref_operator type_qualifier_list type_parameter_redeclarator 3176 3130 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3177 | '(' type_parameter_ptr ')' attribute_list_opt // redundant parenthesis3131 | '(' type_parameter_ptr ')' attribute_list_opt 3178 3132 { $$ = $2->addQualifiers( $4 ); } 3179 3133 ; … … 3316 3270 | ptrref_operator type_qualifier_list abstract_parameter_declarator 3317 3271 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3318 | '(' abstract_parameter_ptr ')' attribute_list_opt // redundant parenthesis3272 | '(' abstract_parameter_ptr ')' attribute_list_opt 3319 3273 { $$ = $2->addQualifiers( $4 ); } 3320 3274 ; … … 3395 3349 | ptrref_operator type_qualifier_list variable_abstract_declarator 3396 3350 { $$ = $3->addPointer( DeclarationNode::newPointer( $2, $1 ) ); } 3397 | '(' variable_abstract_ptr ')' attribute_list_opt // redundant parenthesis3351 | '(' variable_abstract_ptr ')' attribute_list_opt 3398 3352 { $$ = $2->addQualifiers( $4 ); } 3399 3353 ;
Note:
See TracChangeset
for help on using the changeset viewer.