Ignore:
Timestamp:
Apr 21, 2021, 12:42:23 PM (6 months ago)
Author:
Thierry Delisle <tdelisle@…>
Branches:
arm-eh, jacob/cs343-translation, master, new-ast-unique-expr
Children:
1d5deea
Parents:
341aa39 (diff), e638266 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Merge branch 'master' of plg.uwaterloo.ca:software/cfa/cfa-cc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/fstream.cfa

    r341aa39 rc41c2dbe  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Mon Mar  1 21:12:15 2021
    13 // Update Count     : 424
     12// Last Modified On : Tue Apr 20 19:04:46 2021
     13// Update Count     : 425
    1414//
    1515
     
    3131
    3232void ?{}( ofstream & os, void * file ) {
    33         os.$file = file;
    34         os.$sepDefault = true;
    35         os.$sepOnOff = false;
    36         os.$nlOnOff = true;
    37         os.$prt = false;
    38         os.$sawNL = false;
    39         os.$acquired = false;
    40         $sepSetCur( os, sepGet( os ) );
     33        os.file$ = file;
     34        os.sepDefault$ = true;
     35        os.sepOnOff$ = false;
     36        os.nlOnOff$ = true;
     37        os.prt$ = false;
     38        os.sawNL$ = false;
     39        os.acquired$ = false;
     40        sepSetCur$( os, sepGet( os ) );
    4141        sepSet( os, " " );
    4242        sepSetTuple( os, ", " );
     
    4444
    4545// private
    46 bool $sepPrt( ofstream & os ) { $setNL( os, false ); return os.$sepOnOff; }
    47 void $sepReset( ofstream & os ) { os.$sepOnOff = os.$sepDefault; }
    48 void $sepReset( ofstream & os, bool reset ) { os.$sepDefault = reset; os.$sepOnOff = os.$sepDefault; }
    49 const char * $sepGetCur( ofstream & os ) { return os.$sepCur; }
    50 void $sepSetCur( ofstream & os, const char sepCur[] ) { os.$sepCur = sepCur; }
    51 bool $getNL( ofstream & os ) { return os.$sawNL; }
    52 void $setNL( ofstream & os, bool state ) { os.$sawNL = state; }
    53 bool $getANL( ofstream & os ) { return os.$nlOnOff; }
    54 bool $getPrt( ofstream & os ) { return os.$prt; }
    55 void $setPrt( ofstream & os, bool state ) { os.$prt = state; }
     46bool sepPrt$( ofstream & os ) { setNL$( os, false ); return os.sepOnOff$; }
     47void sepReset$( ofstream & os ) { os.sepOnOff$ = os.sepDefault$; }
     48void sepReset$( ofstream & os, bool reset ) { os.sepDefault$ = reset; os.sepOnOff$ = os.sepDefault$; }
     49const char * sepGetCur$( ofstream & os ) { return os.sepCur$; }
     50void sepSetCur$( ofstream & os, const char sepCur[] ) { os.sepCur$ = sepCur; }
     51bool getNL$( ofstream & os ) { return os.sawNL$; }
     52void setNL$( ofstream & os, bool state ) { os.sawNL$ = state; }
     53bool getANL$( ofstream & os ) { return os.nlOnOff$; }
     54bool getPrt$( ofstream & os ) { return os.prt$; }
     55void setPrt$( ofstream & os, bool state ) { os.prt$ = state; }
    5656
    5757// public
    58 void ?{}( ofstream & os ) { os.$file = 0p; }
     58void ?{}( ofstream & os ) { os.file$ = 0p; }
    5959
    6060void ?{}( ofstream & os, const char name[], const char mode[] ) {
     
    7070} // ^?{}
    7171
    72 void sepOn( ofstream & os ) { os.$sepOnOff = ! $getNL( os ); }
    73 void sepOff( ofstream & os ) { os.$sepOnOff = false; }
     72void sepOn( ofstream & os ) { os.sepOnOff$ = ! getNL$( os ); }
     73void sepOff( ofstream & os ) { os.sepOnOff$ = false; }
    7474
    7575bool sepDisable( ofstream & os ) {
    76         bool temp = os.$sepDefault;
    77         os.$sepDefault = false;
    78         $sepReset( os );
     76        bool temp = os.sepDefault$;
     77        os.sepDefault$ = false;
     78        sepReset$( os );
    7979        return temp;
    8080} // sepDisable
    8181
    8282bool sepEnable( ofstream & os ) {
    83         bool temp = os.$sepDefault;
    84         os.$sepDefault = true;
    85         if ( os.$sepOnOff ) $sepReset( os );                            // start of line ?
     83        bool temp = os.sepDefault$;
     84        os.sepDefault$ = true;
     85        if ( os.sepOnOff$ ) sepReset$( os );                            // start of line ?
    8686        return temp;
    8787} // sepEnable
    8888
    89 void nlOn( ofstream & os ) { os.$nlOnOff = true; }
    90 void nlOff( ofstream & os ) { os.$nlOnOff = false; }
    91 
    92 const char * sepGet( ofstream & os ) { return os.$separator; }
     89void nlOn( ofstream & os ) { os.nlOnOff$ = true; }
     90void nlOff( ofstream & os ) { os.nlOnOff$ = false; }
     91
     92const char * sepGet( ofstream & os ) { return os.separator$; }
    9393void sepSet( ofstream & os, const char s[] ) {
    9494        assert( s );
    95         strncpy( os.$separator, s, sepSize - 1 );
    96         os.$separator[sepSize - 1] = '\0';
     95        strncpy( os.separator$, s, sepSize - 1 );
     96        os.separator$[sepSize - 1] = '\0';
    9797} // sepSet
    9898
    99 const char * sepGetTuple( ofstream & os ) { return os.$tupleSeparator; }
     99const char * sepGetTuple( ofstream & os ) { return os.tupleSeparator$; }
    100100void sepSetTuple( ofstream & os, const char s[] ) {
    101101        assert( s );
    102         strncpy( os.$tupleSeparator, s, sepSize - 1 );
    103         os.$tupleSeparator[sepSize - 1] = '\0';
     102        strncpy( os.tupleSeparator$, s, sepSize - 1 );
     103        os.tupleSeparator$[sepSize - 1] = '\0';
    104104} // sepSet
    105105
    106106void ends( ofstream & os ) {
    107         if ( $getANL( os ) ) nl( os );
    108         else $setPrt( os, false );                                                      // turn off
     107        if ( getANL$( os ) ) nl( os );
     108        else setPrt$( os, false );                                                      // turn off
    109109        if ( &os == &exit ) exit( EXIT_FAILURE );
    110110        if ( &os == &abort ) abort();
    111         if ( os.$acquired ) { os.$acquired = false; release( os ); }
     111        if ( os.acquired$ ) { os.acquired$ = false; release( os ); }
    112112} // ends
    113113
    114114int fail( ofstream & os ) {
    115         return os.$file == 0 || ferror( (FILE *)(os.$file) );
     115        return os.file$ == 0 || ferror( (FILE *)(os.file$) );
    116116} // fail
    117117
    118118int flush( ofstream & os ) {
    119         return fflush( (FILE *)(os.$file) );
     119        return fflush( (FILE *)(os.file$) );
    120120} // flush
    121121
     
    136136
    137137void close( ofstream & os ) {
    138   if ( (FILE *)(os.$file) == 0p ) return;
    139   if ( (FILE *)(os.$file) == (FILE *)stdout || (FILE *)(os.$file) == (FILE *)stderr ) return;
    140 
    141         if ( fclose( (FILE *)(os.$file) ) == EOF ) {
     138  if ( (FILE *)(os.file$) == 0p ) return;
     139  if ( (FILE *)(os.file$) == (FILE *)stdout || (FILE *)(os.file$) == (FILE *)stderr ) return;
     140
     141        if ( fclose( (FILE *)(os.file$) ) == EOF ) {
    142142                abort | IO_MSG "close output" | nl | strerror( errno );
    143143        } // if
    144         os.$file = 0p;
     144        os.file$ = 0p;
    145145} // close
    146146
     
    150150        } // if
    151151
    152         if ( fwrite( data, 1, size, (FILE *)(os.$file) ) != size ) {
     152        if ( fwrite( data, 1, size, (FILE *)(os.file$) ) != size ) {
    153153                abort | IO_MSG "write" | nl | strerror( errno );
    154154        } // if
     
    159159        va_list args;
    160160        va_start( args, format );
    161         int len = vfprintf( (FILE *)(os.$file), format, args );
     161        int len = vfprintf( (FILE *)(os.file$), format, args );
    162162        if ( len == EOF ) {
    163                 if ( ferror( (FILE *)(os.$file) ) ) {
     163                if ( ferror( (FILE *)(os.file$) ) ) {
    164164                        abort | IO_MSG "invalid write";
    165165                } // if
     
    167167        va_end( args );
    168168
    169         $setPrt( os, true );                                                            // called in output cascade
    170         $sepReset( os );                                                                        // reset separator
     169        setPrt$( os, true );                                                            // called in output cascade
     170        sepReset$( os );                                                                        // reset separator
    171171        return len;
    172172} // fmt
    173173
    174174inline void acquire( ofstream & os ) {
    175         lock( os.$lock );
    176         if ( ! os.$acquired ) os.$acquired = true;
    177         else unlock( os.$lock );
     175        lock( os.lock$ );
     176        if ( ! os.acquired$ ) os.acquired$ = true;
     177        else unlock( os.lock$ );
    178178} // acquire
    179179
    180180inline void release( ofstream & os ) {
    181         unlock( os.$lock );
     181        unlock( os.lock$ );
    182182} // release
    183183
    184 void ?{}( osacquire & acq, ofstream & os ) { &acq.os = &os; lock( os.$lock ); }
     184void ?{}( osacquire & acq, ofstream & os ) { &acq.os = &os; lock( os.lock$ ); }
    185185void ^?{}( osacquire & acq ) { release( acq.os ); }
    186186
     
    204204// private
    205205void ?{}( ifstream & is, void * file ) {
    206         is.$file = file;
    207         is.$nlOnOff = false;
    208         is.$acquired = false;
     206        is.file$ = file;
     207        is.nlOnOff$ = false;
     208        is.acquired$ = false;
    209209} // ?{}
    210210
    211211// public
    212 void ?{}( ifstream & is ) { is.$file = 0p; }
     212void ?{}( ifstream & is ) { is.file$ = 0p; }
    213213
    214214void ?{}( ifstream & is, const char name[], const char mode[] ) {
     
    224224} // ^?{}
    225225
    226 void nlOn( ifstream & os ) { os.$nlOnOff = true; }
    227 void nlOff( ifstream & os ) { os.$nlOnOff = false; }
    228 bool getANL( ifstream & os ) { return os.$nlOnOff; }
     226void nlOn( ifstream & os ) { os.nlOnOff$ = true; }
     227void nlOff( ifstream & os ) { os.nlOnOff$ = false; }
     228bool getANL( ifstream & os ) { return os.nlOnOff$; }
    229229
    230230int fail( ifstream & is ) {
    231         return is.$file == 0p || ferror( (FILE *)(is.$file) );
     231        return is.file$ == 0p || ferror( (FILE *)(is.file$) );
    232232} // fail
    233233
    234234void ends( ifstream & is ) {
    235         if ( is.$acquired ) { is.$acquired = false; release( is ); }
     235        if ( is.acquired$ ) { is.acquired$ = false; release( is ); }
    236236} // ends
    237237
    238238int eof( ifstream & is ) {
    239         return feof( (FILE *)(is.$file) );
     239        return feof( (FILE *)(is.file$) );
    240240} // eof
    241241
     
    248248        } // if
    249249        #endif // __CFA_DEBUG__
    250         is.$file = file;
     250        is.file$ = file;
    251251} // open
    252252
     
    256256
    257257void close( ifstream & is ) {
    258   if ( (FILE *)(is.$file) == 0p ) return;
    259   if ( (FILE *)(is.$file) == (FILE *)stdin ) return;
    260 
    261         if ( fclose( (FILE *)(is.$file) ) == EOF ) {
     258  if ( (FILE *)(is.file$) == 0p ) return;
     259  if ( (FILE *)(is.file$) == (FILE *)stdin ) return;
     260
     261        if ( fclose( (FILE *)(is.file$) ) == EOF ) {
    262262                abort | IO_MSG "close input" | nl | strerror( errno );
    263263        } // if
    264         is.$file = 0p;
     264        is.file$ = 0p;
    265265} // close
    266266
     
    270270        } // if
    271271
    272         if ( fread( data, size, 1, (FILE *)(is.$file) ) == 0 ) {
     272        if ( fread( data, size, 1, (FILE *)(is.file$) ) == 0 ) {
    273273                abort | IO_MSG "read" | nl | strerror( errno );
    274274        } // if
     
    281281        } // if
    282282
    283         if ( ungetc( c, (FILE *)(is.$file) ) == EOF ) {
     283        if ( ungetc( c, (FILE *)(is.file$) ) == EOF ) {
    284284                abort | IO_MSG "ungetc" | nl | strerror( errno );
    285285        } // if
     
    291291
    292292        va_start( args, format );
    293         int len = vfscanf( (FILE *)(is.$file), format, args );
     293        int len = vfscanf( (FILE *)(is.file$), format, args );
    294294        if ( len == EOF ) {
    295                 if ( ferror( (FILE *)(is.$file) ) ) {
     295                if ( ferror( (FILE *)(is.file$) ) ) {
    296296                        abort | IO_MSG "invalid read";
    297297                } // if
     
    302302
    303303inline void acquire( ifstream & is ) {
    304         lock( is.$lock );
    305         if ( ! is.$acquired ) is.$acquired = true;
    306         else unlock( is.$lock );
     304        lock( is.lock$ );
     305        if ( ! is.acquired$ ) is.acquired$ = true;
     306        else unlock( is.lock$ );
    307307} // acquire
    308308
    309309inline void release( ifstream & is ) {
    310         unlock( is.$lock );
     310        unlock( is.lock$ );
    311311} // release
    312312
    313 void ?{}( isacquire & acq, ifstream & is ) { &acq.is = &is; lock( is.$lock ); }
     313void ?{}( isacquire & acq, ifstream & is ) { &acq.is = &is; lock( is.lock$ ); }
    314314void ^?{}( isacquire & acq ) { release( acq.is ); }
    315315
Note: See TracChangeset for help on using the changeset viewer.