Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/InitTweak/FixInit.cc

    r52c14b3 r092528b  
    104104                        virtual void visit( CompoundStmt *compoundStmt ) override;
    105105                        virtual void visit( DeclStmt *stmt ) override;
    106 
    107                         // don't go into other functions
    108                         virtual void visit( FunctionDecl *decl ) override {}
    109 
    110106                  protected:
    111107                        ObjectSet curVars;
     
    170166                        typedef std::list< OrderedDecls > OrderedDeclsStack;
    171167
    172                         InsertDtors( LabelFinder & finder ) : finder( finder ), labelVars( finder.vars ) {}
     168                        InsertDtors( LabelFinder & finder ) : labelVars( finder.vars ) {}
    173169
    174170                        using Parent::visit;
    175171
    176172                        virtual void visit( ObjectDecl * objDecl ) override;
    177                         virtual void visit( FunctionDecl * funcDecl ) override;
    178173
    179174                        virtual void visit( CompoundStmt * compoundStmt ) override;
     
    183178                        void handleGoto( BranchStmt * stmt );
    184179
    185                         LabelFinder & finder;
    186180                        LabelFinder::LabelMap & labelVars;
    187181                        OrderedDeclsStack reverseDeclOrder;
     
    324318                        LabelFinder finder;
    325319                        InsertDtors inserter( finder );
     320                        acceptAll( translationUnit, finder );
    326321                        acceptAll( translationUnit, inserter );
    327322                }
     
    783778                }
    784779
    785                 void ObjDeclCollector::visit( CompoundStmt * compoundStmt ) {
     780                void ObjDeclCollector::visit( CompoundStmt *compoundStmt ) {
    786781                        std::set< ObjectDecl * > prevVars = curVars;
    787782                        Parent::visit( compoundStmt );
     
    789784                }
    790785
    791                 void ObjDeclCollector::visit( DeclStmt * stmt ) {
     786                void ObjDeclCollector::visit( DeclStmt *stmt ) {
    792787                        // keep track of all variables currently in scope
    793788                        if ( ObjectDecl * objDecl = dynamic_cast< ObjectDecl * > ( stmt->get_decl() ) ) {
     
    833828                        } // if
    834829                        Parent::visit( objDecl );
    835                 }
    836 
    837                 template< typename Visitor >
    838                 void handleFuncDecl( FunctionDecl * funcDecl, Visitor & visitor ) {
    839                         maybeAccept( funcDecl->get_functionType(), visitor );
    840                         acceptAll( funcDecl->get_oldDecls(), visitor );
    841                         maybeAccept( funcDecl->get_statements(), visitor );
    842                 }
    843 
    844                 void InsertDtors::visit( FunctionDecl * funcDecl ) {
    845                         // each function needs to have its own set of labels
    846                         ValueGuard< LabelFinder::LabelMap > oldLabels( labelVars );
    847                         labelVars.clear();
    848                         handleFuncDecl( funcDecl, finder );
    849 
    850                         // all labels for this function have been collected, insert destructors as appropriate.
    851                         // can't be Parent::mutate, because ObjDeclCollector bottoms out on FunctionDecl
    852                         handleFuncDecl( funcDecl, *this );
    853830                }
    854831
     
    975952                        std::set_difference( usedUninit.begin(), usedUninit.end(), unhandled.begin(), unhandled.end(), std::inserter( diff, diff.begin() ) );
    976953                        for ( DeclarationWithType * member : diff ) {
    977                                 emit( "in ", CodeGen::genPrettyType( function->get_functionType(), function->get_name() ), ", field ", member->get_name(), " used before being constructed" );
     954                                emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", field ", member->get_name(), " used before being constructed" );
    978955                        }
    979956
     
    1020997                                                        }
    1021998                                                } catch ( SemanticError & error ) {
    1022                                                         emit( "in ", CodeGen::genPrettyType( function->get_functionType(), function->get_name() ), ", field ", field->get_name(), " not explicitly ", isCtor ? "constructed" : "destructed",  " and no ", isCtor ? "default constructor" : "destructor", " found" );
     999                                                        emit( "in ", CodeGen::genType( function->get_functionType(), function->get_name(), false ), ", field ", field->get_name(), " not explicitly ", isCtor ? "constructed" : "destructed",  " and no ", isCtor ? "default constructor" : "destructor", " found" );
    10231000                                                }
    10241001                                        }
Note: See TracChangeset for help on using the changeset viewer.