Changes in src/SymTab/Validate.cc [42107b4:b2da0574]
- File:
-
- 1 edited
-
src/SymTab/Validate.cc (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Validate.cc
r42107b4 rb2da0574 48 48 #include "CodeGen/CodeGenerator.h" // for genName 49 49 #include "CodeGen/OperatorTable.h" // for isCtorDtor, isCtorDtorAssign 50 #include "Common/GC.h" // for new_static_root, register_static_root51 50 #include "Common/PassVisitor.h" // for PassVisitor, WithDeclsToAdd 52 51 #include "Common/ScopedMap.h" // for ScopedMap … … 200 199 void addImplicitTypedef( AggDecl * aggDecl ); 201 200 202 typedef ScopedMap< std::string, std::pair< TypedefDecl*, int > > TypedefMap; 201 typedef std::unique_ptr<TypedefDecl> TypedefDeclPtr; 202 typedef ScopedMap< std::string, std::pair< TypedefDeclPtr, int > > TypedefMap; 203 203 typedef std::map< std::string, TypeDecl * > TypeDeclMap; 204 204 TypedefMap typedefNames; … … 312 312 } // if 313 313 // Always remove the hoisted aggregate from the inner structure. 314 GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, shouldHoist ); } );314 GuardAction( [aggregateDecl]() { filter( aggregateDecl->members, shouldHoist, false ); } ); 315 315 } 316 316 … … 373 373 // one void is the only thing in the list; remove it. 374 374 if ( containsVoid ) { 375 delete dwts.front(); 375 376 dwts.clear(); 376 377 } … … 499 500 } 500 501 } 502 deleteAll( td->assertions ); 501 503 td->assertions.clear(); 502 504 } // for … … 614 616 // expand trait instance into all of its members 615 617 expandAssertions( traitInst, back_inserter( type->assertions ) ); 618 delete traitInst; 616 619 } else { 617 620 // pass other assertions through … … 685 688 // grab and remember declaration of size_t 686 689 SizeType = eliminator.pass.typedefNames["size_t"].first->get_base()->clone(); 687 GC::get().register_static_root( SizeType );688 690 } else { 689 691 // xxx - missing global typedef for size_t - default to long unsigned int, even though that may be wrong 690 692 // eventually should have a warning for this case. 691 SizeType = 692 new_static_root<BasicType>( Type::Qualifiers(), BasicType::LongUnsignedInt ); 693 } 694 filter( translationUnit, isTypedef ); 693 SizeType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 694 } 695 filter( translationUnit, isTypedef, true ); 695 696 } 696 697 … … 706 707 ret->attributes.splice( ret->attributes.end(), typeInst->attributes ); 707 708 } else { 709 deleteAll( ret->attributes ); 708 710 ret->attributes.clear(); 709 711 } … … 718 720 mutateAll( rtt->parameters, *visitor ); // recursively fix typedefs on parameters 719 721 } // if 722 delete typeInst; 720 723 return ret; 721 724 } else { … … 759 762 } 760 763 } else { 761 typedefNames[ tyDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );764 typedefNames[ tyDecl->get_name() ] = std::make_pair( TypedefDeclPtr( tyDecl ), scopeLevel ); 762 765 } // if 763 766 … … 803 806 if ( FunctionType *funtype = dynamic_cast<FunctionType *>( objDecl->get_type() ) ) { // function type? 804 807 // replace the current object declaration with a function declaration 805 return new FunctionDecl{ 806 objDecl->get_name(), objDecl->get_storageClasses(), objDecl->get_linkage(), 807 funtype, 0, objDecl->get_attributes(), objDecl->get_funcSpec() }; 808 FunctionDecl * newDecl = new FunctionDecl( objDecl->get_name(), objDecl->get_storageClasses(), objDecl->get_linkage(), funtype, 0, objDecl->get_attributes(), objDecl->get_funcSpec() ); 809 objDecl->get_attributes().clear(); 810 objDecl->set_type( nullptr ); 811 delete objDecl; 812 return newDecl; 808 813 } // if 809 814 return objDecl; … … 829 834 } // if 830 835 return false; 831 } );836 }, true); 832 837 return compoundStmt; 833 838 } … … 837 842 template<typename AggDecl> 838 843 AggDecl *EliminateTypedef::handleAggregate( AggDecl * aggDecl ) { 839 filter( aggDecl->members, isTypedef );844 filter( aggDecl->members, isTypedef, true ); 840 845 return aggDecl; 841 846 } … … 852 857 type = new EnumInstType( Type::Qualifiers(), newDeclEnumDecl->get_name() ); 853 858 } // if 854 TypedefDecl * tyDecl = new TypedefDecl{ aggDecl->get_name(), aggDecl->location, Type::StorageClasses(), type, aggDecl->get_linkage() };855 typedefNames[ aggDecl->get_name() ] = std::make_pair( tyDecl, scopeLevel );859 TypedefDeclPtr tyDecl( new TypedefDecl( aggDecl->get_name(), aggDecl->location, Type::StorageClasses(), type, aggDecl->get_linkage() ) ); 860 typedefNames[ aggDecl->get_name() ] = std::make_pair( std::move( tyDecl ), scopeLevel ); 856 861 } // if 857 862 } … … 967 972 static UniqueName indexName( "_compLit" ); 968 973 969 ObjectDecl * tempvar = new ObjectDecl{ 970 indexName.newName(), storageClasses, LinkageSpec::C, nullptr, compLitExpr->get_result(), compLitExpr->get_initializer() }; 974 ObjectDecl *tempvar = new ObjectDecl( indexName.newName(), storageClasses, LinkageSpec::C, nullptr, compLitExpr->get_result(), compLitExpr->get_initializer() ); 975 compLitExpr->set_result( nullptr ); 976 compLitExpr->set_initializer( nullptr ); 977 delete compLitExpr; 971 978 declsToAddBefore.push_back( tempvar ); // add modified temporary to current block 972 979 return new VariableExpr( tempvar ); … … 1004 1011 // ensure return value is not destructed by explicitly creating an empty ListInit node wherein maybeConstruct is false. 1005 1012 ObjectDecl * newRet = new ObjectDecl( "", Type::StorageClasses(), LinkageSpec::Cforall, 0, tupleType, new ListInit( std::list<Initializer*>(), noDesignators, false ) ); 1013 deleteAll( retVals ); 1006 1014 retVals.clear(); 1007 1015 retVals.push_back( newRet ); … … 1044 1052 if ( NameExpr * nameExpr = dynamic_cast< NameExpr * >( inner->arg ) ) { 1045 1053 if ( labels.count( nameExpr->name ) ) { 1046 return new LabelAddressExpr{ nameExpr->name }; 1054 Label name = nameExpr->name; 1055 delete addrExpr; 1056 return new LabelAddressExpr( name ); 1047 1057 } 1048 1058 }
Note:
See TracChangeset
for help on using the changeset viewer.