Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/Resolver.cc

    rb9fa85b re6b42e7  
    12591259                const ast::ThrowStmt *       previsit( const ast::ThrowStmt * );
    12601260                const ast::CatchStmt *       previsit( const ast::CatchStmt * );
    1261                 const ast::CatchStmt *       postvisit( const ast::CatchStmt * );
    12621261                const ast::WaitForStmt *     previsit( const ast::WaitForStmt * );
    12631262
     
    14921491
    14931492        const ast::CatchStmt * Resolver_new::previsit( const ast::CatchStmt * catchStmt ) {
    1494                 // Until we are very sure this invarent (ifs that move between passes have thenPart)
    1495                 // holds, check it. This allows a check for when to decode the mangling.
    1496                 if ( auto ifStmt = catchStmt->body.as<ast::IfStmt>() ) {
    1497                         assert( ifStmt->thenPart );
    1498                 }
    1499                 // Encode the catchStmt so the condition can see the declaration.
     1493                // TODO: This will need a fix for the decl/cond scoping problem.
    15001494                if ( catchStmt->cond ) {
    1501                         ast::CatchStmt * stmt = mutate( catchStmt );
    1502                         stmt->body = new ast::IfStmt( stmt->location, stmt->cond, nullptr, stmt->body );
    1503                         stmt->cond = nullptr;
    1504                         return stmt;
    1505                 }
    1506                 return catchStmt;
    1507         }
    1508 
    1509         const ast::CatchStmt * Resolver_new::postvisit( const ast::CatchStmt * catchStmt ) {
    1510                 // Decode the catchStmt so everything is stored properly.
    1511                 const ast::IfStmt * ifStmt = catchStmt->body.as<ast::IfStmt>();
    1512                 if ( nullptr != ifStmt && nullptr == ifStmt->thenPart ) {
    1513                         assert( ifStmt->cond );
    1514                         assert( ifStmt->elsePart );
    1515                         ast::CatchStmt * stmt = ast::mutate( catchStmt );
    1516                         stmt->cond = ifStmt->cond;
    1517                         stmt->body = ifStmt->elsePart;
    1518                         // ifStmt should be implicately deleted here.
    1519                         return stmt;
     1495                        ast::ptr< ast::Type > boolType = new ast::BasicType{ ast::BasicType::Bool };
     1496                        catchStmt = ast::mutate_field(
     1497                                catchStmt, &ast::CatchStmt::cond,
     1498                                findSingleExpression( catchStmt->cond, boolType, symtab ) );
    15201499                }
    15211500                return catchStmt;
Note: See TracChangeset for help on using the changeset viewer.