Changeset 06d75931 for src/ResolvExpr/CandidateFinder.cpp
- Timestamp:
- Oct 26, 2024, 8:17:20 AM (3 weeks ago)
- 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. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/ResolvExpr/CandidateFinder.cpp
r3a08cb1 r06d75931 2136 2136 } 2137 2137 2138 /// If the target enum is a child, get the offset from the base to the target. 2139 static 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 2138 2152 const ast::Expr * CandidateFinder::makeEnumOffsetCast( const ast::EnumInstType * src, 2139 2153 const ast::EnumInstType * dst, const ast::Expr * expr, Cost minCost ) { … … 2147 2161 ast::CastExpr * castToDst; 2148 2162 if (c<minCost) { 2149 unsigned offset = dstDecl->calChildOffset(dstChild.get());2163 unsigned offset = findChildOffset( dstDecl, dstChild.get()->base ); 2150 2164 if (offset > 0) { 2151 2165 auto untyped = ast::UntypedExpr::createCall( 2152 expr->location, 2153 "?+?", 2166 expr->location, 2167 "?+?", 2154 2168 { new ast::CastExpr( expr->location, 2155 2169 expr,
Note: See TracChangeset
for help on using the changeset viewer.