Changes in src/SymTab/Autogen.cc [2bfc6b2:6926a6d]
- File:
-
- 1 edited
-
src/SymTab/Autogen.cc (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/SymTab/Autogen.cc
r2bfc6b2 r6926a6d 41 41 42 42 namespace SymTab { 43 Type * SizeType = 0; 44 43 45 /// Data used to generate functions generically. Specifically, the name of the generated function and a function which generates the routine protoype 44 46 struct FuncData { 45 typedef FunctionType * (*TypeGen)( Type * , bool);47 typedef FunctionType * (*TypeGen)( Type * ); 46 48 FuncData( const std::string & fname, const TypeGen & genType ) : fname( fname ), genType( genType ) {} 47 49 std::string fname; … … 229 231 230 232 /// given type T, generate type of default ctor/dtor, i.e. function type void (*) (T *) 231 FunctionType * genDefaultType( Type * paramType, bool maybePolymorphic ) { 233 FunctionType * genDefaultType( Type * paramType ) { 234 const auto & typeParams = getGenericParams( paramType ); 232 235 FunctionType *ftype = new FunctionType( Type::Qualifiers(), false ); 233 if ( maybePolymorphic ) { 234 // only copy in 235 const auto & typeParams = getGenericParams( paramType ); 236 cloneAll( typeParams, ftype->forall ); 237 } 236 cloneAll( typeParams, ftype->forall ); 238 237 ObjectDecl *dstParam = new ObjectDecl( "_dst", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, new ReferenceType( Type::Qualifiers(), paramType->clone() ), nullptr ); 239 238 ftype->parameters.push_back( dstParam ); … … 242 241 243 242 /// given type T, generate type of copy ctor, i.e. function type void (*) (T *, T) 244 FunctionType * genCopyType( Type * paramType , bool maybePolymorphic) {245 FunctionType *ftype = genDefaultType( paramType , maybePolymorphic);243 FunctionType * genCopyType( Type * paramType ) { 244 FunctionType *ftype = genDefaultType( paramType ); 246 245 ObjectDecl *srcParam = new ObjectDecl( "_src", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType->clone(), nullptr ); 247 246 ftype->parameters.push_back( srcParam ); … … 250 249 251 250 /// given type T, generate type of assignment, i.e. function type T (*) (T *, T) 252 FunctionType * genAssignType( Type * paramType , bool maybePolymorphic) {253 FunctionType *ftype = genCopyType( paramType , maybePolymorphic);251 FunctionType * genAssignType( Type * paramType ) { 252 FunctionType *ftype = genCopyType( paramType ); 254 253 ObjectDecl *returnVal = new ObjectDecl( "_ret", Type::StorageClasses(), LinkageSpec::Cforall, nullptr, paramType->clone(), nullptr ); 255 254 ftype->returnVals.push_back( returnVal ); … … 309 308 for ( const FuncData & d : data ) { 310 309 // generate a function (?{}, ?=?, ^?{}) based on the current FuncData. 311 FunctionType * ftype = d.genType( type , true);310 FunctionType * ftype = d.genType( type ); 312 311 313 312 // destructor for concurrent type must be mutex
Note:
See TracChangeset
for help on using the changeset viewer.