Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Parser/StatementNode.cc

    r6d49ea3 r2065609  
    9393                elseb = branches.front();
    9494        } // if
    95        
     95
    9696        std::list< Statement * > init;
    9797        if ( ctl->init != 0 ) {
     
    207207}
    208208
     209WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when ) {
     210        auto node = new WaitForStmt();
     211
     212        WaitForStmt::Target target;
     213        target.function = maybeBuild<Expression>( targetExpr );
     214
     215        ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() );
     216        targetExpr->set_next( nullptr );
     217        buildMoveList< Expression >( next, target.arguments );
     218
     219        delete targetExpr;
     220
     221        node->clauses.push_back( WaitForStmt::Clause{
     222                target,
     223                maybeMoveBuild<Statement >( stmt ),
     224                maybeMoveBuild<Expression>( when )
     225        });
     226
     227        return node;
     228}
     229
     230WaitForStmt * build_waitfor( ExpressionNode * targetExpr, StatementNode * stmt, ExpressionNode * when, WaitForStmt * node ) {
     231        WaitForStmt::Target target;
     232        target.function = maybeBuild<Expression>( targetExpr );
     233
     234        ExpressionNode * next = dynamic_cast<ExpressionNode *>( targetExpr->get_next() );
     235        targetExpr->set_next( nullptr );
     236        buildMoveList< Expression >( next, target.arguments );
     237
     238        delete targetExpr;
     239
     240        node->clauses.push_back( WaitForStmt::Clause{
     241                std::move( target ),
     242                maybeMoveBuild<Statement >( stmt ),
     243                maybeMoveBuild<Expression>( when )
     244        });
     245
     246        return node;
     247}
     248
     249WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when ) {
     250        auto node = new WaitForStmt();
     251
     252        if( timeout ) {
     253                node->timeout.time      = maybeMoveBuild<Expression>( timeout );
     254                node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
     255                node->timeout.condition = maybeMoveBuild<Expression>( when    );
     256        }
     257        else {
     258                node->orelse.statement  = maybeMoveBuild<Statement >( stmt    );
     259                node->orelse.condition  = maybeMoveBuild<Expression>( when    );
     260        }
     261
     262        return node;
     263}
     264
     265WaitForStmt * build_waitfor_timeout( ExpressionNode * timeout, StatementNode * stmt, ExpressionNode * when,  StatementNode * else_stmt, ExpressionNode * else_when ) {
     266        auto node = new WaitForStmt();
     267
     268        node->timeout.time      = maybeMoveBuild<Expression>( timeout );
     269        node->timeout.statement = maybeMoveBuild<Statement >( stmt    );
     270        node->timeout.condition = maybeMoveBuild<Expression>( when    );
     271
     272        node->orelse.statement = maybeMoveBuild<Statement >( else_stmt );
     273        node->orelse.condition = maybeMoveBuild<Expression>( else_when );
     274
     275        return node;
     276}
     277
     278// WaitForStmt::Target build_waitfor( const std::string * name, ExpressionNode * arguments ) {
     279//       return WaitForStmt::Clause{
     280
     281//       };
     282// }
     283
    209284Statement *build_compound( StatementNode *first ) {
    210285        CompoundStmt *cs = new CompoundStmt( noLabels );
Note: See TracChangeset for help on using the changeset viewer.