Changes in src/InitTweak/FixInit.cc [52c14b3:092528b]
- File:
-
- 1 edited
-
src/InitTweak/FixInit.cc (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/InitTweak/FixInit.cc
r52c14b3 r092528b 104 104 virtual void visit( CompoundStmt *compoundStmt ) override; 105 105 virtual void visit( DeclStmt *stmt ) override; 106 107 // don't go into other functions108 virtual void visit( FunctionDecl *decl ) override {}109 110 106 protected: 111 107 ObjectSet curVars; … … 170 166 typedef std::list< OrderedDecls > OrderedDeclsStack; 171 167 172 InsertDtors( LabelFinder & finder ) : finder( finder ),labelVars( finder.vars ) {}168 InsertDtors( LabelFinder & finder ) : labelVars( finder.vars ) {} 173 169 174 170 using Parent::visit; 175 171 176 172 virtual void visit( ObjectDecl * objDecl ) override; 177 virtual void visit( FunctionDecl * funcDecl ) override;178 173 179 174 virtual void visit( CompoundStmt * compoundStmt ) override; … … 183 178 void handleGoto( BranchStmt * stmt ); 184 179 185 LabelFinder & finder;186 180 LabelFinder::LabelMap & labelVars; 187 181 OrderedDeclsStack reverseDeclOrder; … … 324 318 LabelFinder finder; 325 319 InsertDtors inserter( finder ); 320 acceptAll( translationUnit, finder ); 326 321 acceptAll( translationUnit, inserter ); 327 322 } … … 783 778 } 784 779 785 void ObjDeclCollector::visit( CompoundStmt * compoundStmt ) {780 void ObjDeclCollector::visit( CompoundStmt *compoundStmt ) { 786 781 std::set< ObjectDecl * > prevVars = curVars; 787 782 Parent::visit( compoundStmt ); … … 789 784 } 790 785 791 void ObjDeclCollector::visit( DeclStmt * stmt ) {786 void ObjDeclCollector::visit( DeclStmt *stmt ) { 792 787 // keep track of all variables currently in scope 793 788 if ( ObjectDecl * objDecl = dynamic_cast< ObjectDecl * > ( stmt->get_decl() ) ) { … … 833 828 } // if 834 829 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 labels846 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 FunctionDecl852 handleFuncDecl( funcDecl, *this );853 830 } 854 831 … … 975 952 std::set_difference( usedUninit.begin(), usedUninit.end(), unhandled.begin(), unhandled.end(), std::inserter( diff, diff.begin() ) ); 976 953 for ( DeclarationWithType * member : diff ) { 977 emit( "in ", CodeGen::gen PrettyType( 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" ); 978 955 } 979 956 … … 1020 997 } 1021 998 } catch ( SemanticError & error ) { 1022 emit( "in ", CodeGen::gen PrettyType( 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" ); 1023 1000 } 1024 1001 }
Note:
See TracChangeset
for help on using the changeset viewer.