Ignore:
Timestamp:
Dec 3, 2020, 11:30:33 AM (3 years ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
Children:
636d3715, 63ec5fa
Parents:
cd6a6ff
Message:

First attempt to sort alternatives before printing.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/ResolvExpr/AlternativeFinder.cc

    rcd6a6ff r1db306a  
    132132        void printAlts( const AltList &list, std::ostream &os, unsigned int indentAmt ) {
    133133                Indenter indent = { indentAmt };
     134
     135                std::vector<int> idx;
     136                idx.reserve(list.size());
     137                for(int i = 0; i < list.size(); i++) { idx.push_back(i); }
     138
     139                std::sort(idx.begin(), idx.end(), [&list](int lhs_idx, int rhs_idx) -> bool {
     140                        const auto & lhs = list.at(lhs_idx);
     141                        const auto & rhs = list.at(rhs_idx);
     142                        if(lhs.expr->location.startsBefore(rhs.expr->location)) return true;
     143                        if(rhs.expr->location.startsBefore(lhs.expr->location)) return false;
     144
     145                        if(lhs.env.size() < rhs.env.size()) return true;
     146                        if(lhs.env.size() > rhs.env.size()) return false;
     147
     148                        if(lhs.openVars.size() < rhs.openVars.size()) return true;
     149                        if(lhs.openVars.size() > rhs.openVars.size()) return false;
     150
     151                        if(lhs.need.size() < rhs.need.size()) return true;
     152                        if(lhs.need.size() > rhs.need.size()) return false;
     153
     154                        return false;
     155                });
     156
    134157                for ( AltList::const_iterator i = list.begin(); i != list.end(); ++i ) {
    135158                        i->print( os, indent );
     
    17181741                                        std::cerr << std::endl;
    17191742                                )
    1720                                
     1743
    17211744                                if ( thisCost != Cost::infinity ) {
    17221745                                        // count one safe conversion for each value that is thrown away
Note: See TracChangeset for help on using the changeset viewer.