Changeset bfc7811 for src/ControlStruct
- 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/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
Note: See TracChangeset
for help on using the changeset viewer.