Changes in / [255b294:c00ddfe]
- Files:
-
- 1 added
- 6 deleted
- 23 edited
Legend:
- Unmodified
- Added
- Removed
-
Jenkins/FullBuild
r255b294 rc00ddfe 1 1 #!groovy 2 2 3 //===========================================================================================================4 // Main loop of the compilation5 //===========================================================================================================6 7 node ('master') {8 def err = null9 10 try {11 //Prevent the build from exceeding 30 minutes12 timeout(60) {13 14 //Wrap build to add timestamp to command line15 wrap([$class: 'TimestamperBuildWrapper']) {16 17 stage 'Build'18 19 results = [null, null]20 21 parallel (22 gcc_6_x64: { trigger_build( 'gcc-6', 'x64' ) },23 gcc_6_x86: { trigger_build( 'gcc-6', 'x86' ) },24 gcc_5_x64: { trigger_build( 'gcc-5', 'x64' ) },25 gcc_5_x86: { trigger_build( 'gcc-5', 'x86' ) },26 gcc_4_x64: { trigger_build( 'gcc-4.9', 'x64' ) },27 gcc_4_x86: { trigger_build( 'gcc-4.9', 'x86' ) },28 clang_x64: { trigger_build( 'clang', 'x64' ) },29 clang_x86: { trigger_build( 'clang', 'x86' ) },30 )31 32 //Push latest changes to do-lang repo33 push_build()34 }35 }36 }37 38 //If an exception is caught we need to change the status and remember to39 //attach the build log to the email40 catch (Exception caughtError) {41 echo('error caught')42 43 //rethrow error later44 err = caughtError45 46 //Store the result of the build log47 currentBuild.result = 'FAILURE'48 49 //Send email to notify the failure50 promote_failure_email()51 }52 53 finally {54 //Must re-throw exception to propagate error55 if (err) {56 throw err57 }58 }59 }60 3 //=========================================================================================================== 61 4 // Main compilation routines 62 5 //=========================================================================================================== 63 6 64 def trigger_build(String cc, Stringarch) {7 def trigger_build(String arch) { 65 8 def result = build job: 'Cforall/master', \ 66 9 parameters: [ \ 10 [$class: 'BooleanParameterValue', \ 11 name: 'isFullBuild', \ 12 value: true], \ 67 13 [$class: 'StringParameterValue', \ 68 name: 'pCompiler', \ 69 value: cc], \ 70 [$class: 'StringParameterValue', \ 71 name: 'pArchitecture', \ 72 value: arch], \ 73 [$class: 'BooleanParameterValue', \ 74 name: 'pRunAllTests', \ 75 value: true], \ 76 [$class: 'BooleanParameterValue', \ 77 name: 'pRunBenchmark', \ 78 value: true], \ 79 [$class: 'BooleanParameterValue', \ 80 name: 'pBuildDocumentation', \ 81 value: true], \ 82 [$class: 'BooleanParameterValue', \ 83 name: 'pPublish', \ 84 value: true], \ 85 [$class: 'BooleanParameterValue', \ 86 name: 'pSilent', \ 87 value: true], \ 14 name: 'buildArchitecture', \ 15 value: arch] \ 88 16 ], \ 89 17 propagate: false … … 141 69 142 70 //=========================================================================================================== 71 // Main loop of the compilation 72 //=========================================================================================================== 73 74 node ('master') { 75 def err = null 76 77 try { 78 //Prevent the build from exceeding 30 minutes 79 timeout(60) { 80 81 //Wrap build to add timestamp to command line 82 wrap([$class: 'TimestamperBuildWrapper']) { 83 84 stage 'Build' 85 86 results = [null, null] 87 88 parallel ( 89 x64: { 90 trigger_build('64-bit') 91 }, 92 x32: { 93 trigger_build('32-bit') 94 } 95 ) 96 97 //Push latest changes to do-lang repo 98 push_build() 99 } 100 } 101 } 102 103 //If an exception is caught we need to change the status and remember to 104 //attach the build log to the email 105 catch (Exception caughtError) { 106 echo('error caught') 107 108 //rethrow error later 109 err = caughtError 110 111 //Store the result of the build log 112 currentBuild.result = 'FAILURE' 113 114 //Send email to notify the failure 115 promote_failure_email() 116 } 117 118 finally { 119 //Must re-throw exception to propagate error 120 if (err) { 121 throw err 122 } 123 } 124 } 125 //=========================================================================================================== 143 126 //Routine responsible of sending the email notification once the build is completed 144 127 //=========================================================================================================== -
Jenkinsfile
r255b294 rc00ddfe 2 2 3 3 //=========================================================================================================== 4 // Main compilation routines 5 //=========================================================================================================== 6 //Compilation script is done here but environnement set-up and error handling is done in main loop 7 def cfa_build(boolean full_build, String flags) { 8 build_stage 'Checkout' 9 def install_dir = pwd tmp: true 10 //checkout the source code and clean the repo 11 checkout scm 12 13 //Clean all temporary files to make sure no artifacts of the previous build remain 14 sh 'git clean -fdqx' 15 16 //Reset the git repo so no local changes persist 17 sh 'git reset --hard' 18 19 build_stage 'Build' 20 21 //Configure the conpilation (Output is not relevant) 22 //Use the current directory as the installation target so nothing 23 //escapes the sandbox 24 //Also specify the compiler by hand 25 sh "./configure CXX=${currentCC.cpp_cc} ${flags} --with-backend-compiler=${currentCC.cfa_backend_cc} --prefix=${install_dir} --enable-silent-rules --quiet" 26 27 //Compile the project 28 sh 'make -j 8 --no-print-directory V=0 install' 29 30 build_stage 'Test' 31 32 //Run the tests from the tests directory 33 if (full_build) { 34 sh 'make -C src/tests all-tests debug=yes' 35 sh 'make -C src/tests all-tests debug=no' 36 } 37 else { 38 sh 'make -C src/tests' 39 } 40 41 build_stage 'Cleanup' 42 43 //do a maintainer-clean to make sure we need to remake from scratch 44 sh 'make maintainer-clean > /dev/null' 45 } 46 47 def make_doc() { 48 def err = null 49 50 try { 51 sh 'make clean > /dev/null' 52 sh 'make > /dev/null 2>&1' 53 } 54 55 catch (Exception caughtError) { 56 //rethrow error later 57 err = caughtError 58 59 sh 'cat *.log' 60 } 61 62 finally { 63 /* Must re-throw exception to propagate error */ 64 if (err) { 65 throw err 66 } 67 } 68 } 69 70 def doc_build() { 71 stage 'Documentation' 72 73 status_prefix = 'Documentation' 74 75 dir ('doc/user') { 76 make_doc() 77 } 78 79 dir ('doc/refrat') { 80 make_doc() 81 } 82 } 83 84 def benchmark() { 85 stage 'Benchmark' 86 87 status_prefix = 'Documentation' 88 89 // //We can't just write to a file outside our repo 90 // //Copy the file locally using ssh 91 // sh 'scp plg2.cs.uwaterloo.ca:/u/cforall/public_html/perf-history/concurrency.csv bench.csv' 92 93 // //Then append to the local file 94 // sh 'make -C src/benchmark csv-data >> bench.csv' 95 96 // //Then publish the file again 97 // sh 'scp bench.csv plg2.cs.uwaterloo.ca:/u/cforall/public_html/perf-history/concurrency.csv' 98 } 99 100 //=========================================================================================================== 101 // Helper classes/variables/routines to make the status and stage name easier to use 102 //=========================================================================================================== 103 //Description of a compiler (Must be serializable since pipelines are persistent) 104 class CC_Desc implements Serializable { 105 public String cc_name 106 public String cpp_cc 107 public String cfa_backend_cc 108 109 CC_Desc(String cc_name, String cpp_cc, String cfa_backend_cc) { 110 this.cc_name = cc_name 111 this.cpp_cc = cpp_cc 112 this.cfa_backend_cc = cfa_backend_cc 113 } 114 } 115 116 //Global Variables defining the compiler and at which point in the build we are 117 // These variables are used but can't be declared before hand because of wierd scripting rules 118 // @Field String currentCC 119 // @Field String status_prefix 120 121 //Wrapper to sync stage name and status name 122 def build_stage(String name) { 123 def stage_name = "${currentCC.cc_name} ${name}".trim() 124 stage stage_name 125 126 status_prefix = stage_name 127 } 128 129 //Helper routine to collect information about the git history 130 def collect_git_info() { 131 132 //create the temporary output directory in case it doesn't already exist 133 def out_dir = pwd tmp: true 134 sh "mkdir -p ${out_dir}" 135 136 //parse git logs to find what changed 137 gitRefName = env.BRANCH_NAME 138 dir("../${gitRefName}@script") { 139 sh "git reflog > ${out_dir}/GIT_COMMIT" 140 } 141 git_reflog = readFile("${out_dir}/GIT_COMMIT") 142 gitRefOldValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][1] 143 gitRefNewValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][2] 144 } 145 146 //=========================================================================================================== 4 147 // Main loop of the compilation 5 148 //=========================================================================================================== 6 149 node ('master'){ 7 150 8 boolean bIs Sandbox = env.BRANCH_NAME == "jenkins-sandbox"151 boolean bIsFullBuild 9 152 def err = null 10 153 def log_needed = false 11 12 stage_name = ''13 14 compiler = null15 architecture = ''16 17 do_alltests = false18 do_benchmark = false19 do_doc = false20 do_publish = false21 do_sendemail = true22 23 154 currentBuild.result = "SUCCESS" 155 status_prefix = '' 24 156 25 157 try { 26 //Wrap build to add timestamp to command line 27 wrap([$class: 'TimestamperBuildWrapper']) { 28 29 //Prevent the build from exceeding 60 minutes 30 timeout(60) { 31 32 notify_server() 33 34 prepare_build() 35 36 checkout() 37 38 build() 39 40 test() 41 158 //Prevent the build from exceeding 30 minutes 159 timeout(60) { 160 161 //Wrap build to add timestamp to command line 162 wrap([$class: 'TimestamperBuildWrapper']) { 163 164 collect_git_info() 165 166 properties ([ \ 167 [$class: 'ParametersDefinitionProperty', \ 168 parameterDefinitions: [ \ 169 [$class: 'BooleanParameterDefinition', \ 170 defaultValue: false, \ 171 description: 'If true, the build will be promoted to the do-lang git repository (on successful builds only)', \ 172 name: 'isFullBuild' \ 173 ], \ 174 [$class: 'ChoiceParameterDefinition', \ 175 choices: '64-bit\n32-bit', \ 176 defaultValue: '64-bit', \ 177 description: 'The architecture to use for compilation', \ 178 name: 'buildArchitecture' \ 179 ]] \ 180 ]]) 181 182 bIsSandbox = env.BRANCH_NAME == "jenkins-sandbox" 183 bIsFullBuild = isFullBuild == 'true' 184 architectureFlag = '' 185 if (buildArchitecture == '64-bit') { 186 architectureFlag = '--host=x86_64 CXXFLAGS="-m64" CFAFLAGS="-m64"' 187 } else if (buildArchitecture == '32-bit'){ 188 architectureFlag = '--host=i386 CXXFLAGS="-m32" CFAFLAGS="-m32"' 189 } else { 190 architectureFlag = 'ERROR' 191 } 192 193 echo "FULL BUILD = ${isFullBuild}\nArchitecture = ${buildArchitecture} (flag ${architectureFlag})" 194 195 //Compile using gcc-4.9 196 currentCC = new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9') 197 cfa_build(bIsFullBuild, architectureFlag) 198 199 //Compile latex documentation 200 doc_build() 201 202 //Run benchmark and save result 42 203 benchmark() 43 204 44 clean() 45 46 build_doc() 47 48 publish() 49 50 notify_server() 205 if( bIsFullBuild ) { 206 //Compile using gcc-5 207 currentCC = new CC_Desc('gcc-5', 'g++-5', 'gcc-5') 208 cfa_build(true, architectureFlag) 209 210 //Compile using gcc-4.9 211 currentCC = new CC_Desc('gcc-6', 'g++-6', 'gcc-6') 212 cfa_build(true, architectureFlag) 213 } 51 214 } 52 215 } … … 63 226 64 227 //Store the result of the build log 65 currentBuild.result = "${sta ge_name} FAILURE".trim()228 currentBuild.result = "${status_prefix} FAILURE".trim() 66 229 } 67 230 68 231 finally { 232 echo 'Build Completed' 233 69 234 //Send email with final results if this is not a full build 70 if( do_sendemail&& !bIsSandbox ) {235 if( !bIsFullBuild && !bIsSandbox ) { 71 236 echo 'Notifying users of result' 72 237 email(currentBuild.result, log_needed) 73 238 } 74 75 echo 'Build Completed'76 239 77 240 /* Must re-throw exception to propagate error */ … … 80 243 } 81 244 } 82 }83 84 //===========================================================================================================85 // Helper classes/variables/routines86 //===========================================================================================================87 //Helper routine to collect information about the git history88 def collect_git_info() {89 90 //create the temporary output directory in case it doesn't already exist91 def out_dir = pwd tmp: true92 sh "mkdir -p ${out_dir}"93 94 //parse git logs to find what changed95 gitRefName = env.BRANCH_NAME96 dir("../${gitRefName}@script") {97 sh "git reflog > ${out_dir}/GIT_COMMIT"98 }99 git_reflog = readFile("${out_dir}/GIT_COMMIT")100 gitRefOldValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][1]101 gitRefNewValue = (git_reflog =~ /moving from (.+) to (.+)/)[0][2]102 }103 104 def prepare_build() {105 properties ([ \106 [$class: 'ParametersDefinitionProperty', \107 parameterDefinitions: [ \108 [$class: 'ChoiceParameterDefinition', \109 description: 'Which compiler to use', \110 name: 'pCompiler', \111 choices: 'gcc-6\ngcc-5\ngcc-4.9\nclang', \112 defaultValue: 'gcc-6', \113 ], \114 [$class: 'ChoiceParameterDefinition', \115 description: 'The target architecture', \116 name: 'pArchitecture', \117 choices: 'x64\nx86', \118 defaultValue: 'x64', \119 ], \120 [$class: 'BooleanParameterDefinition', \121 description: 'If false, only the quick test suite is ran', \122 name: 'pRunAllTests', \123 defaultValue: false, \124 ], \125 [$class: 'BooleanParameterDefinition', \126 description: 'If true, jenkins also runs benchmarks', \127 name: 'pRunBenchmark', \128 defaultValue: true, \129 ], \130 [$class: 'BooleanParameterDefinition', \131 description: 'If true, jenkins also builds documentation', \132 name: 'pBuildDocumentation', \133 defaultValue: true, \134 ], \135 [$class: 'BooleanParameterDefinition', \136 description: 'If true, jenkins also publishes results', \137 name: 'pPublish', \138 defaultValue: true, \139 ], \140 [$class: 'BooleanParameterDefinition', \141 description: 'If true, jenkins will not send emails', \142 name: 'pSilent', \143 defaultValue: false, \144 ], \145 ],146 ]])147 148 compiler = compiler_from_params( pCompiler )149 architecture = architecture_from_params( pArchitecture )150 151 do_alltests = (pRunAllTests == 'true')152 do_benchmark = (pRunBenchmark == 'true')153 do_doc = (pBuildDocumentation == 'true')154 do_publish = (pPublish == 'true')155 do_sendemail = ! (pSilent == 'true')156 157 echo """Compiler : ${compiler.cc_name} (${compiler.cpp_cc}/${compiler.cfa_cc})158 Architecture : ${architecture}159 Run All Tests : ${ pRunAllTests.toString() }160 Run Benchmark : ${ pRunBenchmark.toString() }161 Build Documentation : ${ pBuildDocumentation.toString() }162 Publish : ${ pPublish.toString() }163 Silent : ${ pSilent.toString() }164 """165 166 collect_git_info()167 }168 169 def build_stage(String name) {170 stage_name = name171 stage name172 }173 174 def notify_server() {175 sh 'curl --silent -X POST http://plg2:8082/jenkins/notify > /dev/null'176 return177 }178 179 def make_doc() {180 def err = null181 try {182 sh 'make clean > /dev/null'183 sh 'make > /dev/null 2>&1'184 }185 catch (Exception caughtError) {186 err = caughtError //rethrow error later187 sh 'cat *.log'188 }189 finally {190 if (err) throw err // Must re-throw exception to propagate error191 }192 }193 194 //Description of a compiler (Must be serializable since pipelines are persistent)195 class CC_Desc implements Serializable {196 public String cc_name197 public String cpp_cc198 public String cfa_cc199 200 CC_Desc(String cc_name, String cpp_cc, String cfa_cc) {201 this.cc_name = cc_name202 this.cpp_cc = cpp_cc203 this.cfa_cc = cfa_cc204 }205 }206 207 def compiler_from_params(cc) {208 switch( cc ) {209 case 'gcc-6':210 return new CC_Desc('gcc-6', 'g++-6', 'gcc-6')211 break212 case 'gcc-5':213 return new CC_Desc('gcc-5', 'g++-5', 'gcc-5')214 break215 case 'gcc-4.9':216 return new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')217 break218 case 'clang':219 return new CC_Desc('clang', 'clang++', 'gcc-6')220 break221 default :222 error "Unhandled compiler : ${cc}"223 }224 }225 226 def architecture_from_params( arch ) {227 switch( arch ) {228 case 'x64':229 return '--host=x86_64 CXXFLAGS="-m64" CFAFLAGS="-m64"'230 break231 case 'x86':232 return '--host=i386 CXXFLAGS="-m32" CFAFLAGS="-m32"'233 break234 default :235 error "Unhandled architecture : ${arch}"236 }237 }238 239 //===========================================================================================================240 // Main compilation routines241 //===========================================================================================================242 //Compilation script is done here but environnement set-up and error handling is done in main loop243 def checkout() {244 build_stage'Checkout'245 //checkout the source code and clean the repo246 checkout scm247 248 //Clean all temporary files to make sure no artifacts of the previous build remain249 sh 'git clean -fdqx'250 251 //Reset the git repo so no local changes persist252 sh 'git reset --hard'253 }254 255 def build() {256 build_stage'Build'257 258 def install_dir = pwd tmp: true259 260 //Configure the conpilation (Output is not relevant)261 //Use the current directory as the installation target so nothing262 //escapes the sandbox263 //Also specify the compiler by hand264 sh "./configure CXX=${compiler.cpp_cc} ${architecture} --with-backend-compiler=${compiler.cfa_cc} --prefix=${install_dir} --enable-silent-rules --quiet"265 266 //Compile the project267 sh 'make -j 8 --no-print-directory V=0 install'268 }269 270 def test() {271 build_stage'Test'272 273 //Run the tests from the tests directory274 if ( do_alltests ) {275 sh 'make -C src/tests all-tests debug=yes'276 sh 'make -C src/tests all-tests debug=no'277 }278 else {279 sh 'make -C src/tests'280 }281 }282 283 def benchmark() {284 build_stage'Benchmark'285 286 if( !do_benchmark ) return287 288 //Write the commit id to Benchmark289 writeFile file: 'bench.csv', text:'data=' + gitRefNewValue + ','290 291 //Append bench results292 sh 'make -C src/benchmark --no-print-directory csv-data >> bench.csv'293 }294 295 def clean() {296 build_stage'Cleanup'297 298 //do a maintainer-clean to make sure we need to remake from scratch299 sh 'make maintainer-clean > /dev/null'300 }301 302 def build_doc() {303 build_stage'Documentation'304 305 if( !do_doc ) return306 307 dir ('doc/user') {308 make_doc()309 }310 311 dir ('doc/refrat') {312 make_doc()313 }314 }315 316 def publish() {317 build_stage'Publish'318 319 if( !do_publish ) return320 321 //Then publish the results322 sh 'curl --silent --data @bench.csv http://plg2:8082/jenkins/publish > /dev/null'323 245 } 324 246 -
src/CodeTools/DeclStats.cc
r255b294 rc00ddfe 62 62 std::map<unsigned, unsigned> p_basic; ///< Count of decls with each percentage of basic type elements 63 63 std::map<unsigned, unsigned> p_poly; ///< Count of decls with each percentage of polymorphic elements 64 VectorMap<unsigned> n_types; ///< Count of decls with each number of distinct types in the pack65 64 66 65 ArgPackStats& operator+= (const ArgPackStats& o) { … … 70 69 sum(p_basic, o.p_basic); 71 70 sum(p_poly, o.p_poly); 72 sum(n_types, o.n_types);73 71 74 72 return *this; … … 123 121 /// Update arg pack stats based on a declaration list 124 122 void analyze( Stats& stats, ArgPackStats& pstats, std::list<DeclarationWithType*>& decls ) { 125 std::unordered_set<std::string> types;126 123 unsigned n = 0; 127 124 unsigned n_basic = 0; 128 125 unsigned n_poly = 0; 129 126 for ( auto decl : decls ) { 130 Type* dt = decl->get_type(); 131 132 n += dt->size(); 133 134 std::stringstream ss; 135 dt->print( ss ); 136 types.insert( ss.str() ); 137 138 if ( dynamic_cast<BasicType*>( dt ) ) { 127 n += decl->get_type()->size(); 128 if ( BasicType* bt = dynamic_cast<BasicType*>( decl->get_type() ) ) { 139 129 ++n_basic; 130 std::stringstream ss; 131 bt->print( ss ); 140 132 ++stats.basic_type_names[ ss.str() ]; 141 } else if ( GenPoly::hasPolyBase( d t) ) {133 } else if ( GenPoly::hasPolyBase( decl->get_type() ) ) { 142 134 ++n_poly; 143 135 } else { 136 std::stringstream ss; 137 decl->get_type()->print( ss ); 144 138 ++stats.compound_type_names[ ss.str() ]; 145 139 } … … 152 146 ++pstats.p_poly[ n_poly*100/n ]; 153 147 } 154 ++pstats.n_types.at( types.size() );155 148 } 156 149 … … 274 267 printAllMap("%_basic_" + name, [&extract](const Stats& stats) { return extract(stats).p_basic; }); 275 268 printAllMap("%_poly_" + name, [&extract](const Stats& stats) { return extract(stats).p_poly; }); 276 printAllMap("n_distinct_types_" + name, [&extract](const Stats& stats) { return extract(stats).n_types; });277 269 } 278 270 -
src/Parser/DeclarationNode.cc
r255b294 rc00ddfe 10 10 // Created On : Sat May 16 12:34:05 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 15:45:02201713 // Update Count : 75 912 // Last Modified On : Thu Feb 16 13:06:50 2017 13 // Update Count : 753 14 14 // 15 15 … … 174 174 } // if 175 175 176 if ( body ) { 177 newnode->type->function.hasBody = true; 178 } // if 179 176 180 if ( ret ) { 177 181 newnode->type->base = ret->type; … … 255 259 } // DeclarationNode::newAggregate 256 260 257 DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants , bool body) {261 DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants ) { 258 262 DeclarationNode * newnode = new DeclarationNode; 259 263 newnode->type = new TypeData( TypeData::Enum ); … … 264 268 } // if 265 269 newnode->type->enumeration.constants = constants; 266 newnode->type->enumeration.body = body;267 270 return newnode; 268 271 } // DeclarationNode::newEnum … … 695 698 assert( ! type->function.body ); 696 699 type->function.body = body; 700 type->function.hasBody = true; 697 701 return this; 698 702 } … … 1036 1040 switch ( type->kind ) { 1037 1041 case TypeData::Enum: { 1038 if ( type->enumeration.body ) { 1039 EnumDecl * typedecl = buildEnum( type, attributes ); 1040 return new EnumInstType( buildQualifiers( type ), typedecl ); 1041 } else { 1042 return new EnumInstType( buildQualifiers( type ), *type->enumeration.name ); 1043 } 1042 EnumDecl * typedecl = buildEnum( type, attributes ); 1043 return new EnumInstType( buildQualifiers( type ), typedecl ); 1044 1044 } 1045 1045 case TypeData::Aggregate: { 1046 AggregateDecl * typedecl = buildAggregate( type, attributes ); 1046 1047 ReferenceToType * ret; 1047 if ( type->aggregate.body ) { 1048 AggregateDecl * typedecl = buildAggregate( type, attributes ); 1049 switch ( type->aggregate.kind ) { 1050 case DeclarationNode::Struct: 1051 ret = new StructInstType( buildQualifiers( type ), (StructDecl *)typedecl ); 1052 break; 1053 case DeclarationNode::Union: 1054 ret = new UnionInstType( buildQualifiers( type ), (UnionDecl *)typedecl ); 1055 break; 1056 case DeclarationNode::Trait: 1057 assert( false ); 1058 //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl ); 1059 break; 1060 default: 1061 assert( false ); 1062 } // switch 1063 } else { 1064 switch ( type->aggregate.kind ) { 1065 case DeclarationNode::Struct: 1066 ret = new StructInstType( buildQualifiers( type ), *type->aggregate.name ); 1067 break; 1068 case DeclarationNode::Union: 1069 ret = new UnionInstType( buildQualifiers( type ), *type->aggregate.name ); 1070 break; 1071 case DeclarationNode::Trait: 1072 assert( false ); 1073 //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl ); 1074 break; 1075 default: 1076 assert( false ); 1077 } // switch 1078 } // if 1048 switch ( type->aggregate.kind ) { 1049 case DeclarationNode::Struct: 1050 ret = new StructInstType( buildQualifiers( type ), (StructDecl *)typedecl ); 1051 break; 1052 case DeclarationNode::Union: 1053 ret = new UnionInstType( buildQualifiers( type ), (UnionDecl *)typedecl ); 1054 break; 1055 case DeclarationNode::Trait: 1056 assert( false ); 1057 //ret = new TraitInstType( buildQualifiers( type ), (TraitDecl *)typedecl ); 1058 break; 1059 default: 1060 assert( false ); 1061 } // switch 1079 1062 buildList( type->aggregate.actuals, ret->get_parameters() ); 1080 1063 return ret; -
src/Parser/ParseNode.h
r255b294 rc00ddfe 10 10 // Created On : Sat May 16 13:28:16 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 15:22:10201713 // Update Count : 66 212 // Last Modified On : Thu Feb 16 13:15:55 2017 13 // Update Count : 661 14 14 // 15 15 … … 238 238 static DeclarationNode * newFromTypedef( std::string * ); 239 239 static DeclarationNode * newAggregate( Aggregate kind, const std::string * name, ExpressionNode * actuals, DeclarationNode * fields, bool body ); 240 static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants , bool body);240 static DeclarationNode * newEnum( std::string * name, DeclarationNode * constants ); 241 241 static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant ); 242 242 static DeclarationNode * newName( std::string * ); -
src/Parser/TypeData.cc
r255b294 rc00ddfe 10 10 // Created On : Sat May 16 15:12:51 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 16:26:39201713 // Update Count : 4 7712 // Last Modified On : Sun Feb 19 09:49:33 2017 13 // Update Count : 467 14 14 // 15 15 … … 48 48 function.oldDeclList = nullptr; 49 49 function.body = nullptr; 50 function.hasBody = false; 50 51 function.newStyle = false; 51 52 break; … … 67 68 enumeration.name = nullptr; 68 69 enumeration.constants = nullptr; 69 enumeration.body = false;70 70 break; 71 71 case Symbolic: … … 182 182 newtype->function.oldDeclList = maybeClone( function.oldDeclList ); 183 183 newtype->function.body = maybeClone( function.body ); 184 newtype->function.hasBody = function.hasBody; 184 185 newtype->function.newStyle = function.newStyle; 185 186 break; … … 199 200 newtype->enumeration.name = enumeration.name ? new string( *enumeration.name ) : nullptr; 200 201 newtype->enumeration.constants = maybeClone( enumeration.constants ); 201 newtype->enumeration.body = enumeration.body;202 202 break; 203 203 case Symbolic: … … 293 293 } // if 294 294 os << endl; 295 if ( function.hasBody ) { 296 os << string( indent + 2, ' ' ) << "with body " << endl; 297 } // if 295 298 if ( function.body ) { 296 os << string( indent + 2, ' ' ) << "with body " << endl;297 299 function.body->printList( os, indent + 2 ); 298 300 } // if … … 333 335 os << "with constants" << endl; 334 336 enumeration.constants->printList( os, indent + 2 ); 335 } // if336 if ( enumeration.body ) {337 os << string( indent + 2, ' ' ) << " with body " << endl;338 337 } // if 339 338 break; … … 697 696 } // if 698 697 } // for 699 ret->set_body( td->enumeration.body );700 698 return ret; 701 699 } // buildEnum … … 726 724 Declaration * buildDecl( const TypeData * td, const string &name, DeclarationNode::StorageClass sc, Expression * bitfieldWidth, bool isInline, bool isNoreturn, LinkageSpec::Spec linkage, ConstantExpr *asmName, Initializer * init, std::list< Attribute * > attributes ) { 727 725 if ( td->kind == TypeData::Function ) { 728 if ( td->function.idList ) { // KR function ?729 buildKRFunction( td->function ); // transform into C11 function726 if ( td->function.idList ) { 727 buildKRFunction( td->function ); 730 728 } // if 731 729 732 730 FunctionDecl * decl; 733 Statement * stmt = maybeBuild<Statement>( td->function.body ); 734 CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt ); 735 decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, isInline, isNoreturn, attributes ); 731 if ( td->function.hasBody ) { 732 if ( td->function.body ) { 733 Statement * stmt = td->function.body->build(); 734 CompoundStmt * body = dynamic_cast< CompoundStmt* >( stmt ); 735 assert( body ); 736 decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), body, isInline, isNoreturn, attributes ); 737 } else { 738 // list< Label > ls; 739 decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), new CompoundStmt( list< Label >() ), isInline, isNoreturn, attributes ); 740 } // if 741 } else { 742 decl = new FunctionDecl( name, sc, linkage, buildFunction( td ), nullptr, isInline, isNoreturn, attributes ); 743 } // if 736 744 return decl->set_asmName( asmName ); 737 745 } else if ( td->kind == TypeData::Aggregate ) { … … 808 816 809 817 for ( DeclarationNode * param = function.idList; param != nullptr; param = dynamic_cast< DeclarationNode* >( param->get_next() ) ) { 810 if ( ! param->type ) { // generate type int for empty parameter type818 if ( ! param->type ) { // generate type int for empty parameters 811 819 param->type = new TypeData( TypeData::Basic ); 812 820 param->type->basictype = DeclarationNode::Int; -
src/Parser/TypeData.h
r255b294 rc00ddfe 10 10 // Created On : Sat May 16 15:18:36 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 15:16:18201713 // Update Count : 15 512 // Last Modified On : Thu Feb 16 14:30:05 2017 13 // Update Count : 153 14 14 // 15 15 … … 49 49 const std::string * name; 50 50 DeclarationNode * constants; 51 bool body;52 51 }; 53 52 … … 57 56 mutable DeclarationNode * oldDeclList; 58 57 StatementNode * body; 58 bool hasBody; 59 59 bool newStyle; 60 60 }; -
src/Parser/parser.cc
r255b294 rc00ddfe 7292 7292 /* Line 1806 of yacc.c */ 7293 7293 #line 1651 "parser.yy" 7294 { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(4) - (6)].decl) , true)->addQualifiers( (yyvsp[(2) - (6)].decl) ); }7294 { (yyval.decl) = DeclarationNode::newEnum( nullptr, (yyvsp[(4) - (6)].decl) )->addQualifiers( (yyvsp[(2) - (6)].decl) ); } 7295 7295 break; 7296 7296 … … 7301 7301 { 7302 7302 typedefTable.makeTypedef( *(yyvsp[(3) - (3)].tok) ); 7303 (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (3)].tok), 0 , false)->addQualifiers( (yyvsp[(2) - (3)].decl) );7303 (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (3)].tok), 0 )->addQualifiers( (yyvsp[(2) - (3)].decl) ); 7304 7304 } 7305 7305 break; … … 7316 7316 /* Line 1806 of yacc.c */ 7317 7317 #line 1660 "parser.yy" 7318 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (8)].tok), (yyvsp[(6) - (8)].decl) , true)->addQualifiers( (yyvsp[(2) - (8)].decl) ); }7318 { (yyval.decl) = DeclarationNode::newEnum( (yyvsp[(3) - (8)].tok), (yyvsp[(6) - (8)].decl) )->addQualifiers( (yyvsp[(2) - (8)].decl) ); } 7319 7319 break; 7320 7320 -
src/Parser/parser.yy
r255b294 rc00ddfe 10 10 // Created On : Sat Sep 1 20:22:55 2001 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 15:23:49201713 // Update Count : 218 712 // Last Modified On : Thu Feb 16 15:56:33 2017 13 // Update Count : 2186 14 14 // 15 15 … … 1649 1649 enum_type: 1650 1650 ENUM attribute_list_opt '{' enumerator_list comma_opt '}' 1651 { $$ = DeclarationNode::newEnum( nullptr, $4 , true)->addQualifiers( $2 ); }1651 { $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); } 1652 1652 | ENUM attribute_list_opt no_attr_identifier_or_type_name 1653 1653 { 1654 1654 typedefTable.makeTypedef( *$3 ); 1655 $$ = DeclarationNode::newEnum( $3, 0 , false)->addQualifiers( $2 );1655 $$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 ); 1656 1656 } 1657 1657 | ENUM attribute_list_opt no_attr_identifier_or_type_name 1658 1658 { typedefTable.makeTypedef( *$3 ); } 1659 1659 '{' enumerator_list comma_opt '}' 1660 { $$ = DeclarationNode::newEnum( $3, $6 , true)->addQualifiers( $2 ); }1660 { $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); } 1661 1661 ; 1662 1662 -
src/benchmark/Makefile.am
r255b294 rc00ddfe 24 24 bench : 25 25 @for ccflags in "-debug" "-nodebug"; do \ 26 echo ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-lrt bench.c;\26 echo ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\ 27 27 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\ 28 28 ./a.out ; \ … … 31 31 32 32 ctxswitch-coroutine: 33 ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -DN=10000000 CorCtxSwitch.c33 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 CorCtxSwitch.c 34 34 @for number in 1 2 3 4 5 6 7 8 9 10; do \ 35 35 ./a.out ; \ … … 38 38 39 39 ctxswitch-thread: 40 ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -DN=10000000 ThrdCtxSwitch.c40 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c 41 41 @for number in 1 2 3 4 5 6 7 8 9 10; do \ 42 42 ./a.out ; \ … … 45 45 46 46 csv-data: 47 @${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -quiet -DN=10000000 csv-data.c47 @${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -quiet -DN=10000000 csv-data.c 48 48 @./a.out 49 49 @rm -f ./a.out -
src/benchmark/Makefile.in
r255b294 rc00ddfe 471 471 bench : 472 472 @for ccflags in "-debug" "-nodebug"; do \ 473 echo ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-lrt bench.c;\473 echo ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\ 474 474 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\ 475 475 ./a.out ; \ … … 478 478 479 479 ctxswitch-coroutine: 480 ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -DN=10000000 CorCtxSwitch.c480 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 CorCtxSwitch.c 481 481 @for number in 1 2 3 4 5 6 7 8 9 10; do \ 482 482 ./a.out ; \ … … 485 485 486 486 ctxswitch-thread: 487 ${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -DN=10000000 ThrdCtxSwitch.c487 ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c 488 488 @for number in 1 2 3 4 5 6 7 8 9 10; do \ 489 489 ./a.out ; \ … … 492 492 493 493 csv-data: 494 @${CC} ${AM_CFLAGS} ${CFLAGS} $ {ccflags} @CFA_FLAGS@-nodebug -lrt -quiet -DN=10000000 csv-data.c494 @${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -quiet -DN=10000000 csv-data.c 495 495 @./a.out 496 496 @rm -f ./a.out -
src/benchmark/csv-data.c
r255b294 rc00ddfe 3 3 #include <threads> 4 4 5 extern "C" {6 5 #include <unistd.h> // sysconf 7 6 #include <sys/times.h> // times 8 7 #include <time.h> 9 }10 8 11 9 inline unsigned long long int Time() { … … 86 84 int main() 87 85 { 88 sout | time(NULL) | ',' | measure_coroutine() | ','| measure_thread() | endl;86 sout | time(NULL) | "," | measure_coroutine() | "," | measure_thread() | endl; 89 87 } -
src/examples/multicore.c
r255b294 rc00ddfe 19 19 processor p; 20 20 { 21 scoped(MyThread) f[4]; 21 scoped(MyThread) f1; 22 scoped(MyThread) f2; 23 scoped(MyThread) f3; 24 scoped(MyThread) f4; 22 25 } 23 26 } -
src/libcfa/Makefile.am
r255b294 rc00ddfe 44 44 # not all platforms support concurrency, add option do disable it 45 45 if BUILD_CONCURRENCY 46 headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor46 headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel 47 47 endif 48 48 -
src/libcfa/Makefile.in
r255b294 rc00ddfe 43 43 44 44 # not all platforms support concurrency, add option do disable it 45 @BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor45 @BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel 46 46 47 47 # not all platforms support concurrency, add option do disable it … … 101 101 containers/vector.c concurrency/coroutines.c \ 102 102 concurrency/threads.c concurrency/kernel.c \ 103 concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 104 concurrency/invoke.c 103 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c 105 104 am__dirstamp = $(am__leading_dot)dirstamp 106 105 @BUILD_CONCURRENCY_TRUE@am__objects_1 = containers/libcfa_d_a-vector.$(OBJEXT) \ 107 106 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-coroutines.$(OBJEXT) \ 108 107 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-threads.$(OBJEXT) \ 109 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-kernel.$(OBJEXT) \ 110 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-monitor.$(OBJEXT) 108 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-kernel.$(OBJEXT) 111 109 am__objects_2 = libcfa_d_a-limits.$(OBJEXT) \ 112 110 libcfa_d_a-stdlib.$(OBJEXT) libcfa_d_a-math.$(OBJEXT) \ … … 126 124 containers/vector.c concurrency/coroutines.c \ 127 125 concurrency/threads.c concurrency/kernel.c \ 128 concurrency/monitor.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 129 concurrency/invoke.c 126 concurrency/CtxSwitch-@MACHINE_TYPE@.S concurrency/invoke.c 130 127 @BUILD_CONCURRENCY_TRUE@am__objects_5 = \ 131 128 @BUILD_CONCURRENCY_TRUE@ containers/libcfa_a-vector.$(OBJEXT) \ 132 129 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-coroutines.$(OBJEXT) \ 133 130 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-threads.$(OBJEXT) \ 134 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-kernel.$(OBJEXT) \ 135 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-monitor.$(OBJEXT) 131 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-kernel.$(OBJEXT) 136 132 am__objects_6 = libcfa_a-limits.$(OBJEXT) libcfa_a-stdlib.$(OBJEXT) \ 137 133 libcfa_a-math.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \ … … 176 172 fstream iterator rational assert containers/vector \ 177 173 concurrency/coroutines concurrency/threads concurrency/kernel \ 178 concurrency/monitor ${shell echo stdhdr/*} \ 179 concurrency/invoke.h 174 ${shell echo stdhdr/*} concurrency/invoke.h 180 175 HEADERS = $(nobase_cfa_include_HEADERS) 181 176 ETAGS = etags … … 403 398 concurrency/libcfa_d_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \ 404 399 concurrency/$(DEPDIR)/$(am__dirstamp) 405 concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \406 concurrency/$(DEPDIR)/$(am__dirstamp)407 400 concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT): \ 408 401 concurrency/$(am__dirstamp) \ … … 423 416 concurrency/libcfa_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \ 424 417 concurrency/$(DEPDIR)/$(am__dirstamp) 425 concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \426 concurrency/$(DEPDIR)/$(am__dirstamp)427 418 concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \ 428 419 concurrency/$(DEPDIR)/$(am__dirstamp) … … 438 429 -rm -f concurrency/libcfa_a-invoke.$(OBJEXT) 439 430 -rm -f concurrency/libcfa_a-kernel.$(OBJEXT) 440 -rm -f concurrency/libcfa_a-monitor.$(OBJEXT)441 431 -rm -f concurrency/libcfa_a-threads.$(OBJEXT) 442 432 -rm -f concurrency/libcfa_d_a-coroutines.$(OBJEXT) 443 433 -rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT) 444 434 -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT) 445 -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)446 435 -rm -f concurrency/libcfa_d_a-threads.$(OBJEXT) 447 436 -rm -f containers/libcfa_a-vector.$(OBJEXT) … … 473 462 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-invoke.Po@am__quote@ 474 463 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@ 475 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@476 464 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-threads.Po@am__quote@ 477 465 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po@am__quote@ 478 466 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po@am__quote@ 479 467 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@ 480 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@481 468 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-threads.Po@am__quote@ 482 469 @AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@ … … 690 677 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-kernel.obj `if test -f 'concurrency/kernel.c'; then $(CYGPATH_W) 'concurrency/kernel.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/kernel.c'; fi` 691 678 692 concurrency/libcfa_d_a-monitor.o: concurrency/monitor.c693 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-monitor.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo -c -o concurrency/libcfa_d_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c694 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po695 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_d_a-monitor.o' libtool=no @AMDEPBACKSLASH@696 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@697 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c698 699 concurrency/libcfa_d_a-monitor.obj: concurrency/monitor.c700 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-monitor.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`701 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po702 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_d_a-monitor.obj' libtool=no @AMDEPBACKSLASH@703 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@704 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`705 706 679 concurrency/libcfa_d_a-invoke.obj: concurrency/invoke.c 707 680 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-invoke.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-invoke.Tpo -c -o concurrency/libcfa_d_a-invoke.obj `if test -f 'concurrency/invoke.c'; then $(CYGPATH_W) 'concurrency/invoke.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/invoke.c'; fi` … … 885 858 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 886 859 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-kernel.obj `if test -f 'concurrency/kernel.c'; then $(CYGPATH_W) 'concurrency/kernel.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/kernel.c'; fi` 887 888 concurrency/libcfa_a-monitor.o: concurrency/monitor.c889 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-monitor.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo -c -o concurrency/libcfa_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c890 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_a-monitor.Po891 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_a-monitor.o' libtool=no @AMDEPBACKSLASH@892 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@893 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.o `test -f 'concurrency/monitor.c' || echo '$(srcdir)/'`concurrency/monitor.c894 895 concurrency/libcfa_a-monitor.obj: concurrency/monitor.c896 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-monitor.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`897 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_a-monitor.Po898 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/monitor.c' object='concurrency/libcfa_a-monitor.obj' libtool=no @AMDEPBACKSLASH@899 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@900 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi`901 860 902 861 concurrency/libcfa_a-invoke.obj: concurrency/invoke.c -
src/libcfa/concurrency/kernel.c
r255b294 rc00ddfe 456 456 457 457 void append( simple_thread_list * this, thread * t ) { 458 assert( this->tail != NULL);458 assert( t->next == NULL ); 459 459 *this->tail = t; 460 460 this->tail = &t->next; … … 470 470 head->next = NULL; 471 471 } 472 472 473 return head; 473 474 } -
src/libcfa/concurrency/threads
r255b294 rc00ddfe 9 9 // 10 10 // Author : Thierry Delisle 11 // Created On : Tue Jan 17 12:27:26 201 711 // Created On : Tue Jan 17 12:27:26 2016 12 12 // Last Modified By : Thierry Delisle 13 13 // Last Modified On : -- -
src/libcfa/concurrency/threads.c
r255b294 rc00ddfe 9 9 // 10 10 // Author : Thierry Delisle 11 // Created On : Tue Jan 17 12:27:26 201 711 // Created On : Tue Jan 17 12:27:26 2016 12 12 // Last Modified By : Thierry Delisle 13 13 // Last Modified On : -- -
src/libcfa/stdlib
r255b294 rc00ddfe 10 10 // Created On : Thu Jan 28 17:12:35 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 14:11:47 201713 // Update Count : 10012 // Last Modified On : Wed Jul 6 14:28:55 2016 13 // Update Count : 99 14 14 // 15 15 … … 50 50 forall( dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p ); 51 51 forall( dtype T | { void ^?{}(T *); } ) void delete( T * ptr ); 52 forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } ) void delete( T * ptr, Params rest ); 52 53 53 54 54 //--------------------------------------- -
src/libcfa/stdlib.c
r255b294 rc00ddfe 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Thu Feb 23 14:11:29 201713 // Update Count : 1 7012 // Last Modified On : Wed Jul 6 14:28:57 2016 13 // Update Count : 169 14 14 // 15 15 … … 91 91 } 92 92 93 forall( dtype T, ttype Params | { void ^?{}(T *); void delete(Params); } )94 void delete( T * ptr, Params rest ) {95 if ( ptr ) {96 ^ptr{};97 free( ptr );98 }99 delete( rest );100 }101 102 93 //--------------------------------------- 103 94 -
src/prelude/prelude.cf
r255b294 rc00ddfe 58 58 long double _Complex ?--( long double _Complex * ), ?--( volatile long double _Complex * ); 59 59 60 forall( dtype T | sized(T)) T * ?++( T ** );61 forall( dtype T | sized(T)) const T * ?++( const T ** );62 forall( dtype T | sized(T)) volatile T * ?++( volatile T ** );63 forall( dtype T | sized(T)) const volatile T * ?++( const volatile T ** );64 forall( dtype T | sized(T)) T * ?--( T ** );65 forall( dtype T | sized(T)) const T * ?--( const T ** );66 forall( dtype T | sized(T)) volatile T * ?--( volatile T ** );67 forall( dtype T | sized(T)) const volatile T * ?--( const volatile T ** );68 69 forall( dtype T | sized(T)) lvalue T ?[?]( T *, ptrdiff_t );70 forall( dtype T | sized(T)) const lvalue T ?[?]( const T *, ptrdiff_t );71 forall( dtype T | sized(T)) volatile lvalue T ?[?]( volatile T *, ptrdiff_t );72 forall( dtype T | sized(T)) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t );73 forall( dtype T | sized(T)) lvalue T ?[?]( ptrdiff_t, T * );74 forall( dtype T | sized(T)) const lvalue T ?[?]( ptrdiff_t, const T * );75 forall( dtype T | sized(T)) volatile lvalue T ?[?]( ptrdiff_t, volatile T * );76 forall( dtype T | sized(T)) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * );60 forall( otype T ) T * ?++( T ** ); 61 forall( otype T ) const T * ?++( const T ** ); 62 forall( otype T ) volatile T * ?++( volatile T ** ); 63 forall( otype T ) const volatile T * ?++( const volatile T ** ); 64 forall( otype T ) T * ?--( T ** ); 65 forall( otype T ) const T * ?--( const T ** ); 66 forall( otype T ) volatile T * ?--( volatile T ** ); 67 forall( otype T ) const volatile T * ?--( const volatile T ** ); 68 69 forall( otype T ) lvalue T ?[?]( T *, ptrdiff_t ); 70 forall( otype T ) const lvalue T ?[?]( const T *, ptrdiff_t ); 71 forall( otype T ) volatile lvalue T ?[?]( volatile T *, ptrdiff_t ); 72 forall( otype T ) const volatile lvalue T ?[?]( const volatile T *, ptrdiff_t ); 73 forall( otype T ) lvalue T ?[?]( ptrdiff_t, T * ); 74 forall( otype T ) const lvalue T ?[?]( ptrdiff_t, const T * ); 75 forall( otype T ) volatile lvalue T ?[?]( ptrdiff_t, volatile T * ); 76 forall( otype T ) const volatile lvalue T ?[?]( ptrdiff_t, const volatile T * ); 77 77 78 78 // ------------------------------------------------------------ … … 96 96 long double _Complex ++?( long double _Complex * ), --?( long double _Complex * ); 97 97 98 forall( dtype T | sized(T)) T * ++?( T ** );99 forall( dtype T | sized(T)) const T * ++?( const T ** );100 forall( dtype T | sized(T)) volatile T * ++?( volatile T ** );101 forall( dtype T | sized(T)) const volatile T * ++?( const volatile T ** );102 forall( dtype T | sized(T)) T * --?( T ** );103 forall( dtype T | sized(T)) const T * --?( const T ** );104 forall( dtype T | sized(T)) volatile T * --?( volatile T ** );105 forall( dtype T | sized(T)) const volatile T * --?( const volatile T ** );98 forall( otype T ) T * ++?( T ** ); 99 forall( otype T ) const T * ++?( const T ** ); 100 forall( otype T ) volatile T * ++?( volatile T ** ); 101 forall( otype T ) const volatile T * ++?( const volatile T ** ); 102 forall( otype T ) T * --?( T ** ); 103 forall( otype T ) const T * --?( const T ** ); 104 forall( otype T ) volatile T * --?( volatile T ** ); 105 forall( otype T ) const volatile T * --?( const volatile T ** ); 106 106 107 107 forall( dtype T | sized(T) ) lvalue T *?( T * ); … … 178 178 long double _Complex ?+?( long double _Complex, long double _Complex ), ?-?( long double _Complex, long double _Complex ); 179 179 180 forall( dtype T | sized(T)) T * ?+?( T *, ptrdiff_t );181 forall( dtype T | sized(T)) T * ?+?( ptrdiff_t, T * );182 forall( dtype T | sized(T)) const T * ?+?( const T *, ptrdiff_t );183 forall( dtype T | sized(T)) const T * ?+?( ptrdiff_t, const T * );184 forall( dtype T | sized(T)) volatile T * ?+?( volatile T *, ptrdiff_t );185 forall( dtype T | sized(T)) volatile T * ?+?( ptrdiff_t, volatile T * );186 forall( dtype T | sized(T)) const volatile T * ?+?( const volatile T *, ptrdiff_t );187 forall( dtype T | sized(T)) const volatile T * ?+?( ptrdiff_t, const volatile T * );188 forall( dtype T | sized(T)) T * ?-?( T *, ptrdiff_t );189 forall( dtype T | sized(T)) const T * ?-?( const T *, ptrdiff_t );190 forall( dtype T | sized(T)) volatile T * ?-?( volatile T *, ptrdiff_t );191 forall( dtype T | sized(T)) const volatile T * ?-?( const volatile T *, ptrdiff_t );192 forall( dtype T | sized(T)) ptrdiff_t ?-?( const volatile T *, const volatile T * );180 forall( otype T ) T * ?+?( T *, ptrdiff_t ); 181 forall( otype T ) T * ?+?( ptrdiff_t, T * ); 182 forall( otype T ) const T * ?+?( const T *, ptrdiff_t ); 183 forall( otype T ) const T * ?+?( ptrdiff_t, const T * ); 184 forall( otype T ) volatile T * ?+?( volatile T *, ptrdiff_t ); 185 forall( otype T ) volatile T * ?+?( ptrdiff_t, volatile T * ); 186 forall( otype T ) const volatile T * ?+?( const volatile T *, ptrdiff_t ); 187 forall( otype T ) const volatile T * ?+?( ptrdiff_t, const volatile T * ); 188 forall( otype T ) T * ?-?( T *, ptrdiff_t ); 189 forall( otype T ) const T * ?-?( const T *, ptrdiff_t ); 190 forall( otype T ) volatile T * ?-?( volatile T *, ptrdiff_t ); 191 forall( otype T ) const volatile T * ?-?( const volatile T *, ptrdiff_t ); 192 forall( otype T ) ptrdiff_t ?-?( const volatile T *, const volatile T * ); 193 193 194 194 // ------------------------------------------------------------ … … 428 428 forall( ftype FT ) FT * ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * ); 429 429 430 forall( dtype T | sized(T)) T * ?+=?( T * *, ptrdiff_t );431 forall( dtype T | sized(T)) T * ?+=?( T * volatile *, ptrdiff_t );432 forall( dtype T | sized(T)) const T * ?+=?( const T * *, ptrdiff_t );433 forall( dtype T | sized(T)) const T * ?+=?( const T * volatile *, ptrdiff_t );434 forall( dtype T | sized(T)) volatile T * ?+=?( volatile T * *, ptrdiff_t );435 forall( dtype T | sized(T)) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t );436 forall( dtype T | sized(T)) const volatile T * ?+=?( const volatile T * *, ptrdiff_t );437 forall( dtype T | sized(T)) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t );438 forall( dtype T | sized(T)) T * ?-=?( T * *, ptrdiff_t );439 forall( dtype T | sized(T)) T * ?-=?( T * volatile *, ptrdiff_t );440 forall( dtype T | sized(T)) const T * ?-=?( const T * *, ptrdiff_t );441 forall( dtype T | sized(T)) const T * ?-=?( const T * volatile *, ptrdiff_t );442 forall( dtype T | sized(T)) volatile T * ?-=?( volatile T * *, ptrdiff_t );443 forall( dtype T | sized(T)) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t );444 forall( dtype T | sized(T)) const volatile T * ?-=?( const volatile T * *, ptrdiff_t );445 forall( dtype T | sized(T)) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t );430 forall( otype T ) T * ?+=?( T * *, ptrdiff_t ); 431 forall( otype T ) T * ?+=?( T * volatile *, ptrdiff_t ); 432 forall( otype T ) const T * ?+=?( const T * *, ptrdiff_t ); 433 forall( otype T ) const T * ?+=?( const T * volatile *, ptrdiff_t ); 434 forall( otype T ) volatile T * ?+=?( volatile T * *, ptrdiff_t ); 435 forall( otype T ) volatile T * ?+=?( volatile T * volatile *, ptrdiff_t ); 436 forall( otype T ) const volatile T * ?+=?( const volatile T * *, ptrdiff_t ); 437 forall( otype T ) const volatile T * ?+=?( const volatile T * volatile *, ptrdiff_t ); 438 forall( otype T ) T * ?-=?( T * *, ptrdiff_t ); 439 forall( otype T ) T * ?-=?( T * volatile *, ptrdiff_t ); 440 forall( otype T ) const T * ?-=?( const T * *, ptrdiff_t ); 441 forall( otype T ) const T * ?-=?( const T * volatile *, ptrdiff_t ); 442 forall( otype T ) volatile T * ?-=?( volatile T * *, ptrdiff_t ); 443 forall( otype T ) volatile T * ?-=?( volatile T * volatile *, ptrdiff_t ); 444 forall( otype T ) const volatile T * ?-=?( const volatile T * *, ptrdiff_t ); 445 forall( otype T ) const volatile T * ?-=?( const volatile T * volatile *, ptrdiff_t ); 446 446 447 447 _Bool ?=?( _Bool *, _Bool ), ?=?( volatile _Bool *, _Bool ); -
src/tests/.expect/abs.txt
r255b294 rc00ddfe 1 char -65 abs 651 char ¿ abs A 2 2 signed int -65 abs 65 3 3 signed long int -65 abs 65 -
src/tests/abs.c
r255b294 rc00ddfe 10 10 // Created On : Thu Jan 28 18:26:16 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 22 22:31:03 201713 // Update Count : 5 212 // Last Modified On : Wed Mar 2 15:07:26 2016 13 // Update Count : 51 14 14 // 15 15 … … 18 18 19 19 int main( void ) { 20 signedchar ch = -65;20 char ch = -65; 21 21 sout | "char\t\t\t" | ch | "\tabs " | abs( ch ) | endl; 22 22 sout | "signed int\t\t" | -65 | "\tabs" | abs( -65 ) | endl;
Note: See TracChangeset
for help on using the changeset viewer.