Changes in / [18d7aaf:ce0b8b8]


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/CandidateFinder.cpp

    r18d7aaf rce0b8b8  
    522522                                                                CandidateFinder subFinder( context, env );
    523523                                                                expr = subFinder.makeEnumOffsetCast(argAsEnum, paramAsEnum, expr, c);
    524                                                                 if ( expr )
    525                                                                         results.emplace_back(
    526                                                                                 i, expr, std::move( env ), std::move( need ), std::move( have ), std::move( open ),
    527                                                                                 nextArg + 1, nTuples, expl.cost + c, expl.exprs.size() == 1 ? 0 : 1, j );
     524                                                                results.emplace_back(
     525                                                                        i, expr, std::move( env ), std::move( need ), std::move( have ), std::move( open ),
     526                                                                        nextArg + 1, nTuples, expl.cost + c, expl.exprs.size() == 1 ? 0 : 1, j );
    528527                                                                continue;
    529528                                                        } else {
     
    12661265                                CandidateFinder subFinder(context, tenv);
    12671266                                ast::ptr<ast::Expr> offsetExpr = subFinder.makeEnumOffsetCast(argAsEnum, toAsEnum, cand->expr, thisCost);
    1268                                 if ( offsetExpr )
    1269                                         cand->expr = offsetExpr;
     1267                                cand->expr = offsetExpr;
    12701268                        }
    12711269
     
    21532151
    21542152const ast::Expr * CandidateFinder::makeEnumOffsetCast( const ast::EnumInstType * src,
    2155         const ast::EnumInstType * dst, const ast::Expr * expr, Cost minCost ) {
     2153        const ast::EnumInstType * dst,
     2154        const ast::Expr * expr,
     2155        Cost minCost ) {
     2156       
    21562157        auto srcDecl = src->base;
    21572158        auto dstDecl = dst->base;
     
    21782179                                CandidateRef & choice = winners.front();
    21792180                                choice->expr = new ast::CastExpr(expr->location, choice->expr, dstChild, ast::GeneratedFlag::ExplicitCast);
    2180                                 auto destExpr = makeEnumOffsetCast( src, dstChild, choice->expr, minCost );
    2181                                 if ( !destExpr ) continue;
    2182                                 castToDst = new ast::CastExpr( destExpr, dst );
     2181                                castToDst = new ast::CastExpr(
     2182                                        makeEnumOffsetCast( src, dstChild, choice->expr, minCost ),
     2183                                        dst);
    21832184                        } else {
    21842185                                castToDst = new ast::CastExpr( expr, dst );
     
    21872188                }
    21882189        }
     2190        SemanticError(expr, src->base->name + " is not a subtype of " + dst->base->name);
    21892191        return nullptr;
    21902192}
Note: See TracChangeset for help on using the changeset viewer.