Changes in / [a12d5aa:62423350]
- Files:
-
- 3 added
- 24 deleted
- 36 edited
-
.gitignore (modified) (2 diffs)
-
configure (modified) (2 diffs)
-
configure.ac (modified) (1 diff)
-
doc/proposals/associated_types.md (deleted)
-
doc/proposals/tagged-struct.txt (modified) (3 diffs)
-
src/CodeGen/FixNames.cc (modified) (2 diffs)
-
src/ControlStruct/ExceptTranslate.cc (modified) (29 diffs)
-
src/ControlStruct/ExceptTranslate.h (modified) (1 diff)
-
src/ControlStruct/module.mk (modified) (1 diff)
-
src/Makefile.in (modified) (12 diffs)
-
src/Parser/DeclarationNode.cc (modified) (2 diffs)
-
src/Parser/ExpressionNode.cc (modified) (2 diffs)
-
src/Parser/LinkageSpec.cc (modified) (6 diffs)
-
src/Parser/LinkageSpec.h (modified) (3 diffs)
-
src/Parser/StatementNode.cc (modified) (2 diffs)
-
src/Parser/TypeData.cc (modified) (6 diffs)
-
src/Parser/TypeData.h (modified) (2 diffs)
-
src/Parser/TypedefTable.h (modified) (2 diffs)
-
src/Parser/lex.h (added)
-
src/Parser/lex.ll (modified) (2 diffs)
-
src/Parser/module.mk (modified) (2 diffs)
-
src/Parser/parser.hh (deleted)
-
src/Parser/parser.yy (modified) (5 diffs)
-
src/Parser/parserutility.cc (deleted)
-
src/Parser/parserutility.h (deleted)
-
src/Parser/parseutility.cc (added)
-
src/Parser/parseutility.h (added)
-
src/SymTab/Autogen.cc (modified) (2 diffs)
-
src/SymTab/Mangler.cc (modified) (2 diffs)
-
src/SynTree/AggregateDecl.cc (modified) (2 diffs)
-
src/SynTree/Declaration.h (modified) (5 diffs)
-
src/libcfa/Makefile.am (modified) (3 diffs)
-
src/libcfa/Makefile.in (modified) (2 diffs)
-
src/libcfa/exception.c (deleted)
-
src/libcfa/exception.h (deleted)
-
src/main.cc (modified) (5 diffs)
-
src/prelude/Makefile.am (modified) (3 diffs)
-
src/prelude/Makefile.in (modified) (5 diffs)
-
src/prelude/builtins.c (deleted)
-
src/tests/preempt_longrun/Makefile.am (modified) (1 diff)
-
src/tests/preempt_longrun/Makefile.in (modified) (1 diff)
-
src/tests/preempt_longrun/barge.c (deleted)
-
src/tests/preempt_longrun/block.c (deleted)
-
src/tests/preempt_longrun/disjoint.c (deleted)
-
src/tests/preempt_longrun/wait.c (deleted)
-
src/tests/sched-int-block.c (modified) (1 diff)
-
src/tests/sched-int-disjoint.c (modified) (1 diff)
-
src/tests/sched-int-wait.c (modified) (1 diff)
-
tools/cfa.nanorc (modified) (3 diffs)
-
tools/prettyprinter/Makefile.am (deleted)
-
tools/prettyprinter/Makefile.in (deleted)
-
tools/prettyprinter/filter.cc (deleted)
-
tools/prettyprinter/filter.h (deleted)
-
tools/prettyprinter/lex.ll (deleted)
-
tools/prettyprinter/main.cc (deleted)
-
tools/prettyprinter/parser.hh (deleted)
-
tools/prettyprinter/parser.yy (deleted)
-
tools/prettyprinter/test.tex (deleted)
-
tools/prettyprinter/test.y (deleted)
-
tools/prettyprinter/test1.y (deleted)
-
tools/prettyprinter/token.cc (deleted)
-
tools/prettyprinter/token.h (deleted)
-
tools/repeat (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
.gitignore
ra12d5aa r62423350 31 31 32 32 src/prelude/builtins.cf 33 src/prelude/gcc-builtins.cf 34 src/prelude/gcc-builtins.c 33 src/prelude/builtins.c 35 34 src/prelude/extras.cf 36 35 src/prelude/bootloader.c 37 36 src/libcfa/libcfa-prelude.c 38 37 39 # generated by bison and lex from parser.yy and lex.ll38 # generated by bison and lex from cfa.yy and lex.ll, respectively 40 39 src/Parser/parser.output 41 40 src/Parser/lex.cc … … 43 42 src/Parser/parser.h 44 43 45 tools/prettyprinter/parser.output46 tools/prettyprinter/lex.cc47 tools/prettyprinter/parser.cc48 tools/prettyprinter/parser.h49 tools/prettyprinter/pretty50 tools/pretty51 52 44 # generated by xfig for user manual 53 45 doc/user/Cdecl.tex -
configure
ra12d5aa r62423350 6251 6251 6252 6252 6253 ac_config_files="$ac_config_files Makefile src/driver/Makefile src/Makefile src/benchmark/Makefile src/examples/Makefile src/tests/Makefile src/tests/preempt_longrun/Makefile src/prelude/Makefile src/libcfa/Makefile tools/prettyprinter/Makefile"6253 ac_config_files="$ac_config_files Makefile src/driver/Makefile src/Makefile src/benchmark/Makefile src/examples/Makefile src/tests/Makefile src/tests/preempt_longrun/Makefile src/prelude/Makefile src/libcfa/Makefile" 6254 6254 6255 6255 … … 7022 7022 "src/prelude/Makefile") CONFIG_FILES="$CONFIG_FILES src/prelude/Makefile" ;; 7023 7023 "src/libcfa/Makefile") CONFIG_FILES="$CONFIG_FILES src/libcfa/Makefile" ;; 7024 "tools/prettyprinter/Makefile") CONFIG_FILES="$CONFIG_FILES tools/prettyprinter/Makefile" ;;7025 7024 7026 7025 *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; -
configure.ac
ra12d5aa r62423350 238 238 src/prelude/Makefile 239 239 src/libcfa/Makefile 240 tools/prettyprinter/Makefile241 240 ]) 242 241 -
doc/proposals/tagged-struct.txt
ra12d5aa r62423350 14 14 say which of the possible values is currently stored in the union. The idea 15 15 here is similar, however the possibilities are more open ended. 16 17 Alternate names include virtual structure and abstract structure.18 16 19 17 … … 38 36 their parent's fields to their field list so they can be upcast. 39 37 40 The type field may be public, if it is then it can be accessed through a41 simple field access "instance.type". The type field would then be able to be42 used to access the type object, which contains the information for the type.43 It may just be a pointer to the type object "*instance.type", although a44 lookup function could also be used.45 46 47 Usage:48 49 The central feature for tagged structs is a checked cast between pointer types50 to the structures. A cast is successful if the true type of the pointed object51 is of the type being cast to or any of its children, otherwise the cast52 returns null.53 54 The type field should also allow for equality comparison of types.55 56 Currently, with only these operations (and similar features) the type field57 could be hidden and the operations given through helper functions. However58 if the type object has more complex (or even open ended) information in it59 than providing direct access becomes very valuable.60 61 38 62 39 Implemenation: 63 40 64 Adding to the field list would have to be handled during translation. The 65 simple act of adding declarations should not be difficult, althought it might 66 take a bit of work to find the parent's declarations. 41 Adding to the field list is a simple matter, should be doable during 42 translation. The type field is just a pointer to a type object. With proper 43 linking we can create a single unique instance of the type object for each 44 declared tagged struct. The instance's address is used as an id for the type. 45 It also holds data about the type, such as its parent's id/a pointer to the 46 parent type object. 67 47 68 Type objects are also simple in to generate, they should just be global 69 (program lifetime) structures. Getting there to be exactly one instance of 70 each allows the pointer to the structure to be used as the type id, and that 71 should be possible to do during linking. 48 The type field could be hidden (as best as C can hide it) or it could be 49 visible to the user with easy access to allow the user to examine the type 50 object directly. 51 52 Direct access is more useful if the data on the type-objects can change, other 53 wise the build in function could handle all cases. Perhaps each root object 54 can specify a type object to use or the type objects are themselves tagged, 55 although there may not be a base case with the latter. 56 57 In the simplest case the type object is a pointer to the parent type object. 58 Additional data could be added, such as a name, or a function pointer to the 59 destructor. 72 60 73 61 … … 106 94 If unions are declared tagged instead of creating a new tagged type, all 107 95 possible values of the union must be of that tagged type or a child type. 108 109 110 Custom Type Objects (Extention):111 112 Some method to define type objects used within a tree of types. One option is113 to allow the tree's type object to be specified by the tree root. It would114 then have to be filled in for each type in the tree, including the root.115 116 The only required field is the parent field, a pointer to the type object's117 type. (This is also the only required field on the tagged structure itself.)118 119 A further extention could allow expanding type objects, so child types could120 append fields to their parent's feild list. They might need their own type121 objects at that point, or maybe static checks will be enough to see the122 minimum field list. -
src/CodeGen/FixNames.cc
ra12d5aa r62423350 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 2 8 15:26:00201713 // Update Count : 2011 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jun 21 14:22:59 2017 13 // Update Count : 19 14 14 // 15 15 … … 93 93 void FixNames::fixDWT( DeclarationWithType *dwt ) { 94 94 if ( dwt->get_name() != "" ) { 95 if ( LinkageSpec::is Mangled( dwt->get_linkage() ) ) {95 if ( LinkageSpec::isDecoratable( dwt->get_linkage() ) ) { 96 96 dwt->set_mangleName( SymTab::Mangler::mangle( dwt ) ); 97 97 dwt->set_scopeLevel( scopeLevel ); -
src/ControlStruct/ExceptTranslate.cc
ra12d5aa r62423350 10 10 // Created On : Wed Jun 14 16:49:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 2 9 15:18:00 201713 // Update Count : 112 // Last Modified On : Thr Jun 22 15:57:00 2017 13 // Update Count : 0 14 14 // 15 15 16 16 #include "ExceptTranslate.h" 17 17 #include "Common/PassVisitor.h" 18 #include "SynTree/Statement.h"19 #include "SynTree/Declaration.h"20 #include "SynTree/Expression.h"21 #include "SynTree/Type.h"22 #include "SynTree/Attribute.h"23 18 24 19 namespace ControlFlow { … … 39 34 40 35 static void init_func_types() { 41 static boolinit_complete = false;36 static init_complete = false; 42 37 if (init_complete) { 43 38 return; 44 39 } 45 40 ObjectDecl index_obj( 46 " __handler_index",41 "index_t", 47 42 Type::StorageClasses(), 48 43 LinkageSpec::Cforall, … … 52 47 ); 53 48 ObjectDecl exception_obj( 54 " __exception_inst",49 "exception_t", 55 50 Type::StorageClasses(), 56 51 LinkageSpec::Cforall, … … 60 55 ); 61 56 ObjectDecl bool_obj( 62 " __ret_bool",57 "bool_t", 63 58 Type::StorageClasses(), 64 59 LinkageSpec::Cforall, … … 83 78 84 79 void split( CatchList& allHandlers, CatchList& terHandlers, 85 CatchList& resHandlers ) {80 CatchList& resHandlers ) { 86 81 while ( !allHandlers.empty() ) { 87 CatchStmt * stmt = allHandlers.front();82 Statement * stmt = allHandlers.front(); 88 83 allHandlers.pop_front(); 89 if (Ca tchStmt::Terminate == stmt->get_kind()) {84 if (CaseStmt::Terminate == stmt->get_kind()) { 90 85 terHandlers.push_back(stmt); 91 86 } else { … … 97 92 template<typename T> 98 93 void free_all( std::list<T *> &list ) { 99 typenamestd::list<T *>::iterator it;94 std::list<T *>::iterator it; 100 95 for ( it = list.begin() ; it != list.end() ; ++it ) { 101 96 delete *it; … … 105 100 106 101 void appendDeclStmt( CompoundStmt * block, Declaration * item ) { 107 block->push_back(new DeclStmt(no Labels, item));108 } 109 110 Expression * nameOf( DeclarationWithType * decl) {111 return new VariableExpr( decl);102 block->push_back(new DeclStmt(no_labels, item)); 103 } 104 105 Expression * nameOf( FunctionDecl * function ) { 106 return new VariableExpr( function ); 112 107 } 113 108 … … 116 111 Statement * create_terminate_throw( ThrowStmt *throwStmt ) { 117 112 // __throw_terminate( EXPR ); 118 UntypedExpr * call = new UntypedExpr( new NameExpr( 119 "__cfaehm__throw_termination" ) ); 120 call->get_args().push_back( throwStmt->get_expr() ); 113 ApplicationExpr * call = new ApplicationExpr( /* ... */ ); 114 call->get_args.push_back( throwStmt->get_expr() ); 121 115 Statement * result = new ExprStmt( throwStmt->get_labels(), call ); 122 116 throwStmt->set_expr( nullptr ); … … 126 120 Statement * create_terminate_rethrow( ThrowStmt *throwStmt ) { 127 121 // __rethrow_terminate(); 128 assert( nullptr == throwStmt->get_expr() );129 122 Statement * result = new ExprStmt( 130 123 throwStmt->get_labels(), 131 new UntypedExpr( new NameExpr( "__cfaehm__rethrow_termination" ) )124 new ApplicationExpr( /* ... */ ); 132 125 ); 133 126 delete throwStmt; … … 136 129 Statement * create_resume_throw( ThrowStmt *throwStmt ) { 137 130 // __throw_resume( EXPR ); 138 UntypedExpr * call = new UntypedExpr( new NameExpr( 139 "__cfaehm__throw_resumption" ) ); 140 call->get_args().push_back( throwStmt->get_expr() ); 131 ApplicationExpr * call = new ApplicationExpr( /* ... */ ); 132 call->get_args.push_back( throwStmt->get_expr() ); 141 133 Statement * result = new ExprStmt( throwStmt->get_labels(), call ); 142 134 throwStmt->set_expr( nullptr ); … … 148 140 Statement * result = new ReturnStmt( 149 141 throwStmt->get_labels(), 150 new ConstantExpr( Constant::from_bool( false ) ) 142 new ConstantExpr( 143 Constant( 144 new BasicType( 145 Type::Qualifiers(), 146 BasicType::Bool 147 ), 148 "0") 149 ) 151 150 ); 152 151 delete throwStmt; … … 161 160 return block; 162 161 } 163 FunctionDecl * create_try_wrapper( CompoundStmt *body ) { 164 165 return new FunctionDecl( "try", Type::StorageClasses(), 166 LinkageSpec::Cforall, void_func_t.clone(), body ); 162 FunctionDecl * create_try_wrapper( TryStmt *tryStmt ) { 163 CompoundStmt * body = base_try->get_block(); 164 base_try->set_block(nullptr); 165 166 return new FunctionDecl("try", Type::StorageClasses(), 167 LinkageSpec::Cforall, void_func_t, body); 167 168 } 168 169 169 170 FunctionDecl * create_terminate_catch( CatchList &handlers ) { 170 171 std::list<CaseStmt *> handler_wrappers; 171 172 FunctionType *func_type = catch_func_t.clone();173 DeclarationWithType * index_obj = func_type->get_parameters().front();174 // DeclarationWithType * except_obj = func_type->get_parameters().back();175 172 176 173 // Index 1..{number of handlers} … … 181 178 CatchStmt * handler = *it; 182 179 183 // INTEGERconstant Version 184 // case `index`: 185 // { 186 // `handler.body` 187 // } 188 // return; 189 std::list<Statement *> caseBody; 190 caseBody.push_back( handler->get_body() ); 191 handler->set_body( nullptr ); 192 caseBody.push_back( new ReturnStmt( noLabels, nullptr ) ); 193 194 handler_wrappers.push_back( new CaseStmt( 180 std::list<Statement *> core; 181 if ( /*the exception is named*/ ) { 182 ObjectDecl * local_except = /* Dynamic case, same */; 183 core->push_back( new DeclStmt( noLabel, local_except ) ); 184 } 185 // Append the provided statement to the handler. 186 core->push_back( cur_handler->get_body() ); 187 // Append return onto the inner block? case stmt list? 188 CaseStmt * wrapper = new CaseStmt( 195 189 noLabels, 196 190 new ConstantExpr( Constant::from_int( index ) ), 197 caseBody 198 ) ); 191 core 192 ); 193 handler_wrappers.push_back(wrapper); 199 194 } 200 195 // TODO: Some sort of meaningful error on default perhaps? 201 202 std::list<Statement*> stmt_handlers;203 while ( !handler_wrappers.empty() ) {204 stmt_handlers.push_back( handler_wrappers.front() );205 handler_wrappers.pop_front();206 }207 196 208 197 SwitchStmt * handler_lookup = new SwitchStmt( 209 198 noLabels, 210 nameOf( index_obj ), 211 stmt_handlers 199 /*parameter 0: index*/, 200 handler_wrappers, 201 false 212 202 ); 213 203 CompoundStmt * body = new CompoundStmt( noLabels ); … … 215 205 216 206 return new FunctionDecl("catch", Type::StorageClasses(), 217 LinkageSpec::Cforall, func_type, body);207 LinkageSpec::Cforall, catch_func_t, body); 218 208 } 219 209 220 210 // Create a single check from a moddified handler. 221 // except_obj is referenced, modded_handler will be freed. 222 CompoundStmt *create_single_matcher( 223 DeclarationWithType * except_obj, CatchStmt * modded_handler ) { 224 CompoundStmt * block = new CompoundStmt( noLabels ); 225 226 // INTEGERconstant Version 227 assert( nullptr == modded_handler->get_decl() ); 228 ConstantExpr * number = 229 dynamic_cast<ConstantExpr*>( modded_handler->get_cond() ); 230 assert( number ); 231 modded_handler->set_cond( nullptr ); 232 233 Expression * cond; 234 { 235 std::list<Expression *> args; 236 args.push_back( number ); 237 args.push_back( nameOf( except_obj ) ); 238 cond = new UntypedExpr( new NameExpr( "?==?" /*???*/), args ); 239 } 211 CompoundStmt *create_single_matcher( CatchStmt * modded_handler ) { 212 CompoundStmt * block = new CompoundStmt( noLables ); 213 214 appendDeclStmt( block, modded_handler->get_decl() ); 215 216 // TODO: This is not the actual check. 217 LogicalExpr * cond = new ConstantExpr( Constant::from_bool( false ) ); 240 218 241 219 if ( modded_handler->get_cond() ) { 242 cond = new LogicalExpr( cond, modded_handler->get_cond() ) ;220 cond = new LogicalExpr( cond, modded_handler->get_cond() )q 243 221 } 244 222 block->push_back( new IfStmt( noLabels, 245 cond, modded_handler->get_body() , nullptr ));223 cond, modded_handler->get_body() ); 246 224 247 225 modded_handler->set_decl( nullptr ); … … 254 232 FunctionDecl * create_terminate_match( CatchList &handlers ) { 255 233 CompoundStmt * body = new CompoundStmt( noLabels ); 256 257 FunctionType * func_type = match_func_t.clone();258 DeclarationWithType * except_obj = func_type->get_parameters().back();259 234 260 235 // Index 1..{number of handlers} … … 265 240 CatchStmt * handler = *it; 266 241 267 // Body should have been taken by create_terminate_catch. 268 assert( nullptr == handler->get_body() ); 269 270 // Create new body. 242 // body should have been taken by create_terminate_catch. 243 // assert( nullptr == handler->get_body() ); 271 244 handler->set_body( new ReturnStmt( noLabels, 272 245 new ConstantExpr( Constant::from_int( index ) ) ) ); 273 246 274 // Create the handler. 275 body->push_back( create_single_matcher( except_obj, handler ) ); 276 *it = nullptr; 247 body->push_back( create_single_matcher( handler ) ); 277 248 } 278 249 279 250 return new FunctionDecl("match", Type::StorageClasses(), 280 LinkageSpec::Cforall, func_type, body);281 } 282 283 CompoundStmt * create_terminate_caller(251 LinkageSpec::Cforall, match_func_t, body); 252 } 253 254 Statement * create_terminate_caller( 284 255 FunctionDecl * try_wrapper, 285 256 FunctionDecl * terminate_catch, 286 257 FunctionDecl * terminate_match) { 287 258 288 UntypedExpr * caller = new UntypedExpr( new NameExpr( 289 "__cfaehm__try_terminate" ) ); 290 std::list<Expression *>& args = caller->get_args(); 259 ApplicationExpr * caller = new ApplicationExpr( /* ... */ ); 260 std::list<Expression *>& args = caller.get_args(); 291 261 args.push_back( nameOf( try_wrapper ) ); 292 262 args.push_back( nameOf( terminate_catch ) ); 293 263 args.push_back( nameOf( terminate_match ) ); 294 264 295 CompoundStmt * callStmt = new CompoundStmt( noLabels ); 296 callStmt->push_back( new ExprStmt( noLabels, caller ) ); 297 return callStmt; 265 return new ExprStmt( noLabels, caller ); 298 266 } 299 267 300 268 FunctionDecl * create_resume_handler( CatchList &handlers ) { 301 CompoundStmt * body = new CompoundStmt( noLabels ); 302 303 FunctionType * func_type = match_func_t.clone(); 304 DeclarationWithType * except_obj = func_type->get_parameters().back(); 269 CompoundStmt * body = new CompountStmt( noLabels ); 305 270 306 271 CatchList::iterator it; … … 315 280 handling_code->push_back( handler->get_body() ); 316 281 } 317 handling_code->push_back( new ReturnStmt( noLabel s,282 handling_code->push_back( new ReturnStmt( noLabel, 318 283 new ConstantExpr( Constant::from_bool( false ) ) ) ); 319 284 handler->set_body( handling_code ); 320 285 321 286 // Create the handler. 322 body->push_back( create_single_matcher( except_obj, handler ) ); 323 *it = nullptr; 287 body->push_back( create_single_matcher( handler ) ); 324 288 } 325 289 326 290 return new FunctionDecl("handle", Type::StorageClasses(), 327 LinkageSpec::Cforall, func_type, body); 328 } 329 330 CompoundStmt * create_resume_wrapper( 331 StructDecl * node_decl, 291 LinkageSpec::Cforall, handle_func_t, body); 292 } 293 294 Statement * create_resume_wrapper( 332 295 Statement * wraps, 333 296 FunctionDecl * resume_handler ) { 334 297 CompoundStmt * body = new CompoundStmt( noLabels ); 335 298 336 // struct __try_resume_node __resume_node 337 // __attribute__((cleanup( __cfaehm__try_resume_cleanup ))); 338 // ** unwinding of the stack here could cause problems ** 339 // ** however I don't think that can happen currently ** 340 // __cfaehm__try_resume_setup( &__resume_node, resume_handler ); 299 // struct node = {current top resume handler, call to resume_handler}; 300 // __attribute__((cleanup( ... ))); 301 // set top resume handler to node. 302 // The wrapped statement. 303 304 ListInit * node_init; 305 { 306 std::list<Initializer*> field_inits; 307 field_inits.push_back( new SingleInit( /* ... */ ) ); 308 field_inits.push_back( new SingleInit( nameOf( resume_handler ) ) ); 309 node_init = new ListInit( field_inits ); 310 } 341 311 342 312 std::list< Attribute * > attributes; 343 313 { 344 314 std::list< Expression * > attr_params; 345 attr_params.push_back( n ew NameExpr(346 "__cfaehm__try_resume_cleanup") );347 attributes.push_back( new Attribute( "cleanup", attr_params ) );348 } 349 350 ObjectDecl * obj = newObjectDecl(351 " __resume_node",315 attr_params.push_back( nameOf( /* ... deconstructor ... */ ) ); 316 attrributes.push_back( new Attribute( "cleanup", attr_params ) ); 317 } 318 319 appendDeclStmt( body, 320 /**/ ObjectDecl( 321 "resume_node", 352 322 Type::StorageClasses(), 353 323 LinkageSpec::Cforall, 354 324 nullptr, 355 new StructInstType( 356 Type::Qualifiers(), 357 node_decl 358 ), 359 nullptr, 325 /* Type* = resume_node */, 326 node_init, 360 327 attributes 361 ); 362 appendDeclStmt( body, obj ); 363 364 UntypedExpr *setup = new UntypedExpr( new NameExpr( 365 "__cfaehm__try_resume_setup" ) ); 366 setup->get_args().push_back( nameOf( obj ) ); 367 setup->get_args().push_back( nameOf( resume_handler ) ); 368 369 body->push_back( new ExprStmt( noLabels, setup ) ); 370 328 ) 329 ); 371 330 body->push_back( wraps ); 372 331 return body; … … 374 333 375 334 FunctionDecl * create_finally_wrapper( TryStmt * tryStmt ) { 376 FinallyStmt * finally = tryStmt->get_finally(); 377 CompoundStmt * body = finally->get_block(); 378 finally->set_block( nullptr ); 379 delete finally; 335 CompoundStmt * body = tryStmt->get_finally(); 380 336 tryStmt->set_finally( nullptr ); 381 337 382 338 return new FunctionDecl("finally", Type::StorageClasses(), 383 LinkageSpec::Cforall, void_func_t.clone(), body); 384 } 385 386 ObjectDecl * create_finally_hook( 387 StructDecl * hook_decl, FunctionDecl * finally_wrapper ) { 388 // struct __cfaehm__cleanup_hook __finally_hook 389 // __attribute__((cleanup( finally_wrapper ))); 339 LinkageSpec::Cforall, void_func_t, body); 340 } 341 342 ObjectDecl * create_finally_hook( FunctionDecl * finally_wrapper ) { 343 // struct _cleanup_hook NAME __attribute__((cleanup( ... ))); 390 344 391 345 // Make Cleanup Attribute. … … 394 348 std::list< Expression * > attr_params; 395 349 attr_params.push_back( nameOf( finally_wrapper ) ); 396 attr ibutes.push_back( new Attribute( "cleanup", attr_params ) );397 } 398 399 return new ObjectDecl(400 "__finally_hook",350 attrributes.push_back( new Attribute( "cleanup", attr_params ) ); 351 } 352 353 return ObjectDecl( /* ... */ 354 const std::string &name "finally_hook", 401 355 Type::StorageClasses(), 402 356 LinkageSpec::Cforall, 403 357 nullptr, 404 new StructInstType( 405 emptyQualifiers, 406 hook_decl 407 ), 358 /* ... Type * ... */, 408 359 nullptr, 409 360 attributes … … 412 363 413 364 414 class ExceptionMutatorCore : public With Guards{365 class ExceptionMutatorCore : public WithScoping { 415 366 enum Context { NoHandler, TerHandler, ResHandler }; 416 367 … … 419 370 // loop, switch or the goto stays within the function. 420 371 421 Context cur _context;372 Context curContext; 422 373 423 374 // We might not need this, but a unique base for each try block's … … 426 377 //unsigned int try_count = 0; 427 378 428 StructDecl *node_decl;429 StructDecl *hook_decl;430 379 431 380 public: 432 381 ExceptionMutatorCore() : 433 cur_context(NoHandler), 434 node_decl(nullptr), hook_decl(nullptr) 382 curContext(NoHandler) 435 383 {} 436 384 437 void premutate( CatchStmt *catchStmt ); 438 void premutate( StructDecl *structDecl ); 385 void premutate( CatchStmt *tryStmt ); 439 386 Statement * postmutate( ThrowStmt *throwStmt ); 440 387 Statement * postmutate( TryStmt *tryStmt ); … … 446 393 if ( throwStmt->get_expr() ) { 447 394 return create_terminate_throw( throwStmt ); 448 } else if ( TerHandler == cur _context ) {395 } else if ( TerHandler == curContext ) { 449 396 return create_terminate_rethrow( throwStmt ); 450 397 } else { 451 398 assertf(false, "Invalid throw in %s at %i\n", 452 throwStmt->location.filename .c_str(),399 throwStmt->location.filename, 453 400 throwStmt->location.linenumber); 454 401 return nullptr; … … 457 404 if ( throwStmt->get_expr() ) { 458 405 return create_resume_throw( throwStmt ); 459 } else if ( ResHandler == cur _context ) {406 } else if ( ResHandler == curContext ) { 460 407 return create_resume_rethrow( throwStmt ); 461 408 } else { 462 409 assertf(false, "Invalid throwResume in %s at %i\n", 463 throwStmt->location.filename .c_str(),410 throwStmt->location.filename, 464 411 throwStmt->location.linenumber); 465 412 return nullptr; … … 469 416 470 417 Statement * ExceptionMutatorCore::postmutate( TryStmt *tryStmt ) { 471 assert( node_decl );472 assert( hook_decl );473 474 418 // Generate a prefix for the function names? 475 419 476 CompoundStmt * block = new CompoundStmt( noLabels);477 CompoundStmt * inner = take_try_block( tryStmt );420 CompoundStmt * block = new CompoundStmt(); 421 Statement * inner = take_try_block( tryStmt ); 478 422 479 423 if ( tryStmt->get_finally() ) { … … 483 427 appendDeclStmt( block, finally_block ); 484 428 // Create and add the finally cleanup hook. 485 appendDeclStmt( block, 486 create_finally_hook( hook_decl, finally_block ) ); 487 } 488 489 CatchList termination_handlers; 490 CatchList resumption_handlers; 491 split( tryStmt->get_catchers(), 492 termination_handlers, resumption_handlers ); 493 494 if ( resumption_handlers.size() ) { 429 appendDeclStmt( block, create_finally_hook( finally_block ) ); 430 } 431 432 StatementList termination_handlers; 433 StatementList resumption_handlers; 434 split( tryStmt->get_handlers(), 435 termination_handlers, resumption_handlers ); 436 437 if ( resumeption_handlers.size() ) { 495 438 // Define the helper function. 496 439 FunctionDecl * resume_handler = … … 498 441 appendDeclStmt( block, resume_handler ); 499 442 // Prepare hooks 500 inner = create_resume_wrapper( node_decl,inner, resume_handler );443 inner = create_resume_wrapper( inner, resume_handler ); 501 444 } 502 445 … … 519 462 block->push_back( inner ); 520 463 521 //free_all( termination_handlers );522 //free_all( resumption_handlers );464 free_all( termination_handlers ); 465 free_all( resumption_handlers ); 523 466 524 467 return block; … … 526 469 527 470 void ExceptionMutatorCore::premutate( CatchStmt *catchStmt ) { 528 GuardValue( cur _context );529 if ( CatchStmt::Terminat e== catchStmt->get_kind() ) {530 cur _context = TerHandler;471 GuardValue( curContext ); 472 if ( CatchStmt::Termination == catchStmt->get_kind() ) { 473 curContext = TerHandler; 531 474 } else { 532 cur_context = ResHandler; 533 } 534 } 535 536 void ExceptionMutatorCore::premutate( StructDecl *structDecl ) { 537 if ( !structDecl->has_body() ) { 538 // Skip children? 539 return; 540 } else if ( structDecl->get_name() == "__cfaehm__try_resume_node" ) { 541 assert( nullptr == node_decl ); 542 node_decl = structDecl; 543 } else if ( structDecl->get_name() == "__cfaehm__cleanup_hook" ) { 544 assert( nullptr == hook_decl ); 545 hook_decl = structDecl; 546 } 547 // Later we might get the exception type as well. 548 } 549 550 void translateEHM( std::list< Declaration *> & translationUnit ) { 551 init_func_types(); 552 475 curContext = ResHandler; 476 } 477 } 478 479 void translateEHM( std::list< Declaration *> & translationUnit ) { 553 480 PassVisitor<ExceptionMutatorCore> translator; 554 481 for ( Declaration * decl : translationUnit ) { 555 decl-> acceptMutator( translator );482 decl->mutate( translator ); 556 483 } 557 484 } -
src/ControlStruct/ExceptTranslate.h
ra12d5aa r62423350 10 10 // Created On : Tus Jun 06 10:13:00 2017 11 11 // Last Modified By : Andrew Beach 12 // Last Modified On : Thr Jun 2 9 15:18:00 201713 // Update Count : 112 // Last Modified On : Thr Jun 22 15:57:00 2017 13 // Update Count : 0 14 14 // 15 15 16 16 #ifndef EXCEPT_TRANSLATE_H 17 17 #define EXCEPT_TRANSLATE_H 18 19 #include <list>20 #include "SynTree/SynTree.h"21 18 22 19 namespace ControlFlow { -
src/ControlStruct/module.mk
ra12d5aa r62423350 10 10 ## Author : Richard C. Bilson 11 11 ## Created On : Mon Jun 1 17:49:17 2015 12 ## Last Modified By : Andrew Beach13 ## Last Modified On : Wed Jun 28 16:15:00 201714 ## Update Count : 412 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Thu Aug 4 11:38:06 2016 14 ## Update Count : 3 15 15 ############################################################################### 16 16 17 17 SRC += ControlStruct/LabelGenerator.cc \ 18 18 ControlStruct/LabelFixer.cc \ 19 ControlStruct/MLEMutator.cc \19 ControlStruct/MLEMutator.cc \ 20 20 ControlStruct/Mutate.cc \ 21 ControlStruct/ForExprMutator.cc \22 ControlStruct/ExceptTranslate.cc 21 ControlStruct/ForExprMutator.cc 22 -
src/Makefile.in
ra12d5aa r62423350 119 119 ControlStruct/driver_cfa_cpp-Mutate.$(OBJEXT) \ 120 120 ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) \ 121 ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT) \122 121 GenPoly/driver_cfa_cpp-Box.$(OBJEXT) \ 123 122 GenPoly/driver_cfa_cpp-GenPoly.$(OBJEXT) \ … … 144 143 Parser/driver_cfa_cpp-TypeData.$(OBJEXT) \ 145 144 Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT) \ 146 Parser/driver_cfa_cpp-parse rutility.$(OBJEXT) \145 Parser/driver_cfa_cpp-parseutility.$(OBJEXT) \ 147 146 ResolvExpr/driver_cfa_cpp-AlternativeFinder.$(OBJEXT) \ 148 147 ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) \ … … 396 395 ControlStruct/LabelGenerator.cc ControlStruct/LabelFixer.cc \ 397 396 ControlStruct/MLEMutator.cc ControlStruct/Mutate.cc \ 398 ControlStruct/ForExprMutator.cc \ 399 ControlStruct/ExceptTranslate.cc GenPoly/Box.cc \ 397 ControlStruct/ForExprMutator.cc GenPoly/Box.cc \ 400 398 GenPoly/GenPoly.cc GenPoly/PolyMutator.cc \ 401 399 GenPoly/ScrubTyVars.cc GenPoly/Lvalue.cc GenPoly/Specialize.cc \ … … 408 406 Parser/ExpressionNode.cc Parser/StatementNode.cc \ 409 407 Parser/InitializerNode.cc Parser/TypeData.cc \ 410 Parser/LinkageSpec.cc Parser/parse rutility.cc \408 Parser/LinkageSpec.cc Parser/parseutility.cc \ 411 409 ResolvExpr/AlternativeFinder.cc ResolvExpr/Alternative.cc \ 412 410 ResolvExpr/Unify.cc ResolvExpr/PtrsAssignable.cc \ … … 597 595 ControlStruct/$(am__dirstamp) \ 598 596 ControlStruct/$(DEPDIR)/$(am__dirstamp) 599 ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT): \600 ControlStruct/$(am__dirstamp) \601 ControlStruct/$(DEPDIR)/$(am__dirstamp)602 597 GenPoly/$(am__dirstamp): 603 598 @$(MKDIR_P) GenPoly … … 669 664 Parser/driver_cfa_cpp-LinkageSpec.$(OBJEXT): Parser/$(am__dirstamp) \ 670 665 Parser/$(DEPDIR)/$(am__dirstamp) 671 Parser/driver_cfa_cpp-parse rutility.$(OBJEXT): Parser/$(am__dirstamp) \666 Parser/driver_cfa_cpp-parseutility.$(OBJEXT): Parser/$(am__dirstamp) \ 672 667 Parser/$(DEPDIR)/$(am__dirstamp) 673 668 ResolvExpr/$(am__dirstamp): … … 862 857 -rm -f Common/driver_cfa_cpp-UniqueName.$(OBJEXT) 863 858 -rm -f Concurrency/driver_cfa_cpp-Keywords.$(OBJEXT) 864 -rm -f ControlStruct/driver_cfa_cpp-ExceptTranslate.$(OBJEXT)865 859 -rm -f ControlStruct/driver_cfa_cpp-ForExprMutator.$(OBJEXT) 866 860 -rm -f ControlStruct/driver_cfa_cpp-LabelFixer.$(OBJEXT) … … 892 886 -rm -f Parser/driver_cfa_cpp-lex.$(OBJEXT) 893 887 -rm -f Parser/driver_cfa_cpp-parser.$(OBJEXT) 894 -rm -f Parser/driver_cfa_cpp-parse rutility.$(OBJEXT)888 -rm -f Parser/driver_cfa_cpp-parseutility.$(OBJEXT) 895 889 -rm -f ResolvExpr/driver_cfa_cpp-AdjustExprType.$(OBJEXT) 896 890 -rm -f ResolvExpr/driver_cfa_cpp-Alternative.$(OBJEXT) … … 976 970 @AMDEP_TRUE@@am__include@ @am__quote@Common/$(DEPDIR)/driver_cfa_cpp-UniqueName.Po@am__quote@ 977 971 @AMDEP_TRUE@@am__include@ @am__quote@Concurrency/$(DEPDIR)/driver_cfa_cpp-Keywords.Po@am__quote@ 978 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po@am__quote@979 972 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-ForExprMutator.Po@am__quote@ 980 973 @AMDEP_TRUE@@am__include@ @am__quote@ControlStruct/$(DEPDIR)/driver_cfa_cpp-LabelFixer.Po@am__quote@ … … 1006 999 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-lex.Po@am__quote@ 1007 1000 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parser.Po@am__quote@ 1008 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parse rutility.Po@am__quote@1001 @AMDEP_TRUE@@am__include@ @am__quote@Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po@am__quote@ 1009 1002 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-AdjustExprType.Po@am__quote@ 1010 1003 @AMDEP_TRUE@@am__include@ @am__quote@ResolvExpr/$(DEPDIR)/driver_cfa_cpp-Alternative.Po@am__quote@ … … 1368 1361 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ForExprMutator.obj `if test -f 'ControlStruct/ForExprMutator.cc'; then $(CYGPATH_W) 'ControlStruct/ForExprMutator.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ForExprMutator.cc'; fi` 1369 1362 1370 ControlStruct/driver_cfa_cpp-ExceptTranslate.o: ControlStruct/ExceptTranslate.cc1371 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.o -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc1372 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po1373 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.o' libtool=no @AMDEPBACKSLASH@1374 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1375 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.o `test -f 'ControlStruct/ExceptTranslate.cc' || echo '$(srcdir)/'`ControlStruct/ExceptTranslate.cc1376 1377 ControlStruct/driver_cfa_cpp-ExceptTranslate.obj: ControlStruct/ExceptTranslate.cc1378 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT ControlStruct/driver_cfa_cpp-ExceptTranslate.obj -MD -MP -MF ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi`1379 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Tpo ControlStruct/$(DEPDIR)/driver_cfa_cpp-ExceptTranslate.Po1380 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ControlStruct/ExceptTranslate.cc' object='ControlStruct/driver_cfa_cpp-ExceptTranslate.obj' libtool=no @AMDEPBACKSLASH@1381 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@1382 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o ControlStruct/driver_cfa_cpp-ExceptTranslate.obj `if test -f 'ControlStruct/ExceptTranslate.cc'; then $(CYGPATH_W) 'ControlStruct/ExceptTranslate.cc'; else $(CYGPATH_W) '$(srcdir)/ControlStruct/ExceptTranslate.cc'; fi`1383 1384 1363 GenPoly/driver_cfa_cpp-Box.o: GenPoly/Box.cc 1385 1364 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT GenPoly/driver_cfa_cpp-Box.o -MD -MP -MF GenPoly/$(DEPDIR)/driver_cfa_cpp-Box.Tpo -c -o GenPoly/driver_cfa_cpp-Box.o `test -f 'GenPoly/Box.cc' || echo '$(srcdir)/'`GenPoly/Box.cc … … 1718 1697 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-LinkageSpec.obj `if test -f 'Parser/LinkageSpec.cc'; then $(CYGPATH_W) 'Parser/LinkageSpec.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/LinkageSpec.cc'; fi` 1719 1698 1720 Parser/driver_cfa_cpp-parse rutility.o: Parser/parserutility.cc1721 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parse rutility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc1722 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parse rutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po1723 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parse rutility.cc' object='Parser/driver_cfa_cpp-parserutility.o' libtool=no @AMDEPBACKSLASH@1724 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1725 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parse rutility.o `test -f 'Parser/parserutility.cc' || echo '$(srcdir)/'`Parser/parserutility.cc1726 1727 Parser/driver_cfa_cpp-parse rutility.obj: Parser/parserutility.cc1728 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parse rutility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Tpo -c -o Parser/driver_cfa_cpp-parserutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi`1729 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parse rutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parserutility.Po1730 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parse rutility.cc' object='Parser/driver_cfa_cpp-parserutility.obj' libtool=no @AMDEPBACKSLASH@1731 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1732 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parse rutility.obj `if test -f 'Parser/parserutility.cc'; then $(CYGPATH_W) 'Parser/parserutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parserutility.cc'; fi`1699 Parser/driver_cfa_cpp-parseutility.o: Parser/parseutility.cc 1700 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parseutility.o -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc 1701 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po 1702 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parseutility.cc' object='Parser/driver_cfa_cpp-parseutility.o' libtool=no @AMDEPBACKSLASH@ 1703 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1704 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parseutility.o `test -f 'Parser/parseutility.cc' || echo '$(srcdir)/'`Parser/parseutility.cc 1705 1706 Parser/driver_cfa_cpp-parseutility.obj: Parser/parseutility.cc 1707 @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -MT Parser/driver_cfa_cpp-parseutility.obj -MD -MP -MF Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo -c -o Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi` 1708 @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Tpo Parser/$(DEPDIR)/driver_cfa_cpp-parseutility.Po 1709 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Parser/parseutility.cc' object='Parser/driver_cfa_cpp-parseutility.obj' libtool=no @AMDEPBACKSLASH@ 1710 @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1711 @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(driver_cfa_cpp_CXXFLAGS) $(CXXFLAGS) -c -o Parser/driver_cfa_cpp-parseutility.obj `if test -f 'Parser/parseutility.cc'; then $(CYGPATH_W) 'Parser/parseutility.cc'; else $(CYGPATH_W) '$(srcdir)/Parser/parseutility.cc'; fi` 1733 1712 1734 1713 ResolvExpr/driver_cfa_cpp-AlternativeFinder.o: ResolvExpr/AlternativeFinder.cc -
src/Parser/DeclarationNode.cc
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 12:34:05 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 15:27:00201713 // Update Count : 101 911 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 17 15:46:33 2017 13 // Update Count : 1018 14 14 // 15 15 … … 1063 1063 case TypeData::Enum: 1064 1064 case TypeData::Aggregate: { 1065 ReferenceToType * ret = buildComAggInst( type, attributes , linkage);1065 ReferenceToType * ret = buildComAggInst( type, attributes ); 1066 1066 buildList( type->aggregate.actuals, ret->get_parameters() ); 1067 1067 return ret; -
src/Parser/ExpressionNode.cc
ra12d5aa r62423350 10 10 // Created On : Sat May 16 13:17:07 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jun 2 8 21:08:15201713 // Update Count : 54 212 // Last Modified On : Wed Jun 21 16:44:46 2017 13 // Update Count : 541 14 14 // 15 15 … … 27 27 #include "SynTree/Declaration.h" 28 28 #include "Common/UnimplementedError.h" 29 #include "parse rutility.h"29 #include "parseutility.h" 30 30 #include "Common/utility.h" 31 31 -
src/Parser/LinkageSpec.cc
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:22:09 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 11:51:00 201713 // Update Count : 2 411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sun Oct 2 23:16:21 2016 13 // Update Count : 23 14 14 // 15 15 … … 28 28 } else if ( *spec == "\"C\"" ) { 29 29 return C; 30 } else if ( *spec == "\"BuiltinC\"" ) {31 return BuiltinC;32 30 } else { 33 31 throw SemanticError( "Invalid linkage specifier " + *spec ); … … 38 36 assert( 0 <= linkage && linkage < LinkageSpec::NoOfSpecs ); 39 37 static const char *linkageKinds[LinkageSpec::NoOfSpecs] = { 40 "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", "cfa built-in", "c built-in",38 "intrinsic", "Cforall", "C", "automatically generated", "compiler built-in", 41 39 }; 42 40 return linkageKinds[linkage]; 43 41 } 44 42 45 bool LinkageSpec::is Mangled( Spec spec ) {43 bool LinkageSpec::isDecoratable( Spec spec ) { 46 44 assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs ); 47 45 static bool decoratable[LinkageSpec::NoOfSpecs] = { 48 // Intrinsic, Cforall, C, AutoGen, Compiler ,46 // Intrinsic, Cforall, C, AutoGen, Compiler 49 47 true, true, false, true, false, 50 // Builtin, BuiltinC,51 true, false,52 48 }; 53 49 return decoratable[spec]; … … 57 53 assert( 0 <= spec && spec < LinkageSpec::NoOfSpecs ); 58 54 static bool generatable[LinkageSpec::NoOfSpecs] = { 59 // Intrinsic, Cforall, C, AutoGen, Compiler ,55 // Intrinsic, Cforall, C, AutoGen, Compiler 60 56 true, true, true, true, false, 61 // Builtin, BuiltinC,62 true, true,63 57 }; 64 58 return generatable[spec]; … … 68 62 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs ); 69 63 static bool overridable[LinkageSpec::NoOfSpecs] = { 70 // Intrinsic, Cforall, C, AutoGen, Compiler ,64 // Intrinsic, Cforall, C, AutoGen, Compiler 71 65 true, false, false, true, false, 72 // Builtin, BuiltinC,73 false, false,74 66 }; 75 67 return overridable[spec]; … … 79 71 assert( spec >= 0 && spec < LinkageSpec::NoOfSpecs ); 80 72 static bool builtin[LinkageSpec::NoOfSpecs] = { 81 // Intrinsic, Cforall, C, AutoGen, Compiler ,73 // Intrinsic, Cforall, C, AutoGen, Compiler 82 74 true, false, false, false, true, 83 // Builtin, BuiltinC,84 true, true,85 75 }; 86 76 return builtin[spec]; -
src/Parser/LinkageSpec.h
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 13:24:28 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 11:50:00 201713 // Update Count : 1 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Oct 1 23:03:17 2016 13 // Update Count : 11 14 14 // 15 15 … … 26 26 AutoGen, // built by translator (struct assignment) 27 27 Compiler, // gcc internal 28 Builtin, // mangled builtins29 BuiltinC, // non-mangled builtins30 28 NoOfSpecs 31 29 }; … … 34 32 static std::string linkageName( Spec ); 35 33 36 static bool is Mangled( Spec );34 static bool isDecoratable( Spec ); 37 35 static bool isGeneratable( Spec ); 38 36 static bool isOverridable( Spec ); -
src/Parser/StatementNode.cc
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 14:59:41 2015 11 // Last Modified By : Peter A. Buhr12 // Last Modified On : Wed Jun 28 21:08:37201713 // Update Count : 3 3011 // Last Modified By : Andrew Beach 12 // Last Modified On : Mon Jun 12 13:03:00 2017 13 // Update Count : 329 14 14 // 15 15 … … 21 21 #include "SynTree/Statement.h" 22 22 #include "SynTree/Expression.h" 23 #include "parse rutility.h"23 #include "parseutility.h" 24 24 #include "Common/utility.h" 25 25 -
src/Parser/TypeData.cc
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:12:51 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 15:28:00201713 // Update Count : 56 411 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 17 15:52:43 2017 13 // Update Count : 563 14 14 // 15 15 … … 614 614 } // buildPointer 615 615 616 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes , LinkageSpec::Spec linkage) {616 AggregateDecl * buildAggregate( const TypeData * td, std::list< Attribute * > attributes ) { 617 617 assert( td->kind == TypeData::Aggregate ); 618 618 AggregateDecl * at; … … 622 622 case DeclarationNode::Monitor: 623 623 case DeclarationNode::Thread: 624 at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes , linkage);624 at = new StructDecl( *td->aggregate.name, td->aggregate.kind, attributes ); 625 625 buildForall( td->aggregate.params, at->get_parameters() ); 626 626 break; … … 643 643 } // buildAggregate 644 644 645 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes , LinkageSpec::Spec linkage) {645 ReferenceToType * buildComAggInst( const TypeData * type, std::list< Attribute * > attributes ) { 646 646 switch ( type->kind ) { 647 647 case TypeData::Enum: { … … 656 656 ReferenceToType * ret; 657 657 if ( type->aggregate.body ) { 658 AggregateDecl * typedecl = buildAggregate( type, attributes , linkage);658 AggregateDecl * typedecl = buildAggregate( type, attributes ); 659 659 switch ( type->aggregate.kind ) { 660 660 case DeclarationNode::Struct: … … 803 803 return decl->set_asmName( asmName ); 804 804 } else if ( td->kind == TypeData::Aggregate ) { 805 return buildAggregate( td, attributes , linkage);805 return buildAggregate( td, attributes ); 806 806 } else if ( td->kind == TypeData::Enum ) { 807 807 return buildEnum( td, attributes ); -
src/Parser/TypeData.h
ra12d5aa r62423350 9 9 // Author : Rodolfo G. Esteves 10 10 // Created On : Sat May 16 15:18:36 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 15:29:00201713 // Update Count : 18 611 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 08:32:39 2017 13 // Update Count : 185 14 14 // 15 15 … … 102 102 ArrayType * buildArray( const TypeData * ); 103 103 AggregateDecl * buildAggregate( const TypeData *, std::list< Attribute * > ); 104 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes , LinkageSpec::Spec linkage);104 ReferenceToType * buildComAggInst( const TypeData *, std::list< Attribute * > attributes ); 105 105 ReferenceToType * buildAggInst( const TypeData * ); 106 106 TypeDecl * buildVariable( const TypeData * ); -
src/Parser/TypedefTable.h
ra12d5aa r62423350 10 10 // Created On : Sat May 16 15:24:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jun 28 21:56:34 201713 // Update Count : 3312 // Last Modified On : Mon Aug 15 18:25:04 2016 13 // Update Count : 28 14 14 // 15 15 … … 22 22 #include <stack> 23 23 24 #include " parser.hh"24 #include "lex.h" 25 25 #include "parser.h" 26 26 -
src/Parser/lex.ll
ra12d5aa r62423350 10 10 * Created On : Sat Sep 22 08:58:10 2001 11 11 * Last Modified By : Peter A. Buhr 12 * Last Modified On : Wed Jun 28 21:03:45201713 * Update Count : 52 912 * Last Modified On : Tue May 30 22:00:48 2017 13 * Update Count : 527 14 14 */ 15 15 … … 27 27 #include <cstdio> // FILENAME_MAX 28 28 29 #include "lex.h" 30 #include "parser.h" // YACC generated definitions based on C++ grammar 29 31 #include "ParseNode.h" 30 32 #include "TypedefTable.h" -
src/Parser/module.mk
ra12d5aa r62423350 11 11 ## Created On : Sat May 16 15:29:09 2015 12 12 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Wed Jun 28 21:58:29 201714 ## Update Count : 10 413 ## Last Modified On : Tue Aug 16 17:28:34 2016 14 ## Update Count : 101 15 15 ############################################################################### 16 16 … … 29 29 Parser/TypeData.cc \ 30 30 Parser/LinkageSpec.cc \ 31 Parser/parse rutility.cc31 Parser/parseutility.cc 32 32 33 33 MAINTAINERCLEANFILES += Parser/parser.output -
src/Parser/parser.yy
ra12d5aa r62423350 5 5 // file "LICENCE" distributed with Cforall. 6 6 // 7 // parser.yy --7 // cfa.y -- 8 8 // 9 9 // Author : Peter A. Buhr 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jun 28 22:11:22201713 // Update Count : 24 1412 // Last Modified On : Mon Jun 12 12:59:00 2017 13 // Update Count : 2402 14 14 // 15 15 … … 48 48 #include <cstdio> 49 49 #include <stack> 50 #include "lex.h" 51 #include "parser.h" 50 52 #include "ParseNode.h" 51 53 #include "TypedefTable.h" … … 86 88 bool forall = false; // aggregate have one or more forall qualifiers ? 87 89 %} 88 89 // Types declaration90 %union91 {92 Token tok;93 ParseNode * pn;94 ExpressionNode * en;95 DeclarationNode * decl;96 DeclarationNode::Aggregate aggKey;97 DeclarationNode::TypeClass tclass;98 StatementNode * sn;99 ConstantExpr * constant;100 ForCtl * fctl;101 LabelNode * label;102 InitializerNode * in;103 OperKinds op;104 std::string * str;105 bool flag;106 }107 90 108 91 //************************* TERMINAL TOKENS ******************************** … … 156 139 157 140 %token ATassign // @= 141 142 // Types declaration 143 %union 144 { 145 Token tok; 146 ParseNode * pn; 147 ExpressionNode * en; 148 DeclarationNode * decl; 149 DeclarationNode::Aggregate aggKey; 150 DeclarationNode::TypeClass tclass; 151 StatementNode * sn; 152 ConstantExpr * constant; 153 ForCtl * fctl; 154 LabelNode * label; 155 InitializerNode * in; 156 OperKinds op; 157 std::string * str; 158 bool flag; 159 } 158 160 159 161 %type<tok> identifier no_attr_identifier zero_one … … 957 959 958 960 handler_clause: 959 // TEMPORARY, TEST EXCEPTIONS 960 CATCH '(' push push INTEGERconstant pop ')' compound_statement pop 961 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$5 ) ), $8 ) ); } 962 | handler_clause CATCH '(' push push INTEGERconstant pop ')' compound_statement pop 963 { $$ = (StatementNode *)$1->set_last( new StatementNode( build_catch( CatchStmt::Terminate, nullptr, new ExpressionNode( build_constantInteger( *$6 ) ), $9 ) ) ); } 964 965 | CATCH '(' push push exception_declaration pop ')' compound_statement pop 961 CATCH '(' push push exception_declaration pop ')' compound_statement pop 966 962 { $$ = new StatementNode( build_catch( CatchStmt::Terminate, $5, nullptr, $8 ) ); } 967 963 | handler_clause CATCH '(' push push exception_declaration pop ')' compound_statement pop -
src/SymTab/Autogen.cc
ra12d5aa r62423350 9 9 // Author : Rob Schluntz 10 10 // Created On : Thu Mar 03 15:45:56 2016 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 15:30:00201713 // Update Count : 6 111 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 17 09:41:08 2017 13 // Update Count : 60 14 14 // 15 15 … … 400 400 /// generates struct constructors, destructor, and assignment functions 401 401 void makeStructFunctions( StructDecl *aggregateDecl, StructInstType *refType, unsigned int functionNesting, std::list< Declaration * > & declsToAdd, const std::vector< FuncData > & data ) { 402 // Builtins do not use autogeneration.403 if ( aggregateDecl->get_linkage() == LinkageSpec::Builtin ||404 aggregateDecl->get_linkage() == LinkageSpec::BuiltinC ) {405 return;406 }407 408 402 // Make function polymorphic in same parameters as generic struct, if applicable 409 403 const std::list< TypeDecl* > & typeParams = aggregateDecl->get_parameters(); // List of type variables to be placed on the generated functions -
src/SymTab/Mangler.cc
ra12d5aa r62423350 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 21:40:29 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Wed Jun 28 15:31:00201713 // Update Count : 2 111 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 17 09:40:01 2017 13 // Update Count : 20 14 14 // 15 15 … … 72 72 } else { 73 73 // if we add another kind of overridable function, this has to change 74 assert( false && "unknown overrideable linkage");74 assert( false ); 75 75 } // if 76 76 } -
src/SynTree/AggregateDecl.cc
ra12d5aa r62423350 9 9 // Author : Richard C. Bilson 10 10 // Created On : Sun May 17 23:56:39 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : T us Jun 27 15:30:00201713 // Update Count : 2 111 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Mar 16 07:49:07 2017 13 // Update Count : 20 14 14 // 15 15 … … 20 20 21 21 22 AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes , LinkageSpec::Spec linkage ) : Parent( name, Type::StorageClasses(), linkage), body( false ), attributes( attributes ) {22 AggregateDecl::AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes ) : Parent( name, Type::StorageClasses(), LinkageSpec::Cforall ), body( false ), attributes( attributes ) { 23 23 } 24 24 -
src/SynTree/Declaration.h
ra12d5aa r62423350 9 9 // Author : Richard C. Bilson 10 10 // Created On : Mon May 18 07:44:20 2015 11 // Last Modified By : Andrew Beach12 // Last Modified On : Tus Jun 27 15:31:00201713 // Update Count : 12 211 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Mar 17 16:05:08 2017 13 // Update Count : 121 14 14 // 15 15 … … 238 238 typedef Declaration Parent; 239 239 public: 240 AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() , LinkageSpec::Spec linkage = LinkageSpec::Cforall);240 AggregateDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ); 241 241 AggregateDecl( const AggregateDecl &other ); 242 242 virtual ~AggregateDecl(); … … 266 266 typedef AggregateDecl Parent; 267 267 public: 268 StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >() , LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage), kind( kind ) {}268 StructDecl( const std::string &name, DeclarationNode::Aggregate kind = DeclarationNode::Struct, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ), kind( kind ) {} 269 269 StructDecl( const StructDecl &other ) : Parent( other ) {} 270 270 … … 284 284 typedef AggregateDecl Parent; 285 285 public: 286 UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() , LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage) {}286 UnionDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ) {} 287 287 UnionDecl( const UnionDecl &other ) : Parent( other ) {} 288 288 … … 297 297 typedef AggregateDecl Parent; 298 298 public: 299 EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() , LinkageSpec::Spec linkage = LinkageSpec::Cforall ) : Parent( name, attributes, linkage) {}299 EnumDecl( const std::string &name, const std::list< Attribute * > & attributes = std::list< class Attribute * >() ) : Parent( name, attributes ) {} 300 300 EnumDecl( const EnumDecl &other ) : Parent( other ) {} 301 301 -
src/libcfa/Makefile.am
ra12d5aa r62423350 10 10 ## Author : Peter A. Buhr 11 11 ## Created On : Sun May 31 08:54:01 2015 12 ## Last Modified By : Andrew Beach13 ## Last Modified On : Wed Jun 28 15:36:00201714 ## Update Count : 21 512 ## Last Modified By : Peter A. Buhr 13 ## Last Modified On : Sun May 14 21:04:21 2017 14 ## Update Count : 214 15 15 ############################################################################### 16 16 … … 64 64 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 65 65 66 libcfa_a-exception.o : exception.c67 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<68 69 66 concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c 70 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<71 72 libcfa_d_a-exception.o : exception.c73 67 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 74 68 … … 78 72 libcfa_a_CFLAGS = -nodebug -O2 79 73 libcfa_d_a_SOURCES = ${libsrc} 80 libcfa_d_a_CFLAGS = -debug -O0 #No need for __CFA_DEBUG__ since we pass -debug74 libcfa_d_a_CFLAGS = -debug -O0 81 75 82 76 stdhdr = ${shell echo stdhdr/*} -
src/libcfa/Makefile.in
ra12d5aa r62423350 332 332 libcfa_a_CFLAGS = -nodebug -O2 333 333 libcfa_d_a_SOURCES = ${libsrc} 334 libcfa_d_a_CFLAGS = -debug -O0 #No need for __CFA_DEBUG__ since we pass -debug334 libcfa_d_a_CFLAGS = -debug -O0 335 335 stdhdr = ${shell echo stdhdr/*} 336 336 cfa_includedir = $(CFA_INCDIR) … … 1428 1428 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $< 1429 1429 1430 libcfa_a-exception.o : exception.c1431 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -O2 ${EXTRA_FLAGS} -c -o $@ $<1432 1433 1430 concurrency/libcfa_d_a-invoke.o : concurrency/invoke.c 1434 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $<1435 1436 libcfa_d_a-exception.o : exception.c1437 1431 ${AM_V_CC}@BACKEND_CC@ -DHAVE_CONFIG_H -I. -I../.. -D__CFA_DEBUG__ -O0 ${EXTRA_FLAGS} -c -o $@ $< 1438 1432 -
src/main.cc
ra12d5aa r62423350 10 10 // Author : Richard C. Bilson 11 11 // Created On : Fri May 15 23:12:02 2015 12 // Last Modified By : Peter A. Buhr13 // Last Modified On : Thu Jun 29 12:46:50 201714 // Update Count : 4 4112 // Last Modified By : Andrew Beach 13 // Last Modified On : Wed May 10 14:45:00 2017 14 // Update Count : 437 15 15 // 16 16 … … 25 25 using namespace std; 26 26 27 #include "Parser/parser.hh" 27 #include "Parser/lex.h" 28 #include "Parser/parser.h" 28 29 #include "Parser/TypedefTable.h" 29 30 #include "GenPoly/Lvalue.h" … … 185 186 if ( ! nopreludep ) { // include gcc builtins 186 187 // -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here. 187 188 // Read to gcc builtins, if not generating the cfa library 189 FILE * gcc_builtins = fopen( libcfap | treep ? "../prelude/gcc-builtins.cf" : CFA_LIBDIR "/gcc-builtins.cf", "r" ); 190 assertf( gcc_builtins, "cannot open gcc-builtins.cf\n" ); 191 parse( gcc_builtins, LinkageSpec::Compiler ); 188 FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" ); 189 assertf( builtins, "cannot open builtins.cf\n" ); 190 parse( builtins, LinkageSpec::Compiler ); 192 191 193 192 // read the extra prelude in, if not generating the cfa library … … 201 200 assertf( prelude, "cannot open prelude.cf\n" ); 202 201 parse( prelude, LinkageSpec::Intrinsic ); 203 204 // Read to cfa builtins, if not generating the cfa library205 FILE * builtins = fopen( libcfap | treep ? "../prelude/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );206 assertf( builtins, "cannot open builtins.cf\n" );207 parse( builtins, LinkageSpec::Builtin );208 202 } // if 209 203 } // if … … 481 475 break; 482 476 case '?': 483 if ( optopt ) { // short option ? 484 assertf( false, "Unknown option: -%c\n", (char)optopt ); 485 } else { 486 assertf( false, "Unknown option: %s\n", argv[optind - 1] ); 487 } // if 477 assertf( false, "Unknown option: '%c'\n", (char)optopt ); 488 478 default: 489 479 abort(); -
src/prelude/Makefile.am
ra12d5aa r62423350 20 20 # put into lib for now 21 21 cfalibdir = ${CFA_LIBDIR} 22 cfalib_DATA = gcc-builtins.cfbuiltins.cf extras.cf prelude.cf bootloader.c22 cfalib_DATA = builtins.cf extras.cf prelude.cf bootloader.c 23 23 noinst_DATA = ../libcfa/libcfa-prelude.c 24 25 $(DEPDIR) :26 mkdir $(DEPDIR)27 28 $(DEPDIR)/builtins.Po : $(DEPDIR)29 touch ${@}30 24 31 25 # create extra forward types/declarations to reduce inclusion of library files … … 34 28 35 29 # create forward declarations for gcc builtins 36 gcc-builtins.cf : gcc-builtins.c prototypes.sed30 builtins.cf : builtins.c prototypes.sed 37 31 ${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -f prototypes.sed > $@ 38 32 39 gcc-builtins.c : builtins.def prototypes.awk33 builtins.c : builtins.def prototypes.awk 40 34 ${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ 41 35 … … 44 38 prototypes.awk : 45 39 46 # create forward declarations for cfa builtins 47 builtins.cf : builtins.c 48 ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po 49 ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po 50 51 include $(DEPDIR)/builtins.Po 52 53 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 40 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 54 41 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@ # use src/cfa-cpp as not in lib until after install 55 42 56 bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cfbuiltins.cf ${abs_top_srcdir}/src/driver/cfa-cpp43 bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 57 44 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@ # use src/cfa-cpp as not in lib until after install 58 45 59 maintainer-clean-local : 60 rm -rf $(DEPDIR) 61 62 MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cf builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}} 46 MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}} -
src/prelude/Makefile.in
ra12d5aa r62423350 211 211 # put into lib for now 212 212 cfalibdir = ${CFA_LIBDIR} 213 cfalib_DATA = gcc-builtins.cfbuiltins.cf extras.cf prelude.cf bootloader.c213 cfalib_DATA = builtins.cf extras.cf prelude.cf bootloader.c 214 214 noinst_DATA = ../libcfa/libcfa-prelude.c 215 MAINTAINERCLEANFILES = gcc-builtins.c gcc-builtins.cfbuiltins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}215 MAINTAINERCLEANFILES = builtins.c builtins.cf extras.cf bootloader.c ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}} 216 216 all: all-am 217 217 … … 390 390 maintainer-clean: maintainer-clean-am 391 391 -rm -f Makefile 392 maintainer-clean-am: distclean-am maintainer-clean-generic \ 393 maintainer-clean-local 392 maintainer-clean-am: distclean-am maintainer-clean-generic 394 393 395 394 mostlyclean: mostlyclean-am … … 417 416 install-ps install-ps-am install-strip installcheck \ 418 417 installcheck-am installdirs maintainer-clean \ 419 maintainer-clean-generic maintainer-clean-local mostlyclean \ 420 mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ 421 uninstall-cfalibDATA 422 423 424 $(DEPDIR) : 425 mkdir $(DEPDIR) 426 427 $(DEPDIR)/builtins.Po : $(DEPDIR) 428 touch ${@} 418 maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ 419 pdf-am ps ps-am uninstall uninstall-am uninstall-cfalibDATA 420 429 421 430 422 # create extra forward types/declarations to reduce inclusion of library files … … 433 425 434 426 # create forward declarations for gcc builtins 435 gcc-builtins.cf : gcc-builtins.c prototypes.sed427 builtins.cf : builtins.c prototypes.sed 436 428 ${AM_V_GEN}@BACKEND_CC@ -E -P $< | sed -f prototypes.sed > $@ 437 429 438 gcc-builtins.c : builtins.def prototypes.awk430 builtins.c : builtins.def prototypes.awk 439 431 ${AM_V_GEN}@BACKEND_CC@ -E prototypes.c | awk -f prototypes.awk > $@ 440 432 … … 443 435 prototypes.awk : 444 436 445 # create forward declarations for cfa builtins 446 builtins.cf : builtins.c 447 ${AM_V_GEN}@BACKEND_CC@ -E -P ${<} -o ${@} -MD -MP -MF $(DEPDIR)/builtins.Po 448 ${AM_V_at}sed -i 's/builtins.o/builtins.cf/g' $(DEPDIR)/builtins.Po 449 450 include $(DEPDIR)/builtins.Po 451 452 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 437 ../libcfa/libcfa-prelude.c : prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 453 438 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -l prelude.cf $@ # use src/cfa-cpp as not in lib until after install 454 439 455 bootloader.c : bootloader.cf prelude.cf extras.cf gcc-builtins.cfbuiltins.cf ${abs_top_srcdir}/src/driver/cfa-cpp440 bootloader.c : bootloader.cf prelude.cf extras.cf builtins.cf ${abs_top_srcdir}/src/driver/cfa-cpp 456 441 ${AM_V_GEN}${abs_top_srcdir}/src/driver/cfa-cpp -tpmL bootloader.cf $@ # use src/cfa-cpp as not in lib until after install 457 458 maintainer-clean-local :459 rm -rf $(DEPDIR)460 442 461 443 # Tell versions [3.59,3.63) of GNU make to not export all variables. -
src/tests/preempt_longrun/Makefile.am
ra12d5aa r62423350 16 16 17 17 repeats=10 18 max_time=30 18 max_time=10 19 N=10ul 19 20 preempt=10_000ul 20 21 21 22 REPEAT = ${abs_top_srcdir}/tools/repeat -s 22 23 23 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -D PREEMPTION_RATE=${preempt}24 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DN=${N} -DPREEMPTION_RATE=${preempt} 24 25 CFLAGS = ${BUILD_FLAGS} 25 26 CC = @CFA_BINDIR@/@CFA_NAME@ 26 27 27 TESTS = barge block create disjoint processor stack waityield28 TESTS = create stack yield 28 29 29 30 .INTERMEDIATE: ${TESTS} -
src/tests/preempt_longrun/Makefile.in
ra12d5aa r62423350 178 178 top_srcdir = @top_srcdir@ 179 179 repeats = 10 180 max_time = 30 180 max_time = 10 181 N = 10ul 181 182 preempt = 10_000ul 182 183 REPEAT = ${abs_top_srcdir}/tools/repeat -s 183 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -D PREEMPTION_RATE=${preempt}184 TESTS = barge block create disjoint processor stack waityield184 BUILD_FLAGS = -g -Wall -Wno-unused-function -quiet @CFA_FLAGS@ -debug -O2 -DN=${N} -DPREEMPTION_RATE=${preempt} 185 TESTS = create stack yield 185 186 all: all-am 186 187 -
src/tests/sched-int-block.c
ra12d5aa r62423350 5 5 #include <thread> 6 6 7 #ifndef N 8 #define N 100_000 9 #endif 7 static const unsigned N = 100_000; 10 8 11 9 enum state_t { WAITED, SIGNAL, BARGE }; -
src/tests/sched-int-disjoint.c
ra12d5aa r62423350 4 4 #include <thread> 5 5 6 #ifndef N7 6 #define N 100_000 8 #endif9 7 10 8 enum state_t { WAIT, SIGNAL, BARGE }; -
src/tests/sched-int-wait.c
ra12d5aa r62423350 5 5 #include <thread> 6 6 7 #ifndef N 8 #define N 10_000 9 #endif 7 static const int N = 10_000; 10 8 11 9 monitor global_t {}; -
tools/cfa.nanorc
ra12d5aa r62423350 2 2 ## WIP 3 3 4 syntax "cfa" "\.cfa" 4 syntax "cfa" "\.cfa$" 5 ## No magic 5 6 6 7 # Macros … … 18 19 # Control Flow Structures 19 20 color brightyellow "\<(if|else|while|do|for|switch|choose|case|default)\>" 20 color brightyellow "\<(try|catch|catchResume|finally)\>"21 ##color brightyellow "\<(try|catch|catchResume|finally)\>" 21 22 22 23 # Control Flow Statements 23 color magenta "\<(return|break|continue|fallthru|throw |throwResume)\>"24 color magenta "\<(return|break|continue|fallthru|throw)\>" 24 25 25 26 # Operator Names … … 45 46 color brightmagenta "'\\(([0-3]?[0-7]{1,2}))'" "'\\x[0-9A-Fa-f]{1,2}'" 46 47 # Strings and Angle Strings 47 color yellow ""([^"]|\\")*"" "<[^[:blank:]=]*>"48 color brightyellow ""([^"]|\\")*"" "<[^[:blank:]=]*>" 48 49 # Multiline Strings: This regex is VERY expencive and often too strong. 49 50 ###color brightyellow start=""(\\.|[^"])*\\[[:space:]]*$" end="^(\\.|[^"])*"" -
tools/repeat
ra12d5aa r62423350 20 20 for (( i = 0; i < ITERATION; i ++ )); do 21 21 echo -ne "\r$i / $ITERATION" 22 $@ > /dev/null&22 $@ & 23 23 child=$! 24 24 wait "$child"
Note:
See TracChangeset
for help on using the changeset viewer.