Changeset bdd516a for translator/GenPoly/ScrubTyVars.cc
- Timestamp:
- Apr 28, 2015, 4:21:36 PM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, 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, string, with_gc
- Children:
- 42e2ad7
- Parents:
- ad17ba6a
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
translator/GenPoly/ScrubTyVars.cc
rad17ba6a rbdd516a 4 4 #include "SynTree/Mutator.h" 5 5 #include "SynTree/Type.h" 6 #include "SynTree/Expression.h" 6 7 7 8 8 9 namespace GenPoly { 10 Type * ScrubTyVars::mutate( TypeInstType *typeInst ) { 11 TyVarMap::const_iterator tyVar = tyVars.find( typeInst->get_name() ); 12 if ( doAll || tyVar != tyVars.end() ) { 13 switch( tyVar->second ) { 14 case TypeDecl::Any: 15 case TypeDecl::Dtype: 16 { 17 PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) ); 18 delete typeInst; 19 return ret; 20 } 21 case TypeDecl::Ftype: 22 delete typeInst; 23 return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ); 24 } 25 } 26 return typeInst; 27 } 9 28 10 Type* 11 ScrubTyVars::mutate( TypeInstType *typeInst ) 12 { 13 TyVarMap::const_iterator tyVar = tyVars.find( typeInst->get_name() ); 14 if( doAll || tyVar != tyVars.end() ) { 15 switch( tyVar->second ) { 16 case TypeDecl::Any: 17 case TypeDecl::Dtype: 18 { 19 PointerType *ret = new PointerType( Type::Qualifiers(), new VoidType( typeInst->get_qualifiers() ) ); 20 delete typeInst; 21 return ret; 29 Expression * ScrubTyVars::mutate( SizeofExpr *szeof ) { 30 // sizeof( T ) => T parameter, which is the size of T 31 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( szeof->get_type() ) ) { 32 Expression *expr = new NameExpr( typeInst->get_name() ); 33 return expr; 34 } else { 35 return Mutator::mutate( szeof ); 36 } 22 37 } 23 24 case TypeDecl::Ftype: 25 delete typeInst; 26 return new PointerType( Type::Qualifiers(), new FunctionType( Type::Qualifiers(), true ) ); 38 39 Type * ScrubTyVars::mutate( PointerType *pointer ) { 40 if ( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( pointer->get_base() ) ) { 41 if ( doAll || tyVars.find( typeInst->get_name() ) != tyVars.end() ) { 42 Type *ret = mutate( typeInst ); 43 ret->get_qualifiers() += pointer->get_qualifiers(); 44 pointer->set_base( 0 ); 45 delete pointer; 46 return ret; 47 } 48 } 49 return Mutator::mutate( pointer ); 27 50 } 28 }29 return typeInst;30 }31 32 Type*33 ScrubTyVars::mutate( PointerType *pointer )34 {35 if( TypeInstType *typeInst = dynamic_cast< TypeInstType * >( pointer->get_base() ) ) {36 if( doAll || tyVars.find( typeInst->get_name() ) != tyVars.end() ) {37 Type *ret = mutate( typeInst );38 /// std::cout << "pointer is ";39 /// pointer->print( std::cout );40 /// std::cout << std::endl << "ret is ";41 /// ret->print( std::cout );42 /// std::cout << std::endl;43 ret->get_qualifiers() += pointer->get_qualifiers();44 pointer->set_base( 0 );45 delete pointer;46 return ret;47 }48 }49 return Mutator::mutate( pointer );50 }51 52 51 } // namespace GenPoly
Note: See TracChangeset
for help on using the changeset viewer.