Changes in src/GenPoly/Specialize.cc [d5baf0c:07de76b]
- File:
-
- 1 edited
-
src/GenPoly/Specialize.cc (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Specialize.cc
rd5baf0c r07de76b 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Thr Jul 2 17:42:00 202013 // Update Count : 3 311 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Dec 13 23:40:49 2019 13 // Update Count : 32 14 14 // 15 15 … … 42 42 43 43 namespace GenPoly { 44 struct Specialize final : public WithConstTypeSubstitution, 45 public WithDeclsToAdd, public WithVisitorRef<Specialize> { 44 struct Specialize final : public WithConstTypeSubstitution, public WithStmtsToAdd, public WithVisitorRef<Specialize> { 46 45 Expression * postmutate( ApplicationExpr *applicationExpr ); 47 46 Expression * postmutate( CastExpr *castExpr ); … … 249 248 } // if 250 249 251 // Handle any specializations that may still be present. 252 { 253 std::string oldParamPrefix = paramPrefix; 254 paramPrefix += "p"; 255 std::list< Declaration * > oldDecls; 256 oldDecls.splice( oldDecls.end(), declsToAddBefore ); 257 258 appExpr->acceptMutator( *visitor ); 259 // Write recursive specializations into the thunk body. 260 for ( Declaration * decl : declsToAddBefore ) { 261 thunkFunc->statements->kids.push_back( new DeclStmt( decl ) ); 262 } 263 264 declsToAddBefore = std::move( oldDecls ); 265 paramPrefix = oldParamPrefix; 266 } 250 // handle any specializations that may still be present 251 std::string oldParamPrefix = paramPrefix; 252 paramPrefix += "p"; 253 // save stmtsToAddBefore in oldStmts 254 std::list< Statement* > oldStmts; 255 oldStmts.splice( oldStmts.end(), stmtsToAddBefore ); 256 appExpr->acceptMutator( *visitor ); 257 paramPrefix = oldParamPrefix; 258 // write any statements added for recursive specializations into the thunk body 259 thunkFunc->statements->kids.splice( thunkFunc->statements->kids.end(), stmtsToAddBefore ); 260 // restore oldStmts into stmtsToAddBefore 261 stmtsToAddBefore.splice( stmtsToAddBefore.end(), oldStmts ); 267 262 268 263 // add return (or valueless expression) to the thunk … … 275 270 thunkFunc->statements->kids.push_back( appStmt ); 276 271 277 // Add the thunk definition (converted to DeclStmt if appproprate).278 declsToAddBefore.push_back( thunkFunc);272 // add thunk definition to queue of statements to add 273 stmtsToAddBefore.push_back( new DeclStmt( thunkFunc ) ); 279 274 // return address of thunk function as replacement expression 280 275 return new AddressExpr( new VariableExpr( thunkFunc ) );
Note:
See TracChangeset
for help on using the changeset viewer.