- Timestamp:
- Nov 19, 2015, 6:06:27 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:
- 839ccbb
- Parents:
- e56cfdb0 (diff), 258eb5c9 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- src
- Files:
-
- 2 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/module.mk
re56cfdb0 r05587c2 22 22 GenPoly/Specialize.cc \ 23 23 GenPoly/CopyParams.cc \ 24 GenPoly/FindFunction.cc 24 GenPoly/FindFunction.cc \ 25 GenPoly/InstantiateGeneric.cc -
src/Makefile.in
re56cfdb0 r05587c2 121 121 GenPoly/cfa_cpp-CopyParams.$(OBJEXT) \ 122 122 GenPoly/cfa_cpp-FindFunction.$(OBJEXT) \ 123 GenPoly/cfa_cpp-InstantiateGeneric.$(OBJEXT) \ 123 124 InitTweak/cfa_cpp-InitModel.$(OBJEXT) \ 124 125 InitTweak/cfa_cpp-InitExpander.$(OBJEXT) \ … … 347 348 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ 348 349 GenPoly/CopyParams.cc GenPoly/FindFunction.cc \ 349 InitTweak/InitModel.cc InitTweak/InitExpander.cc \350 InitTweak/ Mutate.cc InitTweak/Association.cc \351 InitTweak/ RemoveInit.cc Parser/parser.yy Parser/lex.ll\352 Parser/ TypedefTable.cc Parser/ParseNode.cc \353 Parser/ DeclarationNode.cc Parser/ExpressionNode.cc \354 Parser/ StatementNode.cc Parser/InitializerNode.cc \355 Parser/ TypeData.cc Parser/LinkageSpec.cc \356 Parser/ parseutility.cc Parser/Parser.cc \350 GenPoly/InstantiateGeneric.cc InitTweak/InitModel.cc \ 351 InitTweak/InitExpander.cc InitTweak/Mutate.cc \ 352 InitTweak/Association.cc InitTweak/RemoveInit.cc \ 353 Parser/parser.yy Parser/lex.ll Parser/TypedefTable.cc \ 354 Parser/ParseNode.cc Parser/DeclarationNode.cc \ 355 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 356 Parser/InitializerNode.cc Parser/TypeData.cc \ 357 Parser/LinkageSpec.cc Parser/parseutility.cc Parser/Parser.cc \ 357 358 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 358 359 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 553 554 GenPoly/$(DEPDIR)/$(am__dirstamp) 554 555 GenPoly/cfa_cpp-FindFunction.$(OBJEXT): GenPoly/$(am__dirstamp) \ 556 GenPoly/$(DEPDIR)/$(am__dirstamp) 557 GenPoly/cfa_cpp-InstantiateGeneric.$(OBJEXT): GenPoly/$(am__dirstamp) \ 555 558 GenPoly/$(DEPDIR)/$(am__dirstamp) 556 559 InitTweak/$(am__dirstamp): … … 784 787 -rm -f GenPoly/cfa_cpp-FindFunction.$(OBJEXT) 785 788 -rm -f GenPoly/cfa_cpp-GenPoly.$(OBJEXT) 789 -rm -f GenPoly/cfa_cpp-InstantiateGeneric.$(OBJEXT) 786 790 -rm -f GenPoly/cfa_cpp-Lvalue.$(OBJEXT) 787 791 -rm -f GenPoly/cfa_cpp-PolyMutator.$(OBJEXT) … … 893 897 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/cfa_cpp-FindFunction.Po@am__quote@ 894 898 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/cfa_cpp-GenPoly.Po@am__quote@ 899 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Po@am__quote@ 895 900 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/cfa_cpp-Lvalue.Po@am__quote@ 896 901 @AMDEP_TRUE@@am__include@ @am__quote@GenPoly/$(DEPDIR)/cfa_cpp-PolyMutator.Po@am__quote@ … … 1357 1362 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/cfa_cpp-FindFunction.obj `if test -f 'GenPoly/FindFunction.cc'; then $(CYGPATH_W) 'GenPoly/FindFunction.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/FindFunction.cc'; fi` 1358 1363 1364 GenPoly/cfa_cpp-InstantiateGeneric.o: GenPoly/InstantiateGeneric.cc 1365 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/cfa_cpp-InstantiateGeneric.o -MD -MP -MF GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1366 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Po 1367 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/cfa_cpp-InstantiateGeneric.o' libtool=no @AMDEPBACKSLASH@ 1368 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1369 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/cfa_cpp-InstantiateGeneric.o `test -f 'GenPoly/InstantiateGeneric.cc' || echo '$(srcdir)/'`GenPoly/InstantiateGeneric.cc 1370 1371 GenPoly/cfa_cpp-InstantiateGeneric.obj: GenPoly/InstantiateGeneric.cc 1372 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/cfa_cpp-InstantiateGeneric.obj -MD -MP -MF GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Tpo -c -o GenPoly/cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi` 1373 @am__fastdepCXX_TRUE@ $(am__mv) GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Tpo GenPoly/$(DEPDIR)/cfa_cpp-InstantiateGeneric.Po 1374 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='GenPoly/InstantiateGeneric.cc' object='GenPoly/cfa_cpp-InstantiateGeneric.obj' libtool=no @AMDEPBACKSLASH@ 1375 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1376 @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o GenPoly/cfa_cpp-InstantiateGeneric.obj `if test -f 'GenPoly/InstantiateGeneric.cc'; then $(CYGPATH_W) 'GenPoly/InstantiateGeneric.cc'; else $(CYGPATH_W) '$(srcdir)/GenPoly/InstantiateGeneric.cc'; fi` 1377 1359 1378 InitTweak/cfa_cpp-InitModel.o: InitTweak/InitModel.cc 1360 1379 @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT InitTweak/cfa_cpp-InitModel.o -MD -MP -MF InitTweak/$(DEPDIR)/cfa_cpp-InitModel.Tpo -c -o InitTweak/cfa_cpp-InitModel.o `test -f 'InitTweak/InitModel.cc' || echo '$(srcdir)/'`InitTweak/InitModel.cc -
src/Parser/TypeData.cc
re56cfdb0 r05587c2 799 799 case DeclarationNode::Struct: 800 800 at = new StructDecl( aggregate->name ); 801 buildForall( aggregate->params, at->get_parameters() ); 801 802 break; 802 803 case DeclarationNode::Union: 803 804 at = new UnionDecl( aggregate->name ); 805 buildForall( aggregate->params, at->get_parameters() ); 804 806 break; 805 807 case DeclarationNode::Context: 806 808 at = new ContextDecl( aggregate->name ); 809 buildList( aggregate->params, at->get_parameters() ); 807 810 break; 808 811 default: 809 812 assert( false ); 810 813 } // switch 811 buildList( aggregate->params, at->get_parameters() );814 // buildList( aggregate->params, at->get_parameters() ); 812 815 buildList( aggregate->fields, at->get_members() ); 813 816 -
src/SymTab/Validate.cc
re56cfdb0 r05587c2 629 629 Declaration *makeStructAssignment( StructDecl *aggregateDecl, StructInstType *refType, unsigned int functionNesting ) { 630 630 FunctionType *assignType = new FunctionType( Type::Qualifiers(), false ); 631 632 // Make function polymorphic in same parameters as generic struct, if applicable 633 std::list< TypeDecl* >& genericParams = aggregateDecl->get_parameters(); 634 for ( std::list< TypeDecl* >::const_iterator param = genericParams.begin(); param != genericParams.end(); ++param ) { 635 assignType->get_forall().push_back( (*param)->clone() ); 636 } 631 637 632 638 ObjectDecl *returnVal = new ObjectDecl( "", DeclarationNode::NoStorageClass, LinkageSpec::Cforall, 0, refType->clone(), 0 ); -
src/SynTree/ReferenceToType.cc
re56cfdb0 r05587c2 59 59 std::string StructInstType::typeString() const { return "struct"; } 60 60 61 std::list<TypeDecl*>& StructInstType::get_baseParameters() { return baseStruct->get_parameters(); } 62 61 63 void StructInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const { 62 64 assert( baseStruct ); … … 65 67 66 68 std::string UnionInstType::typeString() const { return "union"; } 69 70 std::list<TypeDecl*>& UnionInstType::get_baseParameters() { return baseUnion->get_parameters(); } 67 71 68 72 void UnionInstType::lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const { -
src/SynTree/Type.h
re56cfdb0 r05587c2 237 237 StructDecl *get_baseStruct() const { return baseStruct; } 238 238 void set_baseStruct( StructDecl *newValue ) { baseStruct = newValue; } 239 240 // a utility function 239 240 /// Accesses generic parameters of base struct 241 std::list<TypeDecl*>& get_baseParameters(); 242 243 /// Looks up the members of this struct named "name" and places them into "foundDecls". 244 /// Clones declarations into "foundDecls", caller responsible for freeing 241 245 void lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const; 242 246 … … 260 264 UnionDecl *get_baseUnion() const { return baseUnion; } 261 265 void set_baseUnion( UnionDecl *newValue ) { baseUnion = newValue; } 262 263 // a utility function 266 267 /// Accesses generic parameters of base union 268 std::list<TypeDecl*>& get_baseParameters(); 269 270 /// looks up the members of this union named "name" and places them into "foundDecls" 271 /// Clones declarations into "foundDecls", caller responsible for freeing 264 272 void lookup( const std::string &name, std::list< Declaration* > &foundDecls ) const; 265 273 -
src/SynTree/TypeSubstitution.cc
re56cfdb0 r05587c2 126 126 Type *TypeSubstitution::handleType( TypeClass *type ) { 127 127 BoundVarsType oldBoundVars( boundVars ); 128 // bind type variables from forall-qualifiers 128 129 if ( freeOnly ) { 129 130 for ( std::list< TypeDecl* >::const_iterator tyvar = type->get_forall().begin(); tyvar != type->get_forall().end(); ++tyvar ) { … … 136 137 } 137 138 139 template< typename TypeClass > 140 Type *TypeSubstitution::handleAggregateType( TypeClass *type ) { 141 BoundVarsType oldBoundVars( boundVars ); 142 // bind type variables from forall-qualifiers 143 if ( freeOnly ) { 144 for ( std::list< TypeDecl* >::const_iterator tyvar = type->get_forall().begin(); tyvar != type->get_forall().end(); ++tyvar ) { 145 boundVars.insert( (*tyvar )->get_name() ); 146 } // for 147 } // if 148 // bind type variables from generic type instantiations 149 for ( std::list< TypeDecl* >::const_iterator tyvar = type->get_baseParameters().begin(); tyvar != type->get_baseParameters().end(); ++tyvar ) { 150 boundVars.insert( (*tyvar)->get_name() ); 151 } // for 152 Type *ret = Mutator::mutate( type ); 153 boundVars = oldBoundVars; 154 return ret; 155 } 156 138 157 Type * TypeSubstitution::mutate( VoidType *basicType ) { 139 158 return handleType( basicType ); … … 157 176 158 177 Type * TypeSubstitution::mutate( StructInstType *aggregateUseType ) { 159 return handle Type( aggregateUseType );178 return handleAggregateType( aggregateUseType ); 160 179 } 161 180 162 181 Type * TypeSubstitution::mutate( UnionInstType *aggregateUseType ) { 163 return handle Type( aggregateUseType );182 return handleAggregateType( aggregateUseType ); 164 183 } 165 184 -
src/SynTree/TypeSubstitution.h
re56cfdb0 r05587c2 58 58 virtual Type* mutate(TypeInstType *aggregateUseType); 59 59 virtual Expression* mutate(NameExpr *nameExpr); 60 60 61 /// Records type variable bindings from forall-statements 61 62 template< typename TypeClass > Type *handleType( TypeClass *type ); 63 /// Records type variable bindings from forall-statements and instantiations of generic types 64 template< typename TypeClass > Type *handleAggregateType( TypeClass *type ); 62 65 63 66 virtual Type* mutate(VoidType *basicType); -
src/main.cc
re56cfdb0 r05587c2 24 24 #include "SynTree/Declaration.h" 25 25 #include "SynTree/Visitor.h" 26 #include "GenPoly/InstantiateGeneric.h" 26 27 #include "GenPoly/Lvalue.h" 27 28 #include "GenPoly/Specialize.h" … … 268 269 } 269 270 271 OPTPRINT( "instantiateGeneric" ) 272 GenPoly::instantiateGeneric( translationUnit ); 270 273 OPTPRINT( "copyParams" ); 271 274 GenPoly::copyParams( translationUnit );
Note: See TracChangeset
for help on using the changeset viewer.