Ignore:
Timestamp:
Aug 10, 2020, 7:45:18 PM (23 months ago)
Author:
Fangren Yu <f37yu@…>
Branches:
arm-eh, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast, new-ast-unique-expr
Children:
22f94a4
Parents:
ba662b9
Message:

attempt to fix inferparams

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/SatisfyAssertions.cpp

    rba662b9 r07d867b  
    188188
    189189                                matches.emplace_back(
    190                                         cdata, adjType, std::move( newEnv ), std::move( newNeed ), std::move( have ),
     190                                        cdata, adjType, std::move( newEnv ), std::move( have ), std::move( newNeed ),
    191191                                        std::move( newOpen ), crntResnSlot );
    192192                        }
     
    231231                const ast::Expr * postvisit( const ast::Expr * expr ) {
    232232                        // Skip if no slots to find
    233                         if ( expr->inferred.mode != ast::Expr::InferUnion::Slots ) return expr;
    234 
     233                        if ( !expr->inferred.hasSlots() ) return expr;
     234                        // if ( expr->inferred.mode != ast::Expr::InferUnion::Slots ) return expr;
     235                        std::vector<UniqueId> missingSlots;
    235236                        // find inferred parameters for resolution slots
    236                         ast::InferredParams newInferred;
     237                        ast::InferredParams * newInferred = new ast::InferredParams();
    237238                        for ( UniqueId slot : expr->inferred.resnSlots() ) {
    238239                                // fail if no matching assertions found
     
    240241                                if ( it == inferred.end() ) {
    241242                                        std::cerr << "missing assertion " << slot << std::endl;
     243                                        missingSlots.push_back(slot);
    242244                                        continue;
    243245                                }
     
    247249                                        // recurse on inferParams of resolved expressions
    248250                                        entry.second.expr = postvisit( entry.second.expr );
    249                                         auto res = newInferred.emplace( entry );
     251                                        auto res = newInferred->emplace( entry );
    250252                                        assert( res.second && "all assertions newly placed" );
    251253                                }
     
    253255
    254256                        ast::Expr * ret = mutate( expr );
    255                         ret->inferred.set_inferParams( std::move( newInferred ) );
     257                        ret->inferred.set_inferParams( newInferred );
     258                        if (!missingSlots.empty()) ret->inferred.resnSlots() = missingSlots;
    256259                        return ret;
    257260                }
Note: See TracChangeset for help on using the changeset viewer.