Changeset 6d2b3dc for src/Parser
- Timestamp:
- Jul 3, 2024, 5:32:06 PM (3 months ago)
- Branches:
- master
- Children:
- 39cf5cc
- Parents:
- 597f284
- Location:
- src/Parser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Parser/StatementNode.cpp
r597f284 r6d2b3dc 216 216 return new ast::ForStmt( location, 217 217 std::move( astinit ), 218 range_over, forctl->kind == OperKinds::L Than,218 range_over, forctl->kind == OperKinds::LEThan, 219 219 buildMoveSingle( stmt ), 220 220 buildMoveOptional( else_ ) -
src/Parser/parser.yy
r597f284 r6d2b3dc 275 275 } // forCtrl 276 276 277 ForCtrl * enumRangeCtrl( ExpressionNode * index_expr, __attribute__((unused)) OperKinds compop, ExpressionNode * range_over_expr ) { 277 ForCtrl * enumRangeCtrl( ExpressionNode * index_expr, OperKinds compop, ExpressionNode * range_over_expr, DeclarationNode * type ) { 278 assert( compop == OperKinds::LEThan || compop == OperKinds::GEThan ); 278 279 if ( auto identifier = dynamic_cast<ast::NameExpr *>(index_expr->expr.get()) ) { 279 DeclarationNode * indexDecl = DeclarationNode::newName( new std::string(identifier->name) );280 assert( range_over_expr);280 DeclarationNode * indexDecl = 281 DeclarationNode::newName( new std::string(identifier->name) )->addType( type ); 281 282 return new ForCtrl( new StatementNode( indexDecl ), range_over_expr, compop ); 282 283 } else { … … 1605 1606 { SemanticError( yylloc, "illegal syntax, missing low/high value for ascending/descending range so index is uninitialized." ); $$ = nullptr; } 1606 1607 1607 | comma_expression ';' enum_key// CFA, enum type1608 { 1609 $$ = enumRangeCtrl( $1, OperKinds::LEThan, new ExpressionNode( new ast::TypeExpr( yylloc, $3-> buildType() ) ));1608 | comma_expression ';' type_type_specifier // CFA, enum type 1609 { 1610 $$ = enumRangeCtrl( $1, OperKinds::LEThan, new ExpressionNode( new ast::TypeExpr( yylloc, $3->clone()->buildType() ) ), $3 ); 1610 1611 } 1611 1612 | comma_expression ';' downupdowneq enum_key // CFA, enum type, reverse direction … … 1615 1616 $3 = OperKinds::GEThan; 1616 1617 } // if 1617 $$ = enumRangeCtrl( $1, $3, new ExpressionNode( new ast::TypeExpr( yylloc, $4-> buildType() ) ));1618 $$ = enumRangeCtrl( $1, $3, new ExpressionNode( new ast::TypeExpr( yylloc, $4->clone()->buildType() ) ), $4 ); 1618 1619 } 1619 1620 ; … … 1621 1622 enum_key: 1622 1623 type_name 1623 { $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false ); } 1624 { typedefTable.makeTypedef( *$1->symbolic.name, "enum_type_nobody 1" ); 1625 $$ = DeclarationNode::newEnum( $1->symbolic.name, nullptr, false, false ); } 1624 1626 | ENUM identifier 1625 { $$ = DeclarationNode::newEnum( $2, nullptr, false, false ); } 1627 { typedefTable.makeTypedef( *$2, "enum_type_nobody 2" ); 1628 $$ = DeclarationNode::newEnum( $2, nullptr, false, false ); } 1626 1629 | ENUM type_name 1627 { $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false ); } 1630 { typedefTable.makeTypedef( *$2->symbolic.name, "enum_type_nobody 3" ); 1631 $$ = DeclarationNode::newEnum( $2->symbolic.name, nullptr, false, false ); } 1628 1632 ; 1629 1633
Note: See TracChangeset
for help on using the changeset viewer.