Changeset 540de412
- Timestamp:
- May 2, 2016, 3:09:08 PM (7 years ago)
- Branches:
- aaron-thesis, arm-eh, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- fbfde843
- Parents:
- d8ba086
- Location:
- src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
rd8ba086 r540de412 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri Apr 29 12:16:11 201612 // Last Modified On : Mon May 02 14:49:01 2016 13 13 // Update Count : 295 14 14 // … … 785 785 } else { 786 786 /// xxx - should this be an assertion? 787 throw SemanticError( "unbound type variable in application ", appExpr );787 throw SemanticError( "unbound type variable: " + tyParm->first + " in application ", appExpr ); 788 788 } // if 789 789 } // if -
src/GenPoly/GenPoly.cc
rd8ba086 r540de412 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // GenPoly.cc -- 7 // GenPoly.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Tue Dec 15 16:11:18 201511 // Last Modified By : Rob Schluntz 12 // Last Modified On : Mon May 02 14:53:33 2016 13 13 // Update Count : 13 14 14 // … … 81 81 return 0; 82 82 } 83 83 84 84 Type *isPolyType( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) { 85 85 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( type ) ) { … … 112 112 return 0; 113 113 } 114 114 115 115 Type *isPolyPtr( Type *type, const TyVarMap &tyVars, const TypeSubstitution *env ) { 116 116 if ( PointerType *ptr = dynamic_cast< PointerType *>( type ) ) { … … 146 146 return isPolyType( type, env ); 147 147 } 148 148 149 149 Type * hasPolyBase( Type *type, const TyVarMap &tyVars, int *levels, const TypeSubstitution *env ) { 150 150 int dummy; … … 192 192 if ( ! fn || fn->get_name() != std::string("*?") ) return 0; 193 193 expr = *untypedExpr->begin_args(); 194 } else if ( CommaExpr *commaExpr = dynamic_cast< CommaExpr* >( expr ) ) { 195 // copy constructors insert comma exprs, look at second argument which contains the variable 196 expr = commaExpr->get_arg2(); 197 continue; 194 198 } else break; 195 199 … … 209 213 } 210 214 } 211 215 212 216 void printTyVarMap( std::ostream &os, const TyVarMap &tyVarMap ) { 213 217 for ( TyVarMap::const_iterator i = tyVarMap.begin(); i != tyVarMap.end(); ++i ) { -
src/GenPoly/PolyMutator.cc
rd8ba086 r540de412 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // PolyMutator.cc -- 7 // PolyMutator.cc -- 8 8 // 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri Aug 14 15:28:50 201512 // Last Modified On : Mon May 02 14:50:58 2016 13 13 // Update Count : 11 14 14 // … … 63 63 env = expr->get_env(); 64 64 } 65 // xxx - should env be cloned (or moved) onto the result of the mutate? 65 66 return expr->acceptMutator( *this ); 66 67 } else { … … 144 145 return untypedExpr; 145 146 } 146 147 147 148 148 149 Initializer *PolyMutator::mutate( SingleInit *singleInit ) { 149 150 singleInit->set_value( mutateExpression( singleInit->get_value() ) ); -
src/InitTweak/FixInit.cc
rd8ba086 r540de412 10 10 // Created On : Wed Jan 13 16:29:30 2016 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri Apr 29 12:25:40201612 // Last Modified On : Mon May 02 14:57:45 2016 13 13 // Update Count : 30 14 14 // … … 61 61 /// true if type does not need to be copy constructed to ensure correctness 62 62 bool skipCopyConstruct( Type * ); 63 private: 64 TypeSubstitution * env; 63 65 }; 64 66 … … 151 153 // wrap each function call so that it is easy to identify nodes that have to be copy constructed 152 154 ImplicitCopyCtorExpr * expr = new ImplicitCopyCtorExpr( appExpr ); 153 // save a copy of the type substitution onto the new node so that it is easy to find. 155 // save the type substitution onto the new node so that it is easy to find. 156 // Ensure it is not deleted with the ImplicitCopyCtorExpr by removing it before deletion. 154 157 // The substitution is needed to obtain the type of temporary variables so that copy constructor 155 158 // calls can be resolved. Normally this is what PolyMutator is for, but the pass that resolves 156 159 // copy constructor calls must be an Indexer. We could alternatively make a PolyIndexer which 157 // saves the environment, or compute the types of temporaries here, but it's m oresimpler to160 // saves the environment, or compute the types of temporaries here, but it's much simpler to 158 161 // save the environment here, and more cohesive to compute temporary variables and resolve copy 159 162 // constructor calls together. 160 163 assert( env ); 161 expr->set_env( env ->clone());164 expr->set_env( env ); 162 165 return expr; 163 166 } … … 178 181 PRINT( std::cerr << "ResolvingCtorDtor " << untyped << std::endl; ) 179 182 ApplicationExpr * resolved = dynamic_cast< ApplicationExpr * >( ResolvExpr::findVoidExpression( untyped, *this ) ); 183 if ( resolved->get_env() ) { 184 env->add( *resolved->get_env() ); 185 } 180 186 181 187 assert( resolved ); … … 190 196 PRINT( std::cerr << "ResolveCopyCtors: " << impCpCtorExpr << std::endl; ) 191 197 Visitor::visit( impCpCtorExpr ); 198 env = impCpCtorExpr->get_env(); // xxx - maybe we really should just have a PolyIndexer... 192 199 193 200 ApplicationExpr * appExpr = impCpCtorExpr->get_callExpr(); … … 246 253 PRINT( std::cerr << "FixCopyCtors: " << impCpCtorExpr << std::endl; ) 247 254 248 // assert( impCpCtorExpr->get_callExpr()->get_env() );249 255 impCpCtorExpr = dynamic_cast< ImplicitCopyCtorExpr * >( Mutator::mutate( impCpCtorExpr ) ); 250 256 assert( impCpCtorExpr ); … … 278 284 returnDecls.clear(); 279 285 impCpCtorExpr->set_callExpr( NULL ); 286 impCpCtorExpr->set_env( NULL ); 280 287 delete impCpCtorExpr; 281 288 … … 311 318 retExpr = deref; 312 319 } 320 // xxx - might need to set env on retExpr... 321 // retExpr->set_env( env->clone() ); 313 322 return retExpr; 314 323 } else { -
src/SynTree/TypeSubstitution.h
rd8ba086 r540de412 10 10 // Created On : Mon May 18 07:44:20 2015 11 11 // Last Modified By : Rob Schluntz 12 // Last Modified On : Fri Apr 29 1 3:50:09201612 // Last Modified On : Fri Apr 29 15:00:20 2016 13 13 // Update Count : 2 14 14 // … … 48 48 void add( FormalIterator formalBegin, FormalIterator formalEnd, ActualIterator actualBegin ); 49 49 50 /// this function is unused... 50 51 template< typename TypeInstListIterator > 51 52 void extract( TypeInstListIterator begin, TypeInstListIterator end, TypeSubstitution &result );
Note: See TracChangeset
for help on using the changeset viewer.