Changeset 525f7ad for src/Parser/parser.yy
- Timestamp:
- Jun 19, 2024, 3:20:39 PM (4 months ago)
- Branches:
- master
- Children:
- 57e43cd
- Parents:
- 1725989
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/parser.yy
r1725989 r525f7ad 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 392 %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
Note: See TracChangeset
for help on using the changeset viewer.