Ignore:
Timestamp:
Oct 26, 2024, 8:17:20 AM (3 weeks ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
master
Children:
14c31eb
Parents:
3a08cb1 (diff), d031f7f (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/CandidateFinder.cpp

    r3a08cb1 r06d75931  
    21362136}
    21372137
     2138/// If the target enum is a child, get the offset from the base to the target.
     2139static unsigned findChildOffset(
     2140                const ast::EnumDecl * decl, const ast::EnumDecl * target ) {
     2141        unsigned offset = 0;
     2142        for ( auto inlined : decl->inlinedDecl ) {
     2143                auto childDecl = inlined->base;
     2144                if ( childDecl == target ) {
     2145                        return offset;
     2146                }
     2147                offset += childDecl->members.size();
     2148        }
     2149        SemanticError( decl, "Cannot find the target enum." );
     2150}
     2151
    21382152const ast::Expr * CandidateFinder::makeEnumOffsetCast( const ast::EnumInstType * src,
    21392153        const ast::EnumInstType * dst, const ast::Expr * expr, Cost minCost ) {
     
    21472161                ast::CastExpr * castToDst;
    21482162                if (c<minCost) {
    2149                         unsigned offset = dstDecl->calChildOffset(dstChild.get());
     2163                        unsigned offset = findChildOffset( dstDecl, dstChild.get()->base );
    21502164                        if (offset > 0) {
    21512165                                auto untyped = ast::UntypedExpr::createCall(
    2152                                         expr->location, 
    2153                                         "?+?", 
     2166                                        expr->location,
     2167                                        "?+?",
    21542168                                        { new ast::CastExpr( expr->location,
    21552169                                                expr,
Note: See TracChangeset for help on using the changeset viewer.