Changeset fba51ab for src/Parser/parser.yy
- Timestamp:
- Feb 15, 2019, 9:59:48 AM (6 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, persistent-indexer, pthread-emulation, qualifiedEnum
- Children:
- ada4575
- Parents:
- 70a3e16 (diff), 85d44c6 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r70a3e16 rfba51ab 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 13 17:56:23 201913 // Update Count : 4 06412 // Last Modified On : Thu Feb 14 22:23:13 2019 13 // Update Count : 4217 14 14 // 15 15 … … 99 99 // distribute declaration_specifier across all declared variables, e.g., static, const, __attribute__. 100 100 DeclarationNode * cur = declList, * cl = (new DeclarationNode)->addType( specifier ); 101 //cur->addType( specifier ); 102 for ( cur = dynamic_cast< DeclarationNode * >( cur->get_next() ); cur != nullptr; cur = dynamic_cast< DeclarationNode * >( cur->get_next() ) ) { 101 for ( cur = dynamic_cast<DeclarationNode *>( cur->get_next() ); cur != nullptr; cur = dynamic_cast<DeclarationNode *>( cur->get_next() ) ) { 103 102 cl->cloneBaseType( cur ); 104 103 } // for 105 104 declList->addType( cl ); 106 // delete cl;107 105 return declList; 108 106 } // distAttr … … 201 199 if ( NameExpr * identifier = dynamic_cast<NameExpr *>(index->get_expr()) ) { 202 200 return forCtrl( type, new string( identifier->name ), start, compop, comp, inc ); 201 } else if ( CommaExpr * commaExpr = dynamic_cast<CommaExpr *>(index->get_expr()) ) { 202 if ( NameExpr * identifier = dynamic_cast<NameExpr *>(commaExpr->arg1 ) ) { 203 return forCtrl( type, new string( identifier->name ), start, compop, comp, inc ); 204 } else { 205 SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); return nullptr; 206 } // if 203 207 } else { 204 208 SemanticError( yylloc, "Expression disallowed. Only loop-index name allowed" ); return nullptr; … … 325 329 %type<en> argument_expression_list argument_expression default_initialize_opt 326 330 %type<ifctl> if_control_expression 327 %type<fctl> for_control_expression 331 %type<fctl> for_control_expression for_control_expression_list 328 332 %type<compop> inclexcl 329 333 %type<en> subrange … … 985 989 // labels cannot be identifiers 0 or 1 or ATTR_IDENTIFIER 986 990 identifier_or_type_name ':' attribute_list_opt statement 987 { 988 $$ = $4->add_label( $1, $3 ); 989 } 991 { $$ = $4->add_label( $1, $3 ); } 990 992 ; 991 993 … … 1003 1005 statement_decl 1004 1006 | statement_decl_list statement_decl 1005 { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; }}1007 { assert( $1 ); $1->set_last( $2 ); $$ = $1; } 1006 1008 ; 1007 1009 … … 1010 1012 { $$ = new StatementNode( $1 ); } 1011 1013 | EXTENSION declaration // GCC 1012 { 1013 distExt( $2 ); 1014 $$ = new StatementNode( $2 ); 1015 } 1014 { distExt( $2 ); $$ = new StatementNode( $2 ); } 1016 1015 | function_definition 1017 1016 { $$ = new StatementNode( $1 ); } 1018 1017 | EXTENSION function_definition // GCC 1019 { 1020 distExt( $2 ); 1021 $$ = new StatementNode( $2 ); 1022 } 1018 { distExt( $2 ); $$ = new StatementNode( $2 ); } 1023 1019 | statement 1024 1020 ; … … 1027 1023 statement 1028 1024 | statement_list_nodecl statement 1029 { if ( $1 != 0 ) { $1->set_last( $2 ); $$ = $1; }}1025 { assert( $1 ); $1->set_last( $2 ); $$ = $1; } 1030 1026 ; 1031 1027 … … 1139 1135 | DO statement WHILE '(' ')' ';' // CFA => do while( 1 ) 1140 1136 { $$ = new StatementNode( build_do_while( new ExpressionNode( build_constantInteger( *new string( "1" ) ) ), $2 ) ); } 1141 | FOR '(' push for_control_expression ')' statement pop1137 | FOR '(' push for_control_expression_list ')' statement pop 1142 1138 { $$ = new StatementNode( build_for( $4, $6 ) ); } 1143 1139 | FOR '(' ')' statement // CFA => for ( ;; ) … … 1145 1141 ; 1146 1142 1143 for_control_expression_list: 1144 for_control_expression 1145 | for_control_expression_list ':' for_control_expression 1146 { $$ = $3; } 1147 ; 1148 1147 1149 for_control_expression: 1148 comma_expression // CFA 1150 ';' comma_expression_opt ';' comma_expression_opt 1151 { $$ = new ForCtrl( (ExpressionNode * )nullptr, $2, $4 ); } 1152 | comma_expression ';' comma_expression_opt ';' comma_expression_opt 1153 { $$ = new ForCtrl( $1, $3, $5 ); } 1154 | declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';' 1155 { $$ = new ForCtrl( $1, $2, $4 ); } 1156 | comma_expression // CFA 1149 1157 { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), 1150 1158 OperKinds::LThan, $1->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); } 1151 | co nstant_expression inclexcl constant_expression// CFA1159 | comma_expression inclexcl comma_expression // CFA 1152 1160 { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); } 1153 | co nstant_expression inclexcl constant_expression '~' constant_expression // CFA1161 | comma_expression inclexcl comma_expression '~' comma_expression // CFA 1154 1162 { $$ = forCtrl( $1, new string( DeclarationNode::anonymous.newName() ), $1->clone(), $2, $3, $5 ); } 1155 1163 | comma_expression ';' comma_expression // CFA 1156 1164 { $$ = forCtrl( $3, $1, new ExpressionNode( build_constantInteger( *new string( "0" ) ) ), 1157 1165 OperKinds::LThan, $3->clone(), new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); } 1158 | comma_expression ';' co nstant_expression inclexcl constant_expression // CFA1166 | comma_expression ';' comma_expression inclexcl comma_expression // CFA 1159 1167 { $$ = forCtrl( $3, $1, $3->clone(), $4, $5, new ExpressionNode( build_constantInteger( *new string( "1" ) ) ) ); } 1160 | comma_expression ';' co nstant_expression inclexcl constant_expression '~' constant_expression // CFA1168 | comma_expression ';' comma_expression inclexcl comma_expression '~' comma_expression // CFA 1161 1169 { $$ = forCtrl( $3, $1, $3->clone(), $4, $5, $7 ); } 1162 | comma_expression ';' comma_expression_opt ';' comma_expression_opt1163 { $$ = new ForCtrl( $1, $3, $5 ); }1164 | ';' comma_expression_opt ';' comma_expression_opt1165 { $$ = new ForCtrl( (ExpressionNode * )nullptr, $2, $4 ); }1166 | declaration comma_expression_opt ';' comma_expression_opt // C99, declaration has ';'1167 { $$ = new ForCtrl( $1, $2, $4 ); }1168 1170 ; 1169 1171
Note: See TracChangeset
for help on using the changeset viewer.