Changes in / [9d264e18:d6ad99e]


Ignore:
Files:
1 deleted
16 edited

Legend:

Unmodified
Added
Removed
  • benchmark/rmit.py

    r9d264e18 rd6ad99e  
    1212import datetime
    1313import itertools
    14 import json
    1514import os
    1615import random
     
    118117        # ================================================================================
    119118        # parse command line arguments
    120         formats = ['raw', 'csv', 'json']
     119        formats = ['raw', 'csv']
    121120        parser = argparse.ArgumentParser(description='Python Script to implement R.M.I.T. testing : Randomized Multiple Interleaved Trials')
    122121        parser.add_argument('--list', help='List all the commands that would be run', action='store_true')
    123         parser.add_argument('--format', help='How to print the result', choices=formats, default='json')
     122        parser.add_argument('--format', help='How to print the result', choices=formats, default='csv')
    124123        parser.add_argument('--file', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
    125124        parser.add_argument('-t', '--trials', help='Number of trials to run per combinaison', type=int, default=3)
     
    204203
    205204        # ================================================================================
    206         # Print raw
     205        # Print csv
    207206        if options.format == 'raw':
    208207                for r in result:
    209208                        print(r, file=options.file)
    210                 sys.exit(0)
    211 
    212         # ================================================================================
    213         # Print json
    214         if options.format == 'json':
    215                 json.dump(result, options.file)
    216209                sys.exit(0)
    217210
  • libcfa/src/Makefile.am

    r9d264e18 rd6ad99e  
    9696        concurrency/exception.hfa \
    9797        concurrency/kernel.hfa \
    98         concurrency/locks.hfa \
    9998        concurrency/monitor.hfa \
    10099        concurrency/mutex.hfa \
  • libcfa/src/concurrency/locks.cfa

    r9d264e18 rd6ad99e  
    5151}
    5252
    53 void ?{}( single_acquisition_lock & this ) {
     53void ?{}( mutex_lock & this ) {
    5454        ((blocking_lock &)this){ false, false };
    5555}
    5656
    57 void ^?{}( single_acquisition_lock & this ) {
     57void ^?{}( mutex_lock & this ) {
    5858        // default
    5959}
     
    6767}
    6868
    69 void ?{}( multiple_acquisition_lock & this ) {
     69void ?{}( recursive_mutex_lock & this ) {
    7070        ((blocking_lock &)this){ true, false };
    7171}
    7272
    73 void ^?{}( multiple_acquisition_lock & this ) {
     73void ^?{}( recursive_mutex_lock & this ) {
    7474        // default
    7575}
    7676
    7777void lock( blocking_lock & this ) with( this ) {
     78        $thread * thrd = active_thread();
    7879        lock( lock __cfaabi_dbg_ctx2 );
    79         if ( owner == active_thread() && !multi_acquisition) {
     80        if ( owner == thrd && !multi_acquisition) {
    8081                fprintf(stderr, "A single acquisition lock holder attempted to reacquire the lock resulting in a deadlock."); // Possibly throw instead
    8182        exit(EXIT_FAILURE);
    82         } else if ( owner != 0p && owner != active_thread() ) {
    83                 append( blocked_threads, active_thread() );
     83        } else if ( owner != 0p && owner != thrd ) {
     84                append( blocked_threads, thrd );
    8485                wait_count++;
    8586                unlock( lock );
    8687                park( );
    87         } else if ( owner == active_thread() && multi_acquisition ) {
     88        } else if ( owner == thrd && multi_acquisition ) {
    8889                recursion_count++;
    8990                unlock( lock );
    9091        } else {
    91                 owner = active_thread();
     92                owner = thrd;
    9293                recursion_count = 1;
    9394                unlock( lock );
     
    9697
    9798bool try_lock( blocking_lock & this ) with( this ) {
     99        $thread * thrd = active_thread();
    98100        bool ret = false;
    99101        lock( lock __cfaabi_dbg_ctx2 );
    100102        if ( owner == 0p ) {
    101                 owner = active_thread();
    102                 recursion_count = 1;
     103                owner = thrd;
     104                if ( multi_acquisition ) recursion_count = 1;
    103105                ret = true;
    104         } else if ( owner == active_thread() && multi_acquisition ) {
     106        } else if ( owner == thrd && multi_acquisition ) {
    105107                recursion_count++;
    106108                ret = true;
     
    113115        lock( lock __cfaabi_dbg_ctx2 );
    114116        if ( owner == 0p ){ // no owner implies lock isn't held
    115                 fprintf( stderr, "There was an attempt to release a lock that isn't held" ); 
     117                fprintf( stderr, "There was an attempt to release a lock that isn't held" );
    116118                return;
    117         } else if ( strict_owner && owner != active_thread() ) {
    118                 fprintf( stderr, "A thread other than the owner attempted to release an owner lock" ); 
     119        } else if ( strict_owner && active_thread() ) {
     120                fprintf( stderr, "A thread other than the owner attempted to release an owner lock" );
    119121                return;
    120122        }
     
    123125                $thread * thrd = pop_head( blocked_threads );
    124126                owner = thrd;
    125                 recursion_count = ( thrd ? 1 : 0 );
     127                recursion_count = ( thrd && multi_acquisition ? 1 : 0 );
    126128                wait_count--;
    127129                unpark( thrd );
     
    151153        } else {
    152154                owner = t;
    153                 recursion_count = 1;
     155                if ( multi_acquisition ) recursion_count = 1;
    154156                #if !defined( __CFA_NO_STATISTICS__ )
    155                         //kernelTLS.this_stats = t->curr_cluster->stats;
     157                        kernelTLS.this_stats = t->curr_cluster->stats;
    156158                #endif
    157159                unpark( t );
     
    163165    lock( lock __cfaabi_dbg_ctx2 );
    164166        if ( owner == 0p ){ // no owner implies lock isn't held
    165                 fprintf( stderr, "A lock that is not held was passed to a synchronization lock" ); 
    166         } else if ( strict_owner && owner != active_thread() ) {
    167                 fprintf( stderr, "A thread other than the owner of a lock passed it to a synchronization lock" ); 
     167                fprintf( stderr, "A lock that is not held was passed to a synchronization lock" );
     168        } else if ( strict_owner && active_thread() ) {
     169                fprintf( stderr, "A thread other than the owner of a lock passed it to a synchronization lock" );
    168170        } else {
    169171                $thread * thrd = pop_head( blocked_threads );
    170172                owner = thrd;
    171                 recursion_count = ( thrd ? 1 : 0 );
     173                recursion_count = ( thrd && multi_acquisition ? 1 : 0 );
    172174                wait_count--;
    173175                unpark( thrd );
     
    182184// This is temporary until an inheritance bug is fixed
    183185
    184 void lock( single_acquisition_lock & this ){
     186void lock( mutex_lock & this ){
    185187        lock( (blocking_lock &)this );
    186188}
    187189
    188 void unlock( single_acquisition_lock & this ){
     190void unlock( mutex_lock & this ){
    189191        unlock( (blocking_lock &)this );
    190192}
    191193
    192 void add_( single_acquisition_lock & this, struct $thread * t ){
     194void add_( mutex_lock & this, struct $thread * t ){
    193195        add_( (blocking_lock &)this, t );
    194196}
    195197
    196 void remove_( single_acquisition_lock & this ){
     198void remove_( mutex_lock & this ){
    197199        remove_( (blocking_lock &)this );
    198200}
    199201
    200 void set_recursion_count( single_acquisition_lock & this, size_t recursion ){
     202void set_recursion_count( mutex_lock & this, size_t recursion ){
    201203        set_recursion_count( (blocking_lock &)this, recursion );
    202204}
    203205
    204 size_t get_recursion_count( single_acquisition_lock & this ){
    205         return get_recursion_count( (blocking_lock &)this );
    206 }
    207 
    208 void lock( owner_lock & this ){
     206size_t get_recursion_count( mutex_lock & this ){
     207        get_recursion_count( (blocking_lock &)this );
     208}
     209
     210void lock( recursive_mutex_lock & this ){
    209211        lock( (blocking_lock &)this );
    210212}
    211213
    212 void unlock( owner_lock & this ){
     214void unlock( recursive_mutex_lock & this ){
    213215        unlock( (blocking_lock &)this );
    214216}
    215217
    216 void add_( owner_lock & this, struct $thread * t ){
     218void add_( recursive_mutex_lock & this, struct $thread * t ){
    217219        add_( (blocking_lock &)this, t );
    218220}
    219221
    220 void remove_( owner_lock & this ){
     222void remove_( recursive_mutex_lock & this ){
    221223        remove_( (blocking_lock &)this );
    222224}
    223225
    224 void set_recursion_count( owner_lock & this, size_t recursion ){
     226void set_recursion_count( recursive_mutex_lock & this, size_t recursion ){
    225227        set_recursion_count( (blocking_lock &)this, recursion );
    226228}
    227229
    228 size_t get_recursion_count( owner_lock & this ){
    229         return get_recursion_count( (blocking_lock &)this );
    230 }
    231 
    232 void lock( multiple_acquisition_lock & this ){
    233         lock( (blocking_lock &)this );
    234 }
    235 
    236 void unlock( multiple_acquisition_lock & this ){
    237         unlock( (blocking_lock &)this );
    238 }
    239 
    240 void add_( multiple_acquisition_lock & this, struct $thread * t ){
    241         add_( (blocking_lock &)this, t );
    242 }
    243 
    244 void remove_( multiple_acquisition_lock & this ){
    245         remove_( (blocking_lock &)this );
    246 }
    247 
    248 void set_recursion_count( multiple_acquisition_lock & this, size_t recursion ){
    249         set_recursion_count( (blocking_lock &)this, recursion );
    250 }
    251 
    252 size_t get_recursion_count( multiple_acquisition_lock & this ){
    253         return get_recursion_count( (blocking_lock &)this );
     230size_t get_recursion_count( recursive_mutex_lock & this ){
     231        get_recursion_count( (blocking_lock &)this );
    254232}
    255233
     
    266244                info_thread(L) * copy = *i;
    267245                        remove( cond->blocked_threads, i );              //remove this thread O(1)
    268                         cond->count--;
     246                        cond->wait_count--;
    269247                        if( !copy->lock ) {
     248                                unlock( cond->lock );
    270249                                #if !defined( __CFA_NO_STATISTICS__ )
    271                                         //kernelTLS.this_stats = copy->t->curr_cluster->stats;
     250                                        #warning unprotected access to tls TODO discuss this
     251                                        kernelTLS.this_stats = copy->t->curr_cluster->stats;
    272252                                #endif
    273253                                unpark( copy->t );
     
    305285                bool ret = !!blocked_threads;
    306286                info_thread(L) * popped = pop_head( blocked_threads );
     287                popped->listed = false;
    307288                if(popped != 0p) {
    308                         popped->listed = false;
    309289                        count--;
    310290                        if (popped->lock) {
     
    323303                while( blocked_threads ) {
    324304                        info_thread(L) * popped = pop_head( blocked_threads );
     305                        popped->listed = false;
    325306                        if(popped != 0p){
    326                                 popped->listed = false;
    327307                                count--;
    328308                                if (popped->lock) {
     
    361341                        remove_( *i.lock );
    362342                }
    363                
     343
    364344                unlock( lock );
    365345                park( ); // blocks here
     
    405385                queue_info_thread( this, i );
    406386        }
    407        
     387
    408388        void wait( condition_variable(L) & this, Duration duration ) with(this) {
    409389                info_thread( L ) i = { active_thread() };
     
    411391        }
    412392
    413         void wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) { 
     393        void wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) {
    414394                info_thread( L ) i = { active_thread(), info };
    415395                queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
     
    437417                queue_info_thread( this, i );
    438418        }
    439        
     419
    440420        void wait( condition_variable(L) & this, L & l, Duration duration ) with(this) {
    441421                info_thread(L) i = { active_thread() };
     
    443423                queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
    444424        }
    445        
     425
    446426        void wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration ) with(this) {
    447427                info_thread(L) i = { active_thread(), info };
     
    449429                queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
    450430        }
    451        
     431
    452432        void wait( condition_variable(L) & this, L & l, Time time ) with(this) {
    453433                info_thread(L) i = { active_thread() };
     
    455435                queue_info_thread_timeout(this, i, time );
    456436        }
    457        
     437
    458438        void wait( condition_variable(L) & this, L & l, uintptr_t info, Time time ) with(this) {
    459439                info_thread(L) i = { active_thread(), info };
     
    462442        }
    463443}
    464 
    465 // thread T1 {};
    466 // thread T2 {};
    467 
    468 // multiple_acquisition_lock m;
    469 // condition_variable( multiple_acquisition_lock ) c;
    470 
    471 // void main( T1 & this ) {
    472 //      printf("T1 start\n");
    473 //      lock(m);
    474 //      printf("%d\n", counter(c));
    475 //      if(empty(c)) {
    476 //              printf("T1 wait\n");
    477 //              wait(c,m,12);
    478 //      }else{
    479 //              printf("%d\n", front(c));
    480 //              notify_one(c);
    481 //      }
    482 //      unlock(m);
    483 //      printf("curr thd in main %p \n", active_thread());
    484 //      printf("T1 waits for 2s\n");
    485 //      lock(m);
    486 //      wait( c, m, 2`s );
    487 //      unlock(m);
    488 //      printf("T1 wakes\n");
    489 //      printf("T1 done\n");
    490 // }
    491 
    492 // void main( T2 & this ) {
    493 //      printf("T2 start\n");
    494 //      lock(m);
    495 //      printf("%d\n", counter(c));
    496 //      if(empty(c)) {
    497 //              printf("T2 wait\n");
    498 //              wait(c,m,12);
    499 //      }else{
    500 //              printf("%d\n", front(c));
    501 //              notify_one(c);
    502 //      }
    503 //      unlock(m);
    504 //      printf("T2 done\n");
    505 // }
    506 
    507 // int main() {
    508 //      printf("start\n");
    509 //      processor p[2];
    510 //      {
    511 //              T1 t1;
    512 //              T2 t2;
    513 //      }
    514 //      printf("done\n");
    515 // }
  • libcfa/src/concurrency/locks.hfa

    r9d264e18 rd6ad99e  
    4949//// Blocking Locks
    5050///////////////////////////////////////////////////////////////////
    51 
    5251struct blocking_lock {
    5352        // Spin lock used for mutual exclusion
     
    7372};
    7473
    75 struct single_acquisition_lock {
     74struct mutex_lock {
    7675        inline blocking_lock;
    7776};
     
    8180};
    8281
    83 struct multiple_acquisition_lock {
     82struct recursive_mutex_lock {
    8483        inline blocking_lock;
    8584};
     
    8887void ^?{}( blocking_lock & this );
    8988
    90 void ?{}( single_acquisition_lock & this );
    91 void ^?{}( single_acquisition_lock & this );
     89void ?{}( mutex_lock & this );
     90void ^?{}( mutex_lock & this );
    9291
    9392void ?{}( owner_lock & this );
    9493void ^?{}( owner_lock & this );
    9594
    96 void ?{}( multiple_acquisition_lock & this );
    97 void ^?{}( multiple_acquisition_lock & this );
     95void ?{}( recursive_mutex_lock & this );
     96void ^?{}( recursive_mutex_lock & this );
    9897
    9998void lock( blocking_lock & this );
     
    106105size_t get_recursion_count( blocking_lock & this );
    107106
    108 void lock( single_acquisition_lock & this );
    109 void unlock( single_acquisition_lock & this );
    110 void add_( single_acquisition_lock & this, struct $thread * t );
    111 void remove_( single_acquisition_lock & this );
    112 void set_recursion_count( single_acquisition_lock & this, size_t recursion );
    113 size_t get_recursion_count( single_acquisition_lock & this );
     107void lock( mutex_lock & this );
     108void unlock( mutex_lock & this );
     109void add_( mutex_lock & this, struct $thread * t );
     110void remove_( mutex_lock & this );
     111void set_recursion_count( mutex_lock & this, size_t recursion );
     112size_t get_recursion_count( mutex_lock & this );
    114113
    115 void lock( owner_lock & this );
    116 void unlock( owner_lock & this );
    117 void add_( owner_lock & this, struct $thread * t );
    118 void remove_( owner_lock & this );
    119 void set_recursion_count( owner_lock & this, size_t recursion );
    120 size_t get_recursion_count( owner_lock & this );
    121 
    122 void lock( multiple_acquisition_lock & this );
    123 void unlock( multiple_acquisition_lock & this );
    124 void add_( multiple_acquisition_lock & this, struct $thread * t );
    125 void remove_( multiple_acquisition_lock & this );
    126 void set_recursion_count( multiple_acquisition_lock & this, size_t recursion );
    127 size_t get_recursion_count( multiple_acquisition_lock & this );
     114void lock( recursive_mutex_lock & this );
     115void unlock( recursive_mutex_lock & this );
     116void add_( recursive_mutex_lock & this, struct $thread * t );
     117void remove_( recursive_mutex_lock & this );
     118void set_recursion_count( recursive_mutex_lock & this, size_t recursion );
     119size_t get_recursion_count( recursive_mutex_lock & this );
    128120
    129121///////////////////////////////////////////////////////////////////
  • libcfa/src/stdlib.cfa

    r9d264e18 rd6ad99e  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Nov 12 07:46:09 2020
    13 // Update Count     : 503
     12// Last Modified On : Sun Jul 19 15:05:28 2020
     13// Update Count     : 501
    1414//
    1515
     
    2626//---------------------------------------
    2727
    28 // Cforall allocation/deallocation and constructor/destructor, array types
    29 
    30 forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } )
    31 T * anew( size_t dim, TT p ) {
     28// allocation/deallocation and constructor/destructor, non-array types
     29forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
     30T * new( Params p ) {
     31        return &(*malloc()){ p };                                                       // run constructor
     32} // new
     33
     34forall( dtype T | { void ^?{}( T & ); } )
     35void delete( T * ptr ) {
     36        if ( ptr ) {                                                                            // ignore null
     37                ^(*ptr){};                                                                              // run destructor
     38                free( ptr );
     39        } // if
     40} // delete
     41
     42forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } )
     43void delete( T * ptr, Params rest ) {
     44        delete( ptr );
     45        delete( rest );
     46} // delete
     47
     48
     49// allocation/deallocation and constructor/destructor, array types
     50forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } )
     51T * anew( size_t dim, Params p ) {
    3252        T * arr = alloc( dim );
    3353        for ( unsigned int i = 0; i < dim; i += 1 ) {
     
    4868} // adelete
    4969
    50 forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype TT | { void adelete( TT ); } )
    51 void adelete( T arr[], TT rest ) {
     70forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } )
     71void adelete( T arr[], Params rest ) {
    5272        if ( arr ) {                                                                            // ignore null
    5373                size_t dim = malloc_size( arr ) / sizeof( T );
  • libcfa/src/stdlib.hfa

    r9d264e18 rd6ad99e  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Nov 12 08:12:08 2020
    13 // Update Count     : 515
     12// Last Modified On : Tue Sep  1 20:32:34 2020
     13// Update Count     : 505
    1414//
    1515
    1616#pragma once
    1717
    18 #include "bits/defs.hfa"                                                                // OPTIONAL_THREAD
    19 #include "bits/align.hfa"                                                               // libAlign
     18#include "bits/defs.hfa"
     19#include "bits/align.hfa"
    2020
    2121#include <stdlib.h>                                                                             // *alloc, strto*, ato*
     
    107107} // distribution
    108108
     109static inline forall( ttype TT | { void free( TT ); } ) {
     110        // T* does not take void* and vice-versa
     111
     112        void free( void * addr, TT rest ) {
     113                free( addr );
     114                free( rest );
     115        } // free
     116
     117        forall( dtype T | sized(T) )
     118        void free( T * addr, TT rest ) {
     119                free( addr );
     120                free( rest );
     121        } // free
     122} // distribution
     123
    109124/*
    110125        FIX ME : fix alloc interface after Ticker Number 214 is resolved, define and add union to S_fill. Then, modify postfix-fill functions to support T * with nmemb, char, and T object of any size. Finally, change alloc_internal.
     
    114129                forall( dtype T | sized(T) ) {
    115130                        union  U_fill           { char c; T * a; T t; };
    116                         struct S_fill           { char tag; U_fill(T) fill; };
     131                        struct S_fill           { char tag; char c; size_t size; T * at; char t[50]; };
    117132                        struct S_realloc        { inline T *; };
    118133                }
     
    162177static inline T_align   ?`align   ( size_t a )  { return (T_align){a}; }
    163178static inline T_resize  ?`resize  ( void * a )  { return (T_resize){a}; }
    164 
    165179static inline forall( dtype T | sized(T) ) {
     180
    166181        S_fill(T) ?`fill ( T t ) {
    167182                S_fill(T) ret = { 't' };
     
    235250
    236251        } // distribution TT
     252
    237253} // distribution T
    238254
     
    246262                return (T *)memcpy( dest, src, sizeof(T) );
    247263        } // memcpy
    248 
     264} // distribution
     265
     266static inline forall( dtype T | sized(T) ) {
    249267        // Cforall safe initialization/copy, i.e., implicit size specification, array types
    250268        T * amemset( T dest[], char fill, size_t dim ) {
     
    257275} // distribution
    258276
    259 // Cforall deallocation for multiple objects
    260 static inline forall( dtype T, ttype TT | { void free( TT ); } )
    261 void free( T * addr, TT rest ) {
    262         free( addr );
    263         free( rest );
    264 } // free
    265 
    266277// Cforall allocation/deallocation and constructor/destructor, non-array types
    267 static inline forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } )
    268 T * new( TT p ) {
    269         return &(*malloc()){ p };                                                       // run constructor
    270 } // new
    271 
    272 static inline forall( dtype T | { void ^?{}( T & ); } )
    273 void delete( T * ptr ) {
    274         if ( ptr ) {                                                                            // ignore null
    275                 ^(*ptr){};                                                                              // run destructor
    276                 free( ptr );
    277         } // if
    278 } // delete
    279 
    280 static inline forall( dtype T, ttype TT | { void ^?{}( T & ); void delete( TT ); } )
    281 void delete( T * ptr, TT rest ) {
    282         delete( ptr );
    283         delete( rest );
    284 } // delete
     278forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * new( Params p );
     279forall( dtype T | { void ^?{}( T & ); } ) void delete( T * ptr );
     280forall( dtype T, ttype Params | { void ^?{}( T & ); void delete( Params ); } ) void delete( T * ptr, Params rest );
    285281
    286282// Cforall allocation/deallocation and constructor/destructor, array types
    287 forall( dtype T | sized(T), ttype TT | { void ?{}( T &, TT ); } ) T * anew( size_t dim, TT p );
     283forall( dtype T | sized(T), ttype Params | { void ?{}( T &, Params ); } ) T * anew( size_t dim, Params p );
    288284forall( dtype T | sized(T) | { void ^?{}( T & ); } ) void adelete( T arr[] );
    289 forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype TT | { void adelete( TT ); } ) void adelete( T arr[], TT rest );
     285forall( dtype T | sized(T) | { void ^?{}( T & ); }, ttype Params | { void adelete( Params ); } ) void adelete( T arr[], Params rest );
    290286
    291287//---------------------------------------
     
    383379//---------------------------------------
    384380
    385 extern bool threading_enabled( void ) OPTIONAL_THREAD;
     381extern bool threading_enabled(void) OPTIONAL_THREAD;
    386382
    387383// Local Variables: //
  • src/AST/Convert.cpp

    r9d264e18 rd6ad99e  
    99// Author           : Thierry Delisle
    1010// Created On       : Thu May 09 15::37::05 2019
    11 // Last Modified By : Andrew Beach
    12 // Last Modified On : Thr Nov 12 10:07:00 2020
    13 // Update Count     : 34
     11// Last Modified By : Peter A. Buhr
     12// Last Modified On : Wed Dec 11 21:39:32 2019
     13// Update Count     : 33
    1414//
    1515
     
    187187                auto init = get<Initializer>().accept1( node->init );
    188188                decl->init = init;
    189 
     189               
    190190                this->node = decl;
    191191                return nullptr;
     
    28122812        }
    28132813        deleteAll(translationUnit);
    2814 
    2815         // Load the local static varables into the global store.
    2816         unit.global.sizeType = ast::sizeType;
    2817         unit.global.dereference = ast::dereferenceOperator;
    2818         unit.global.dtorStruct = ast::dtorStruct;
    2819         unit.global.dtorDestroy = ast::dtorStructDestroy;
    2820 
    28212814        return unit;
    28222815}
  • src/AST/Pass.impl.hpp

    r9d264e18 rd6ad99e  
    423423                }
    424424                catch( SemanticErrorException &e ) {
    425                         if (__pass::on_error (visitor.core, *i, 0))
     425                        if (__pass::onError (visitor.core, *i, 0))
    426426                                errors.append( e );
    427427                }
  • src/AST/Pass.proto.hpp

    r9d264e18 rd6ad99e  
    270270
    271271        template< typename core_t >
    272         static bool on_error (core_t &, ptr<Decl> &, long) { return true; }
    273 
    274         template< typename core_t >
    275         static auto on_error (core_t & core, ptr<Decl> & decl, int) -> decltype(core.on_error(decl)) {
    276                 return core.on_error(decl);
     272        static bool onError (core_t &, ptr<Decl> &, long) { return true; }
     273
     274        template< typename core_t >
     275        static auto onError (core_t & core, ptr<Decl> & decl, int) -> decltype(core.onError(decl)) {
     276                return core.onError(decl);
    277277        }
    278278
  • src/InitTweak/GenInit.cc

    r9d264e18 rd6ad99e  
    202202                        }
    203203                        // don't need to hoist dimension if it's definitely pure - only need to if there's potential for side effects.
    204                         // xxx - hoisting has no side effects anyways, so don't skip since we delay resolve
    205                         // still try to detect constant expressions
    206                         if ( ! Tuples::maybeImpure( arrayType->dimension ) ) return;
     204                        // xxx - hoisting has no side effects anyways, so don't skip since we delay resolve     
     205                        // only skip in the most trivial case, which does not require resolve
     206                        if (dynamic_cast<ConstantExpr *>(arrayType->dimension)) return;
     207                        // if ( ! Tuples::maybeImpure( arrayType->dimension ) ) return;
    207208
    208209                        ObjectDecl * arrayDimension = new ObjectDecl( dimensionName.newName(), storageClasses, LinkageSpec::C, 0, Validate::SizeType->clone(), new SingleInit( arrayType->get_dimension() ) );
  • src/ResolvExpr/Resolver.cc

    r9d264e18 rd6ad99e  
    12891289                void beginScope() { managedTypes.beginScope(); }
    12901290                void endScope() { managedTypes.endScope(); }
    1291                 bool on_error(ast::ptr<ast::Decl> & decl);
     1291                bool onError(ast::ptr<ast::Decl> & decl);
    12921292        };
    12931293        // size_t Resolver_new::traceId = Stats::Heap::new_stacktrace_id("Resolver");
     
    20682068
    20692069        // suppress error on autogen functions and mark invalid autogen as deleted.
    2070         bool Resolver_new::on_error(ast::ptr<ast::Decl> & decl) {
     2070        bool Resolver_new::onError(ast::ptr<ast::Decl> & decl) {
    20712071                if (auto functionDecl = decl.as<ast::FunctionDecl>()) {
    20722072                        // xxx - can intrinsic gen ever fail?
  • src/main.cc

    r9d264e18 rd6ad99e  
    341341
    342342                if( useNewAST) {
    343                         if (Stats::Counters::enabled) {
    344                                 ast::pass_visitor_stats.avg = Stats::Counters::build<Stats::Counters::AverageCounter<double>>("Average Depth - New");
    345                                 ast::pass_visitor_stats.max = Stats::Counters::build<Stats::Counters::MaxCounter<double>>("Max depth - New");
    346                         }
    347343                        auto transUnit = convert( move( translationUnit ) );
    348344                        PASS( "Resolve", ResolvExpr::resolve( transUnit ) );
  • tests/.expect/alloc-ERROR.txt

    r9d264e18 rd6ad99e  
    1 alloc.cfa:382:1 error: No reasonable alternatives for expression Applying untyped:
     1alloc.cfa:361:1 error: No reasonable alternatives for expression Applying untyped:
    22  Name: ?=?
    33...to:
     
    1919
    2020
    21 alloc.cfa:383:1 error: No reasonable alternatives for expression Applying untyped:
     21alloc.cfa:362:1 error: No reasonable alternatives for expression Applying untyped:
    2222  Name: ?=?
    2323...to:
     
    3030
    3131
    32 alloc.cfa:384:1 error: No reasonable alternatives for expression Applying untyped:
     32alloc.cfa:363:1 error: No reasonable alternatives for expression Applying untyped:
    3333  Name: ?=?
    3434...to:
  • tests/alloc.cfa

    r9d264e18 rd6ad99e  
    1010// Created On       : Wed Feb  3 07:56:22 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Nov 12 10:02:18 2020
    13 // Update Count     : 432
     12// Last Modified On : Fri Oct  9 23:03:11 2020
     13// Update Count     : 431
    1414//
    1515
     
    375375        dp = alloc(5.0`fill); // just for testing multiple free
    376376        assert(*dp == 5.0);
    377         free( ip, dp, 0p );
     377        free( ip, dp );
    378378
    379379#ifdef ERR1
  • tests/malloc.cfa

    r9d264e18 rd6ad99e  
    319319        free(ip);
    320320
    321         free( (void *) 0p ); // sanity check
     321        free( (void*) 0p ); // sanity check
    322322        free( NULL ); // sanity check
    323323
     
    605605        return 0;
    606606}
    607 
    608 // Local Variables: //
    609 // tab-width: 4 //
    610 // compile-command: "cfa malloc.cfa" //
    611 // End: //
  • tests/manipulatorsOutput3.cfa

    r9d264e18 rd6ad99e  
    156156        sout | nl;
    157157
     158        ui128 = 0x7fffffffffffffff;
     159        ui128 <<= 64;
     160        ui128 += 0xffffffffffffffff;
    158161        sout | left( wd( 160, i128 ) );
    159162        sout | left( sign( wd( 0, i128 ) ) );
     
    174177        sout | left( wd( 160, bin( i128 ) ) );
    175178        sout | left( sign( wd( 160, i128 ) ) );
    176         sout | left( wd( 160, upcase( hex( i128 ) ) ) );
    177         sout | left( wd( 160, upcase( oct( i128 ) ) ) );
    178         sout | left( wd( 160, upcase( bin( i128 ) ) ) );
     179        sout | left( wd( 160, upcase(hex( i128 )) ) );
     180        sout | left( wd( 160, upcase(oct( i128 ) )) );
     181        sout | left( wd( 160, upcase(bin( i128 )) ) );
    179182
    180183        x = 1234;
     
    313316        }
    314317
     318
    315319        // int128 constants (and printing)
    316320        int128 v = 0xffff_ffffffff_ffffffff_L128 + 0xffffffff_ffffffff_ffffffff_ffffffff_L128;
Note: See TracChangeset for help on using the changeset viewer.