Changeset bfc7811
- Timestamp:
- Apr 10, 2018, 2:43:50 PM (7 years ago)
- Branches:
- new-env, with_gc
- Children:
- 9f2012f
- Parents:
- dbc2c2c
- Location:
- src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Common/GC.cc
rdbc2c2c rbfc7811 117 117 } 118 118 119 bool stack_check( int* i, GC_Object* o ) {120 int j;121 return ( i < &j ) == ( (void*)o < (void*)&j );122 }123 124 119 GC_Object::GC_Object() { 125 120 GC::get().register_object( this ); 126 127 int i;128 assert(!stack_check(&i, this));129 121 } 130 122 -
src/Common/GC.h
rdbc2c2c rbfc7811 71 71 inline void new_generation() { GC::get().new_generation(); } 72 72 73 // / no-op default trace74 template<typename T>75 inline const GC& operator<< (const GC& gc, const T& x) { return gc; }73 // /// no-op default trace 74 // template<typename T> 75 // inline const GC& operator<< (const GC& gc, const T& x) { return gc; } 76 76 77 77 inline void traceAll(const GC&) {} -
src/ControlStruct/ExceptTranslate.cc
rdbc2c2c rbfc7811 104 104 // Types used in translation, make sure to use clone. 105 105 // void (*function)(); 106 FunctionType try_func_t;106 FunctionType * try_func_t; 107 107 // void (*function)(int, exception); 108 FunctionType catch_func_t;108 FunctionType * catch_func_t; 109 109 // int (*function)(exception); 110 FunctionType match_func_t;110 FunctionType * match_func_t; 111 111 // bool (*function)(exception); 112 FunctionType handle_func_t;112 FunctionType * handle_func_t; 113 113 // void (*function)(__attribute__((unused)) void *); 114 FunctionType finally_func_t;114 FunctionType * finally_func_t; 115 115 116 116 StructInstType * create_except_type() { … … 125 125 handler_except_decl( nullptr ), 126 126 except_decl( nullptr ), node_decl( nullptr ), hook_decl( nullptr ), 127 try_func_t( n oQualifiers, false),128 catch_func_t( n oQualifiers, false),129 match_func_t( n oQualifiers, false),130 handle_func_t( n oQualifiers, false),131 finally_func_t( n oQualifiers, false)127 try_func_t( new FunctionType(noQualifiers, false) ), 128 catch_func_t( new FunctionType(noQualifiers, false) ), 129 match_func_t( new FunctionType(noQualifiers, false) ), 130 handle_func_t( new FunctionType(noQualifiers, false) ), 131 finally_func_t( new FunctionType(noQualifiers, false) ) 132 132 {} 133 133 … … 141 141 assert( except_decl ); 142 142 143 ObjectDecl index_obj(143 auto index_obj = new ObjectDecl( 144 144 "__handler_index", 145 145 Type::StorageClasses(), … … 149 149 /*init*/ NULL 150 150 ); 151 ObjectDecl exception_obj(151 auto exception_obj = new ObjectDecl( 152 152 "__exception_inst", 153 153 Type::StorageClasses(), … … 160 160 /*init*/ NULL 161 161 ); 162 ObjectDecl bool_obj(162 auto bool_obj = new ObjectDecl( 163 163 "__ret_bool", 164 164 Type::StorageClasses(), … … 169 169 std::list<Attribute *>{ new Attribute( "unused" ) } 170 170 ); 171 ObjectDecl voidptr_obj(171 auto voidptr_obj = new ObjectDecl( 172 172 "__hook", 173 173 Type::StorageClasses(), … … 184 184 ); 185 185 186 ObjectDecl * unused_index_obj = index_obj .clone();186 ObjectDecl * unused_index_obj = index_obj->clone(); 187 187 unused_index_obj->attributes.push_back( new Attribute( "unused" ) ); 188 188 189 catch_func_t .get_parameters().push_back( index_obj.clone());190 catch_func_t .get_parameters().push_back( exception_obj.clone() );191 match_func_t .get_returnVals().push_back( unused_index_obj );192 match_func_t .get_parameters().push_back( exception_obj.clone() );193 handle_func_t .get_returnVals().push_back( bool_obj.clone());194 handle_func_t .get_parameters().push_back( exception_obj.clone());195 finally_func_t .get_parameters().push_back( voidptr_obj.clone());189 catch_func_t->get_parameters().push_back( index_obj ); 190 catch_func_t->get_parameters().push_back( exception_obj->clone() ); 191 match_func_t->get_returnVals().push_back( unused_index_obj ); 192 match_func_t->get_parameters().push_back( exception_obj->clone() ); 193 handle_func_t->get_returnVals().push_back( bool_obj ); 194 handle_func_t->get_parameters().push_back( exception_obj ); 195 finally_func_t->get_parameters().push_back( voidptr_obj ); 196 196 } 197 197 … … 264 264 265 265 return new FunctionDecl( "try", Type::StorageClasses(), 266 LinkageSpec::Cforall, try_func_t .clone(), body );266 LinkageSpec::Cforall, try_func_t->clone(), body ); 267 267 } 268 268 … … 271 271 std::list<CaseStmt *> handler_wrappers; 272 272 273 FunctionType *func_type = catch_func_t .clone();273 FunctionType *func_type = catch_func_t->clone(); 274 274 DeclarationWithType * index_obj = func_type->get_parameters().front(); 275 275 DeclarationWithType * except_obj = func_type->get_parameters().back(); … … 392 392 CompoundStmt * body = new CompoundStmt(); 393 393 394 FunctionType * func_type = match_func_t .clone();394 FunctionType * func_type = match_func_t->clone(); 395 395 DeclarationWithType * except_obj = func_type->get_parameters().back(); 396 396 … … 446 446 CompoundStmt * body = new CompoundStmt(); 447 447 448 FunctionType * func_type = handle_func_t .clone();448 FunctionType * func_type = handle_func_t->clone(); 449 449 DeclarationWithType * except_obj = func_type->get_parameters().back(); 450 450 … … 529 529 530 530 return new FunctionDecl("finally", Type::StorageClasses(), 531 LinkageSpec::Cforall, finally_func_t .clone(), body);531 LinkageSpec::Cforall, finally_func_t->clone(), body); 532 532 } 533 533 -
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; -
src/SynTree/GcTracer.h
rdbc2c2c rbfc7811 36 36 void previsit( BaseSyntaxNode * node ) { 37 37 // skip tree if already seen 38 if ( node->mark == gc.mark ) {39 visit_children = false;40 return;41 }38 // if ( node->mark == gc.mark ) { 39 // visit_children = false; 40 // return; 41 // } 42 42 43 43 // mark node
Note: See TracChangeset
for help on using the changeset viewer.