Changeset bfc7811 for src/GenPoly
- Timestamp:
- Apr 10, 2018, 2:43:50 PM (6 years ago)
- Branches:
- new-env, with_gc
- Children:
- 9f2012f
- Parents:
- dbc2c2c
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/GenPoly/Box.cc
rdbc2c2c rbfc7811 279 279 /// Adds parameters for otype layout to a function type 280 280 void addOtypeParams( FunctionType *layoutFnType, std::list< TypeDecl* > &otypeParams ) { 281 BasicType sizeAlignType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 282 283 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); param != otypeParams.end(); ++param ) { 281 auto sizeAlignType = new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ); 282 283 for ( std::list< TypeDecl* >::const_iterator param = otypeParams.begin(); 284 param != otypeParams.end(); ++param ) { 284 285 TypeInstType paramType( Type::Qualifiers(), (*param)->get_name(), *param ); 285 286 std::string paramName = mangleType( ¶mType ); 286 layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType .clone(), 0 ) );287 layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType .clone(), 0 ) );287 layoutFnType->get_parameters().push_back( new ObjectDecl( sizeofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType->clone(), 0 ) ); 288 layoutFnType->get_parameters().push_back( new ObjectDecl( alignofName( paramName ), Type::StorageClasses(), LinkageSpec::Cforall, 0, sizeAlignType->clone(), 0 ) ); 288 289 } 289 290 } … … 740 741 Type * newType = param->clone(); 741 742 if ( env ) env->apply( newType ); 742 ObjectDecl *newObj = ObjectDecl::newObject( tempNamer.newName(), newType, nullptr ); 743 ObjectDecl *newObj = ObjectDecl::newObject( 744 tempNamer.newName(), newType, nullptr ); 743 745 newObj->get_type()->get_qualifiers() = Type::Qualifiers(); // TODO: is this right??? 744 746 stmtsToAddBefore.push_back( new DeclStmt( newObj ) ); … … 1325 1327 std::list< DeclarationWithType *> inferredParams; 1326 1328 // size/align/offset parameters may not be used in body, pass along with unused attribute. 1327 ObjectDecl newObj( "", Type::StorageClasses(), LinkageSpec::C, 0, new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, 1328 { new Attribute( "unused" ) } ); 1329 ObjectDecl newPtr( "", Type::StorageClasses(), LinkageSpec::C, 0, 1330 new PointerType( Type::Qualifiers(), new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 ); 1331 for ( Type::ForallList::const_iterator tyParm = funcType->get_forall().begin(); tyParm != funcType->get_forall().end(); ++tyParm ) { 1329 auto newObj = new ObjectDecl( 1330 "", Type::StorageClasses(), LinkageSpec::C, 0, 1331 new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ), 0, 1332 { new Attribute( "unused" ) } ); 1333 auto newPtr = new ObjectDecl( 1334 "", Type::StorageClasses(), LinkageSpec::C, 0, 1335 new PointerType( Type::Qualifiers(), 1336 new BasicType( Type::Qualifiers(), BasicType::LongUnsignedInt ) ), 0 ); 1337 for ( Type::ForallList::const_iterator tyParm = funcType->get_forall().begin(); 1338 tyParm != funcType->get_forall().end(); ++tyParm ) { 1332 1339 ObjectDecl *sizeParm, *alignParm; 1333 1340 // add all size and alignment parameters to parameter list … … 1336 1343 std::string parmName = mangleType( &parmType ); 1337 1344 1338 sizeParm = newObj .clone();1345 sizeParm = newObj->clone(); 1339 1346 sizeParm->set_name( sizeofName( parmName ) ); 1340 1347 last = funcType->get_parameters().insert( last, sizeParm ); 1341 1348 ++last; 1342 1349 1343 alignParm = newObj .clone();1350 alignParm = newObj->clone(); 1344 1351 alignParm->set_name( alignofName( parmName ) ); 1345 1352 last = funcType->get_parameters().insert( last, alignParm ); … … 1364 1371 1365 1372 ObjectDecl *sizeParm, *alignParm, *offsetParm; 1366 sizeParm = newObj .clone();1373 sizeParm = newObj->clone(); 1367 1374 sizeParm->set_name( sizeofName( typeName ) ); 1368 1375 last = funcType->get_parameters().insert( last, sizeParm ); 1369 1376 ++last; 1370 1377 1371 alignParm = newObj .clone();1378 alignParm = newObj->clone(); 1372 1379 alignParm->set_name( alignofName( typeName ) ); 1373 1380 last = funcType->get_parameters().insert( last, alignParm ); … … 1377 1384 // NOTE zero-length arrays are illegal in C, so empty structs have no offset array 1378 1385 if ( ! polyBaseStruct->get_baseStruct()->get_members().empty() ) { 1379 offsetParm = newPtr .clone();1386 offsetParm = newPtr->clone(); 1380 1387 offsetParm->set_name( offsetofName( typeName ) ); 1381 1388 last = funcType->get_parameters().insert( last, offsetParm ); … … 1614 1621 1615 1622 ObjectDecl *PolyGenericCalculator::makeVar( const std::string &name, Type *type, Initializer *init ) { 1616 ObjectDecl *newObj = new ObjectDecl( name, Type::StorageClasses(), LinkageSpec::C, nullptr, type, init ); 1623 ObjectDecl *newObj = new ObjectDecl( 1624 name, Type::StorageClasses(), LinkageSpec::C, nullptr, type, init ); 1617 1625 stmtsToAddBefore.push_back( new DeclStmt( newObj ) ); 1618 1626 return newObj;
Note: See TracChangeset
for help on using the changeset viewer.