Changes in src/Parser/parser.yy [f678c53b:525f7ad]
- File:
-
- 1 edited
-
src/Parser/parser.yy (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
rf678c53b r525f7ad 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jun 17 21:43:02202413 // Update Count : 664 312 // Last Modified On : Tue Jun 11 21:32:15 2024 13 // Update Count : 6641 14 14 // 15 15 … … 284 284 } // forCtrl 285 285 286 ForCtrl * enumRangeCtrl( ExpressionNode * index_expr, ExpressionNode * range_over_expr ) { 287 if ( auto identifier = dynamic_cast<ast::NameExpr *>(index_expr->expr.get()) ) { 288 DeclarationNode * indexDecl = 289 DeclarationNode::newName( new std::string(identifier->name) ); 290 assert( range_over_expr ); 291 auto node = new StatementNode( indexDecl ); // <- this cause this error 292 return new ForCtrl( node, range_over_expr ); 293 } else if (auto commaExpr = dynamic_cast<ast::CommaExpr *>( index_expr->expr.get() )) { 294 if ( auto identifier = commaExpr->arg1.as<ast::NameExpr>() ) { 295 assert( range_over_expr ); 296 DeclarationNode * indexDecl = distAttr( 297 DeclarationNode::newTypeof( range_over_expr, true ), 298 DeclarationNode::newName( new std::string( identifier->name) ) ); 299 return new ForCtrl( new StatementNode( indexDecl ), range_over_expr ); 300 } else { 301 SemanticError( yylloc, "syntax error, loop-index name missing. Expression disallowed." ); return nullptr; 302 } // if 303 } else { 304 SemanticError( yylloc, "syntax error, loop-index name missing. Expression disallowed." ); return nullptr; 305 } // if 306 } // enumRangeCtrl 307 286 308 static void IdentifierBeforeIdentifier( string & identifier1, string & identifier2, const char * kind ) { 287 309 SemanticError( yylloc, "syntax error, adjacent identifiers \"%s\" and \"%s\" are not meaningful in an %s.\n" … … 368 390 %token DECIMAL32 DECIMAL64 DECIMAL128 // GCC 369 391 %token ZERO_T ONE_T // CFA 370 %token SIZEOF TYPEOF VA_LIST VA_ARG AUTO_TYPE // GCC392 %token SIZEOF TYPEOF VA_LIST VA_ARG AUTO_TYPE COUNT // GCC 371 393 %token OFFSETOF BASETYPEOF TYPEID // CFA 372 394 %token ENUM STRUCT UNION … … 968 990 // $$ = new ExpressionNode( build_offsetOf( $3, build_varref( $5 ) ) ); 969 991 } 992 | COUNT '(' type ')' 993 { 994 // SemanticError( yylloc, "Count is currently unimplemented. "); $$ = nullptr; 995 $$ = new ExpressionNode( new ast::CountExpr( yylloc, maybeMoveBuildType( $3 ) ) ); 996 } 970 997 ; 971 998 … … 1599 1626 { SemanticError( yylloc, "syntax error, missing low/high value for up/down-to range so index is uninitialized." ); $$ = nullptr; } 1600 1627 1601 | comma_expression ';' enum_key // CFA, enum type 1602 { 1603 SemanticError( yylloc, "Type iterator is currently unimplemented." ); $$ = nullptr; 1604 //$$ = forCtrl( new ExpressionNode( build_varref( $3 ) ), $1, nullptr, OperKinds::Range, nullptr, nullptr ); 1605 } 1606 | comma_expression ';' downupdowneq enum_key // CFA, enum type, reverse direction 1628 | comma_expression ';' enum_type // CFA, enum type 1629 { 1630 $$ = enumRangeCtrl( $1, new ExpressionNode( new ast::TypeExpr(yylloc, $3->buildType() ) ) ); 1631 } 1632 | comma_expression ';' downupdowneq enum_type // CFA, enum type, reverse direction 1607 1633 { 1608 1634 if ( $3 == OperKinds::LEThan || $3 == OperKinds::GEThan ) { … … 1611 1637 SemanticError( yylloc, "Type iterator is currently unimplemented." ); $$ = nullptr; 1612 1638 } 1613 ;1614 1615 enum_key:1616 TYPEDEFname1617 | ENUM identifier_or_type_name1618 1639 ; 1619 1640 … … 4008 4029 // 4009 4030 // The pattern precludes declaring an array of functions versus a pointer to an array of functions, and returning arrays 4010 // and functions versus pointers to arrays and functions. In addition, the pattern handles the special meaning of4011 // parenthesis around a typedef name:4031 // and functions versus pointers to arrays and functions. In addition, the pattern handles the 4032 // special meaning of parenthesis around a typedef name: 4012 4033 // 4013 4034 // ISO/IEC 9899:1999 Section 6.7.5.3(11) : "In a parameter declaration, a single typedef name in
Note:
See TracChangeset
for help on using the changeset viewer.