Changes in / [255b294:c00ddfe]


Ignore:
Files:
1 added
6 deleted
23 edited

Legend:

Unmodified
Added
Removed
  • Jenkins/FullBuild

    r255b294 rc00ddfe  
    11#!groovy
    22
    3 //===========================================================================================================
    4 // Main loop of the compilation
    5 //===========================================================================================================
    6 
    7 node ('master') {
    8         def err = null
    9 
    10         try {
    11                 //Prevent the build from exceeding 30 minutes
    12                 timeout(60) {
    13 
    14                         //Wrap build to add timestamp to command line
    15                         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 repo
    33                                 push_build()
    34                         }
    35                 }
    36         }
    37 
    38         //If an exception is caught we need to change the status and remember to
    39         //attach the build log to the email
    40         catch (Exception caughtError) {
    41                 echo('error caught')
    42 
    43                 //rethrow error later
    44                 err = caughtError
    45 
    46                 //Store the result of the build log
    47                 currentBuild.result = 'FAILURE'
    48 
    49                 //Send email to notify the failure
    50                 promote_failure_email()
    51         }
    52 
    53         finally {
    54                 //Must re-throw exception to propagate error
    55                 if (err) {
    56                         throw err
    57                 }
    58         }
    59 }
    603//===========================================================================================================
    614// Main compilation routines
    625//===========================================================================================================
    636
    64 def trigger_build(String cc, String arch) {
     7def trigger_build(String arch) {
    658        def result = build job: 'Cforall/master',               \
    669                parameters: [                                           \
     10                        [$class: 'BooleanParameterValue',               \
     11                          name: 'isFullBuild',                          \
     12                          value: true],                                         \
    6713                        [$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]                                  \
    8816                ],                                                              \
    8917                propagate: false
     
    14169
    14270//===========================================================================================================
     71// Main loop of the compilation
     72//===========================================================================================================
     73
     74node ('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//===========================================================================================================
    143126//Routine responsible of sending the email notification once the build is completed
    144127//===========================================================================================================
  • Jenkinsfile

    r255b294 rc00ddfe  
    22
    33//===========================================================================================================
     4// Main compilation routines
     5//===========================================================================================================
     6//Compilation script is done here but environnement set-up and error handling is done in main loop
     7def 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
     47def 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
     70def 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
     84def 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)
     104class 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
     122def 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
     130def 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//===========================================================================================================
    4147// Main loop of the compilation
    5148//===========================================================================================================
    6149node ('master'){
    7150
    8         boolean bIsSandbox = env.BRANCH_NAME == "jenkins-sandbox"
     151        boolean bIsFullBuild
    9152        def err = null
    10153        def log_needed = false
    11 
    12         stage_name              = ''
    13 
    14         compiler                = null
    15         architecture    = ''
    16        
    17         do_alltests             = false
    18         do_benchmark    = false
    19         do_doc          = false
    20         do_publish              = false
    21         do_sendemail    = true
    22 
    23154        currentBuild.result = "SUCCESS"
     155        status_prefix = ''
    24156
    25157        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
    42203                                benchmark()
    43204
    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                                }
    51214                        }
    52215                }
     
    63226
    64227                //Store the result of the build log
    65                 currentBuild.result = "${stage_name} FAILURE".trim()
     228                currentBuild.result = "${status_prefix} FAILURE".trim()
    66229        }
    67230
    68231        finally {
     232                echo 'Build Completed'
     233
    69234                //Send email with final results if this is not a full build
    70                 if( do_sendemail && !bIsSandbox ) {
     235                if( !bIsFullBuild && !bIsSandbox ) {
    71236                        echo 'Notifying users of result'
    72237                        email(currentBuild.result, log_needed)
    73238                }
    74 
    75                 echo 'Build Completed'
    76239
    77240                /* Must re-throw exception to propagate error */
     
    80243                }
    81244        }
    82 }
    83 
    84 //===========================================================================================================
    85 // Helper classes/variables/routines
    86 //===========================================================================================================
    87 //Helper routine to collect information about the git history
    88 def collect_git_info() {
    89 
    90         //create the temporary output directory in case it doesn't already exist
    91         def out_dir = pwd tmp: true
    92         sh "mkdir -p ${out_dir}"
    93 
    94         //parse git logs to find what changed
    95         gitRefName = env.BRANCH_NAME
    96         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 = name
    171         stage name
    172 }
    173 
    174 def notify_server() {
    175         sh 'curl --silent -X POST http://plg2:8082/jenkins/notify > /dev/null'
    176         return
    177 }
    178 
    179 def make_doc() {
    180         def err = null
    181         try {
    182                 sh 'make clean > /dev/null'
    183                 sh 'make > /dev/null 2>&1'
    184         }
    185         catch (Exception caughtError) {
    186                 err = caughtError //rethrow error later
    187                 sh 'cat *.log'
    188         }
    189         finally {
    190                 if (err) throw err // Must re-throw exception to propagate error
    191         }
    192 }
    193 
    194 //Description of a compiler (Must be serializable since pipelines are persistent)
    195 class CC_Desc implements Serializable {
    196         public String cc_name
    197         public String cpp_cc
    198         public String cfa_cc
    199 
    200         CC_Desc(String cc_name, String cpp_cc, String cfa_cc) {
    201                 this.cc_name = cc_name
    202                 this.cpp_cc = cpp_cc
    203                 this.cfa_cc = cfa_cc
    204         }
    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                 break
    212                 case 'gcc-5':
    213                         return new CC_Desc('gcc-5', 'g++-5', 'gcc-5')
    214                 break
    215                 case 'gcc-4.9':
    216                         return new CC_Desc('gcc-4.9', 'g++-4.9', 'gcc-4.9')
    217                 break
    218                 case 'clang':
    219                         return new CC_Desc('clang', 'clang++', 'gcc-6')
    220                 break
    221                 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                 break
    231                 case 'x86':
    232                         return '--host=i386   CXXFLAGS="-m32" CFAFLAGS="-m32"'
    233                 break
    234                 default :
    235                         error "Unhandled architecture : ${arch}"
    236         }
    237 }
    238 
    239 //===========================================================================================================
    240 // Main compilation routines
    241 //===========================================================================================================
    242 //Compilation script is done here but environnement set-up and error handling is done in main loop
    243 def checkout() {
    244         build_stage'Checkout'
    245                 //checkout the source code and clean the repo
    246                 checkout scm
    247 
    248                 //Clean all temporary files to make sure no artifacts of the previous build remain
    249                 sh 'git clean -fdqx'
    250 
    251                 //Reset the git repo so no local changes persist
    252                 sh 'git reset --hard'
    253 }
    254 
    255 def build() {
    256         build_stage'Build'
    257        
    258                 def install_dir = pwd tmp: true
    259                
    260                 //Configure the conpilation (Output is not relevant)
    261                 //Use the current directory as the installation target so nothing
    262                 //escapes the sandbox
    263                 //Also specify the compiler by hand
    264                 sh "./configure CXX=${compiler.cpp_cc} ${architecture} --with-backend-compiler=${compiler.cfa_cc} --prefix=${install_dir} --enable-silent-rules --quiet"
    265 
    266                 //Compile the project
    267                 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 directory
    274                 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 ) return
    287 
    288                 //Write the commit id to Benchmark
    289                 writeFile  file: 'bench.csv', text:'data=' + gitRefNewValue + ','
    290  
    291                 //Append bench results
    292                 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 scratch
    299                 sh 'make maintainer-clean > /dev/null'
    300 }
    301 
    302 def build_doc() {
    303         build_stage'Documentation'
    304 
    305                 if( !do_doc ) return
    306 
    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 ) return
    320 
    321                 //Then publish the results
    322                 sh 'curl --silent --data @bench.csv http://plg2:8082/jenkins/publish > /dev/null'
    323245}
    324246
  • src/CodeTools/DeclStats.cc

    r255b294 rc00ddfe  
    6262                        std::map<unsigned, unsigned> p_basic;  ///< Count of decls with each percentage of basic type elements
    6363                        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 pack
    6564
    6665                        ArgPackStats& operator+= (const ArgPackStats& o) {
     
    7069                                sum(p_basic, o.p_basic);
    7170                                sum(p_poly, o.p_poly);
    72                                 sum(n_types, o.n_types);
    7371                               
    7472                                return *this;
     
    123121                /// Update arg pack stats based on a declaration list
    124122                void analyze( Stats& stats, ArgPackStats& pstats, std::list<DeclarationWithType*>& decls ) {
    125                         std::unordered_set<std::string> types;
    126123                        unsigned n = 0;
    127124                        unsigned n_basic = 0;
    128125                        unsigned n_poly = 0;
    129126                        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() ) ) {
    139129                                        ++n_basic;
     130                                        std::stringstream ss;
     131                                        bt->print( ss );
    140132                                        ++stats.basic_type_names[ ss.str() ];
    141                                 } else if ( GenPoly::hasPolyBase( dt ) ) {
     133                                } else if ( GenPoly::hasPolyBase( decl->get_type() ) ) {
    142134                                        ++n_poly;
    143135                                } else {
     136                                        std::stringstream ss;
     137                                        decl->get_type()->print( ss );
    144138                                        ++stats.compound_type_names[ ss.str() ];
    145139                                }
     
    152146                                ++pstats.p_poly[ n_poly*100/n ];
    153147                        }
    154                         ++pstats.n_types.at( types.size() );
    155148                }
    156149               
     
    274267                        printAllMap("%_basic_" + name, [&extract](const Stats& stats) { return extract(stats).p_basic; });
    275268                        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; });
    277269                }
    278270               
  • src/Parser/DeclarationNode.cc

    r255b294 rc00ddfe  
    1010// Created On       : Sat May 16 12:34:05 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 15:45:02 2017
    13 // Update Count     : 759
     12// Last Modified On : Thu Feb 16 13:06:50 2017
     13// Update Count     : 753
    1414//
    1515
     
    174174        } // if
    175175
     176        if ( body ) {
     177                newnode->type->function.hasBody = true;
     178        } // if
     179
    176180        if ( ret ) {
    177181                newnode->type->base = ret->type;
     
    255259} // DeclarationNode::newAggregate
    256260
    257 DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants, bool body ) {
     261DeclarationNode * DeclarationNode::newEnum( string * name, DeclarationNode * constants ) {
    258262        DeclarationNode * newnode = new DeclarationNode;
    259263        newnode->type = new TypeData( TypeData::Enum );
     
    264268        } // if
    265269        newnode->type->enumeration.constants = constants;
    266         newnode->type->enumeration.body = body;
    267270        return newnode;
    268271} // DeclarationNode::newEnum
     
    695698        assert( ! type->function.body );
    696699        type->function.body = body;
     700        type->function.hasBody = true;
    697701        return this;
    698702}
     
    10361040        switch ( type->kind ) {
    10371041          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 );
    10441044          }
    10451045          case TypeData::Aggregate: {
     1046                  AggregateDecl * typedecl = buildAggregate( type, attributes );
    10461047                  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
    10791062                  buildList( type->aggregate.actuals, ret->get_parameters() );
    10801063                  return ret;
  • src/Parser/ParseNode.h

    r255b294 rc00ddfe  
    1010// Created On       : Sat May 16 13:28:16 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 15:22:10 2017
    13 // Update Count     : 662
     12// Last Modified On : Thu Feb 16 13:15:55 2017
     13// Update Count     : 661
    1414//
    1515
     
    238238        static DeclarationNode * newFromTypedef( std::string * );
    239239        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 );
    241241        static DeclarationNode * newEnumConstant( std::string * name, ExpressionNode * constant );
    242242        static DeclarationNode * newName( std::string * );
  • src/Parser/TypeData.cc

    r255b294 rc00ddfe  
    1010// Created On       : Sat May 16 15:12:51 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 16:26:39 2017
    13 // Update Count     : 477
     12// Last Modified On : Sun Feb 19 09:49:33 2017
     13// Update Count     : 467
    1414//
    1515
     
    4848                function.oldDeclList = nullptr;
    4949                function.body = nullptr;
     50                function.hasBody = false;
    5051                function.newStyle = false;
    5152                break;
     
    6768                enumeration.name = nullptr;
    6869                enumeration.constants = nullptr;
    69                 enumeration.body = false;
    7070                break;
    7171          case Symbolic:
     
    182182                newtype->function.oldDeclList = maybeClone( function.oldDeclList );
    183183                newtype->function.body = maybeClone( function.body );
     184                newtype->function.hasBody = function.hasBody;
    184185                newtype->function.newStyle = function.newStyle;
    185186                break;
     
    199200                newtype->enumeration.name = enumeration.name ? new string( *enumeration.name ) : nullptr;
    200201                newtype->enumeration.constants = maybeClone( enumeration.constants );
    201                 newtype->enumeration.body = enumeration.body;
    202202                break;
    203203          case Symbolic:
     
    293293                } // if
    294294                os << endl;
     295                if ( function.hasBody ) {
     296                        os << string( indent + 2, ' ' ) << "with body " << endl;
     297                } // if
    295298                if ( function.body ) {
    296                         os << string( indent + 2, ' ' ) << "with body " << endl;
    297299                        function.body->printList( os, indent + 2 );
    298300                } // if
     
    333335                        os << "with constants" << endl;
    334336                        enumeration.constants->printList( os, indent + 2 );
    335                 } // if
    336                 if ( enumeration.body ) {
    337                         os << string( indent + 2, ' ' ) << " with body " << endl;
    338337                } // if
    339338                break;
     
    697696                } // if
    698697        } // for
    699         ret->set_body( td->enumeration.body );
    700698        return ret;
    701699} // buildEnum
     
    726724Declaration * 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 ) {
    727725        if ( td->kind == TypeData::Function ) {
    728                 if ( td->function.idList ) {                                    // KR function ?
    729                         buildKRFunction( td->function );                        // transform into C11 function
     726                if ( td->function.idList ) {
     727                        buildKRFunction( td->function );
    730728                } // if
    731729
    732730                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
    736744                return decl->set_asmName( asmName );
    737745        } else if ( td->kind == TypeData::Aggregate ) {
     
    808816
    809817        for ( DeclarationNode * param = function.idList; param != nullptr; param = dynamic_cast< DeclarationNode* >( param->get_next() ) ) {
    810                 if ( ! param->type ) {                                                  // generate type int for empty parameter type
     818                if ( ! param->type ) {                                                  // generate type int for empty parameters
    811819                        param->type = new TypeData( TypeData::Basic );
    812820                        param->type->basictype = DeclarationNode::Int;
  • src/Parser/TypeData.h

    r255b294 rc00ddfe  
    1010// Created On       : Sat May 16 15:18:36 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 15:16:18 2017
    13 // Update Count     : 155
     12// Last Modified On : Thu Feb 16 14:30:05 2017
     13// Update Count     : 153
    1414//
    1515
     
    4949                const std::string * name;
    5050                DeclarationNode * constants;
    51                 bool body;
    5251        };
    5352
     
    5756                mutable DeclarationNode * oldDeclList;
    5857                StatementNode * body;
     58                bool hasBody;
    5959                bool newStyle;
    6060        };
  • src/Parser/parser.cc

    r255b294 rc00ddfe  
    72927292/* Line 1806 of yacc.c  */
    72937293#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) ); }
    72957295    break;
    72967296
     
    73017301    {
    73027302                        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) );
    73047304                }
    73057305    break;
     
    73167316/* Line 1806 of yacc.c  */
    73177317#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) ); }
    73197319    break;
    73207320
  • src/Parser/parser.yy

    r255b294 rc00ddfe  
    1010// Created On       : Sat Sep  1 20:22:55 2001
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 15:23:49 2017
    13 // Update Count     : 2187
     12// Last Modified On : Thu Feb 16 15:56:33 2017
     13// Update Count     : 2186
    1414//
    1515
     
    16491649enum_type:
    16501650        ENUM attribute_list_opt '{' enumerator_list comma_opt '}'
    1651                 { $$ = DeclarationNode::newEnum( nullptr, $4, true )->addQualifiers( $2 ); }
     1651                { $$ = DeclarationNode::newEnum( nullptr, $4 )->addQualifiers( $2 ); }
    16521652        | ENUM attribute_list_opt no_attr_identifier_or_type_name
    16531653                {
    16541654                        typedefTable.makeTypedef( *$3 );
    1655                         $$ = DeclarationNode::newEnum( $3, 0, false )->addQualifiers( $2 );
     1655                        $$ = DeclarationNode::newEnum( $3, 0 )->addQualifiers( $2 );
    16561656                }
    16571657        | ENUM attribute_list_opt no_attr_identifier_or_type_name
    16581658                { typedefTable.makeTypedef( *$3 ); }
    16591659          '{' enumerator_list comma_opt '}'
    1660                 { $$ = DeclarationNode::newEnum( $3, $6, true )->addQualifiers( $2 ); }
     1660                { $$ = DeclarationNode::newEnum( $3, $6 )->addQualifiers( $2 ); }
    16611661        ;
    16621662
  • src/benchmark/Makefile.am

    r255b294 rc00ddfe  
    2424bench :
    2525        @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;\
    2727                ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\
    2828                ./a.out ; \
     
    3131
    3232ctxswitch-coroutine:
    33         ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c
     33        ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 CorCtxSwitch.c
    3434        @for number in 1 2 3 4 5 6 7 8 9 10; do \
    3535                ./a.out ; \
     
    3838
    3939ctxswitch-thread:
    40         ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
     40        ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
    4141        @for number in 1 2 3 4 5 6 7 8 9 10; do \
    4242                ./a.out ; \
     
    4545
    4646csv-data:
    47         @${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c
     47        @${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -quiet -DN=10000000 csv-data.c
    4848        @./a.out
    4949        @rm -f ./a.out
  • src/benchmark/Makefile.in

    r255b294 rc00ddfe  
    471471bench :
    472472        @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;\
    474474                ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -lrt bench.c;\
    475475                ./a.out ; \
     
    478478
    479479ctxswitch-coroutine:
    480         ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 CorCtxSwitch.c
     480        ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 CorCtxSwitch.c
    481481        @for number in 1 2 3 4 5 6 7 8 9 10; do \
    482482                ./a.out ; \
     
    485485
    486486ctxswitch-thread:
    487         ${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
     487        ${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -DN=10000000 ThrdCtxSwitch.c
    488488        @for number in 1 2 3 4 5 6 7 8 9 10; do \
    489489                ./a.out ; \
     
    492492
    493493csv-data:
    494         @${CC} ${AM_CFLAGS} ${CFLAGS} ${ccflags} @CFA_FLAGS@ -nodebug -lrt -quiet -DN=10000000 csv-data.c
     494        @${CC} ${AM_CFLAGS} ${CFLAGS} $${ccflags} -nodebug -lrt -quiet -DN=10000000 csv-data.c
    495495        @./a.out
    496496        @rm -f ./a.out
  • src/benchmark/csv-data.c

    r255b294 rc00ddfe  
    33#include <threads>
    44
    5 extern "C" {
    65#include <unistd.h>                                     // sysconf
    76#include <sys/times.h>                                  // times
    87#include <time.h>
    9 }
    108
    119inline unsigned long long int Time() {
     
    8684int main()
    8785{
    88         sout | time(NULL) | ',' | measure_coroutine() | ',' | measure_thread() | endl;
     86        sout | time(NULL) | "," | measure_coroutine() | "," | measure_thread() | endl;
    8987}
  • src/examples/multicore.c

    r255b294 rc00ddfe  
    1919                processor p;
    2020                {
    21                         scoped(MyThread) f[4];
     21                        scoped(MyThread) f1;
     22                        scoped(MyThread) f2;
     23                        scoped(MyThread) f3;
     24                        scoped(MyThread) f4;
    2225                }
    2326        }
  • src/libcfa/Makefile.am

    r255b294 rc00ddfe  
    4444# not all platforms support concurrency, add option do disable it
    4545if BUILD_CONCURRENCY
    46 headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel concurrency/monitor
     46headers += containers/vector concurrency/coroutines concurrency/threads concurrency/kernel
    4747endif
    4848
  • src/libcfa/Makefile.in

    r255b294 rc00ddfe  
    4343
    4444# 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/monitor
     45@BUILD_CONCURRENCY_TRUE@am__append_3 = containers/vector concurrency/coroutines concurrency/threads concurrency/kernel
    4646
    4747# not all platforms support concurrency, add option do disable it
     
    101101        containers/vector.c concurrency/coroutines.c \
    102102        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
    105104am__dirstamp = $(am__leading_dot)dirstamp
    106105@BUILD_CONCURRENCY_TRUE@am__objects_1 = containers/libcfa_d_a-vector.$(OBJEXT) \
    107106@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_d_a-coroutines.$(OBJEXT) \
    108107@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)
    111109am__objects_2 = libcfa_d_a-limits.$(OBJEXT) \
    112110        libcfa_d_a-stdlib.$(OBJEXT) libcfa_d_a-math.$(OBJEXT) \
     
    126124        containers/vector.c concurrency/coroutines.c \
    127125        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
    130127@BUILD_CONCURRENCY_TRUE@am__objects_5 =  \
    131128@BUILD_CONCURRENCY_TRUE@        containers/libcfa_a-vector.$(OBJEXT) \
    132129@BUILD_CONCURRENCY_TRUE@        concurrency/libcfa_a-coroutines.$(OBJEXT) \
    133130@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)
    136132am__objects_6 = libcfa_a-limits.$(OBJEXT) libcfa_a-stdlib.$(OBJEXT) \
    137133        libcfa_a-math.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \
     
    176172        fstream iterator rational assert containers/vector \
    177173        concurrency/coroutines concurrency/threads concurrency/kernel \
    178         concurrency/monitor ${shell echo stdhdr/*} \
    179         concurrency/invoke.h
     174        ${shell echo stdhdr/*} concurrency/invoke.h
    180175HEADERS = $(nobase_cfa_include_HEADERS)
    181176ETAGS = etags
     
    403398concurrency/libcfa_d_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
    404399        concurrency/$(DEPDIR)/$(am__dirstamp)
    405 concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
    406         concurrency/$(DEPDIR)/$(am__dirstamp)
    407400concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT):  \
    408401        concurrency/$(am__dirstamp) \
     
    423416concurrency/libcfa_a-kernel.$(OBJEXT): concurrency/$(am__dirstamp) \
    424417        concurrency/$(DEPDIR)/$(am__dirstamp)
    425 concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \
    426         concurrency/$(DEPDIR)/$(am__dirstamp)
    427418concurrency/libcfa_a-invoke.$(OBJEXT): concurrency/$(am__dirstamp) \
    428419        concurrency/$(DEPDIR)/$(am__dirstamp)
     
    438429        -rm -f concurrency/libcfa_a-invoke.$(OBJEXT)
    439430        -rm -f concurrency/libcfa_a-kernel.$(OBJEXT)
    440         -rm -f concurrency/libcfa_a-monitor.$(OBJEXT)
    441431        -rm -f concurrency/libcfa_a-threads.$(OBJEXT)
    442432        -rm -f concurrency/libcfa_d_a-coroutines.$(OBJEXT)
    443433        -rm -f concurrency/libcfa_d_a-invoke.$(OBJEXT)
    444434        -rm -f concurrency/libcfa_d_a-kernel.$(OBJEXT)
    445         -rm -f concurrency/libcfa_d_a-monitor.$(OBJEXT)
    446435        -rm -f concurrency/libcfa_d_a-threads.$(OBJEXT)
    447436        -rm -f containers/libcfa_a-vector.$(OBJEXT)
     
    473462@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-invoke.Po@am__quote@
    474463@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@
    476464@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-threads.Po@am__quote@
    477465@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-coroutines.Po@am__quote@
    478466@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-invoke.Po@am__quote@
    479467@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@
    481468@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-threads.Po@am__quote@
    482469@AMDEP_TRUE@@am__include@ @am__quote@containers/$(DEPDIR)/libcfa_a-vector.Po@am__quote@
     
    690677@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`
    691678
    692 concurrency/libcfa_d_a-monitor.o: concurrency/monitor.c
    693 @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.c
    694 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po
    695 @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.c
    698 
    699 concurrency/libcfa_d_a-monitor.obj: concurrency/monitor.c
    700 @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.Po
    702 @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 
    706679concurrency/libcfa_d_a-invoke.obj: concurrency/invoke.c
    707680@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`
     
    885858@AMDEP_TRUE@@am__fastdepCC_FALSE@       DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
    886859@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.c
    889 @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.c
    890 @am__fastdepCC_TRUE@    $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-monitor.Tpo concurrency/$(DEPDIR)/libcfa_a-monitor.Po
    891 @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.c
    894 
    895 concurrency/libcfa_a-monitor.obj: concurrency/monitor.c
    896 @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.Po
    898 @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`
    901860
    902861concurrency/libcfa_a-invoke.obj: concurrency/invoke.c
  • src/libcfa/concurrency/kernel.c

    r255b294 rc00ddfe  
    456456
    457457void append( simple_thread_list * this, thread * t ) {
    458         assert(this->tail != NULL);
     458        assert( t->next == NULL );
    459459        *this->tail = t;
    460460        this->tail = &t->next;
     
    470470                head->next = NULL;
    471471        }       
     472       
    472473        return head;
    473474}
  • src/libcfa/concurrency/threads

    r255b294 rc00ddfe  
    99//
    1010// Author           : Thierry Delisle
    11 // Created On       : Tue Jan 17 12:27:26 2017
     11// Created On       : Tue Jan 17 12:27:26 2016
    1212// Last Modified By : Thierry Delisle
    1313// Last Modified On : --
  • src/libcfa/concurrency/threads.c

    r255b294 rc00ddfe  
    99//
    1010// Author           : Thierry Delisle
    11 // Created On       : Tue Jan 17 12:27:26 2017
     11// Created On       : Tue Jan 17 12:27:26 2016
    1212// Last Modified By : Thierry Delisle
    1313// Last Modified On : --
  • src/libcfa/stdlib

    r255b294 rc00ddfe  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 14:11:47 2017
    13 // Update Count     : 100
     12// Last Modified On : Wed Jul  6 14:28:55 2016
     13// Update Count     : 99
    1414//
    1515
     
    5050forall( dtype T, ttype Params | sized(T) | { void ?{}(T *, Params); } ) T * new( Params p );
    5151forall( 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
    5353
    5454//---------------------------------------
  • src/libcfa/stdlib.c

    r255b294 rc00ddfe  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Feb 23 14:11:29 2017
    13 // Update Count     : 170
     12// Last Modified On : Wed Jul  6 14:28:57 2016
     13// Update Count     : 169
    1414//
    1515
     
    9191}
    9292
    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 
    10293//---------------------------------------
    10394
  • src/prelude/prelude.cf

    r255b294 rc00ddfe  
    5858long double _Complex    ?--( long double _Complex * ),          ?--( volatile long double _Complex * );
    5959
    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 * );
     60forall( otype T ) T *                    ?++(                T ** );
     61forall( otype T ) const T *              ?++( const          T ** );
     62forall( otype T ) volatile T *           ?++(       volatile T ** );
     63forall( otype T ) const volatile T *     ?++( const volatile T ** );
     64forall( otype T ) T *                    ?--(                T ** );
     65forall( otype T ) const T *              ?--( const          T ** );
     66forall( otype T ) volatile T *           ?--(       volatile T ** );
     67forall( otype T ) const volatile T *     ?--( const volatile T ** );
     68
     69forall( otype T ) lvalue T               ?[?](                T *,          ptrdiff_t );
     70forall( otype T ) const lvalue T         ?[?]( const          T *,          ptrdiff_t );
     71forall( otype T ) volatile lvalue T      ?[?](       volatile T *,          ptrdiff_t );
     72forall( otype T ) const volatile lvalue T ?[?]( const volatile T *,         ptrdiff_t );
     73forall( otype T ) lvalue T               ?[?](          ptrdiff_t,                T * );
     74forall( otype T ) const lvalue T         ?[?](          ptrdiff_t, const          T * );
     75forall( otype T ) volatile lvalue T      ?[?](          ptrdiff_t,       volatile T * );
     76forall( otype T ) const volatile lvalue T ?[?](         ptrdiff_t, const volatile T * );
    7777
    7878// ------------------------------------------------------------
     
    9696long double _Complex    ++?( long double _Complex * ),          --?( long double _Complex * );
    9797
    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 ** );
     98forall( otype T ) T *                    ++?(                T ** );
     99forall( otype T ) const T *              ++?( const          T ** );
     100forall( otype T ) volatile T *           ++?(       volatile T ** );
     101forall( otype T ) const volatile T *     ++?( const volatile T ** );
     102forall( otype T ) T *                    --?(                T ** );
     103forall( otype T ) const T *              --?( const          T ** );
     104forall( otype T ) volatile T *           --?(       volatile T ** );
     105forall( otype T ) const volatile T *     --?( const volatile T ** );
    106106
    107107forall( dtype T | sized(T) ) lvalue T            *?(                 T * );
     
    178178long double _Complex    ?+?( long double _Complex, long double _Complex ),      ?-?( long double _Complex, long double _Complex );
    179179
    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 * );
     180forall( otype T ) T *                   ?+?(                T *,          ptrdiff_t );
     181forall( otype T ) T *                   ?+?(          ptrdiff_t,                T * );
     182forall( otype T ) const T *             ?+?( const          T *,          ptrdiff_t );
     183forall( otype T ) const T *             ?+?(          ptrdiff_t, const          T * );
     184forall( otype T ) volatile T *          ?+?(       volatile T *,          ptrdiff_t );
     185forall( otype T ) volatile T *          ?+?(          ptrdiff_t,       volatile T * );
     186forall( otype T ) const volatile T *    ?+?( const volatile T *,          ptrdiff_t );
     187forall( otype T ) const volatile T *    ?+?(          ptrdiff_t, const volatile T * );
     188forall( otype T ) T *                   ?-?(                T *,          ptrdiff_t );
     189forall( otype T ) const T *             ?-?( const          T *,          ptrdiff_t );
     190forall( otype T ) volatile T *          ?-?(       volatile T *,          ptrdiff_t );
     191forall( otype T ) const volatile T *    ?-?( const volatile T *,          ptrdiff_t );
     192forall( otype T ) ptrdiff_t             ?-?( const volatile T *, const volatile T * );
    193193
    194194// ------------------------------------------------------------
     
    428428forall( ftype FT ) FT *                 ?=?( FT * volatile *, forall( ftype FT2 ) FT2 * );
    429429
    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 );
     430forall( otype T ) T *                   ?+=?(                T *          *, ptrdiff_t );
     431forall( otype T ) T *                   ?+=?(                T * volatile *, ptrdiff_t );
     432forall( otype T ) const T *             ?+=?( const          T *          *, ptrdiff_t );
     433forall( otype T ) const T *             ?+=?( const          T * volatile *, ptrdiff_t );
     434forall( otype T ) volatile T *          ?+=?(       volatile T *          *, ptrdiff_t );
     435forall( otype T ) volatile T *          ?+=?(       volatile T * volatile *, ptrdiff_t );
     436forall( otype T ) const volatile T *    ?+=?( const volatile T *          *, ptrdiff_t );
     437forall( otype T ) const volatile T *    ?+=?( const volatile T * volatile *, ptrdiff_t );
     438forall( otype T ) T *                   ?-=?(                T *          *, ptrdiff_t );
     439forall( otype T ) T *                   ?-=?(                T * volatile *, ptrdiff_t );
     440forall( otype T ) const T *             ?-=?( const          T *          *, ptrdiff_t );
     441forall( otype T ) const T *             ?-=?( const          T * volatile *, ptrdiff_t );
     442forall( otype T ) volatile T *          ?-=?(       volatile T *          *, ptrdiff_t );
     443forall( otype T ) volatile T *          ?-=?(       volatile T * volatile *, ptrdiff_t );
     444forall( otype T ) const volatile T *    ?-=?( const volatile T *          *, ptrdiff_t );
     445forall( otype T ) const volatile T *    ?-=?( const volatile T * volatile *, ptrdiff_t );
    446446
    447447_Bool                   ?=?( _Bool *, _Bool ),                                  ?=?( volatile _Bool *, _Bool );
  • src/tests/.expect/abs.txt

    r255b294 rc00ddfe  
    1 char                    -65     abs 65
     1char                    ¿       abs A
    22signed int              -65     abs 65
    33signed long int         -65     abs 65
  • src/tests/abs.c

    r255b294 rc00ddfe  
    1010// Created On       : Thu Jan 28 18:26:16 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Feb 22 22:31:03 2017
    13 // Update Count     : 52
     12// Last Modified On : Wed Mar  2 15:07:26 2016
     13// Update Count     : 51
    1414//
    1515
     
    1818
    1919int main( void ) {
    20         signed char ch = -65;
     20        char ch = -65;
    2121        sout | "char\t\t\t"                                     | ch     | "\tabs " | abs( ch ) | endl;
    2222        sout | "signed int\t\t"                         | -65    | "\tabs" | abs( -65 ) | endl;
Note: See TracChangeset for help on using the changeset viewer.