Changeset ba0d2ea


Ignore:
Timestamp:
Jul 29, 2021, 10:39:49 PM (3 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
jacob/cs343-translation, master, new-ast-unique-expr
Children:
06c61e2
Parents:
e4da70b
Message:

add exceptions Close_Failure, Write_Failure, Read_Failure to fstream

Location:
libcfa/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/fstream.cfa

    re4da70b rba0d2ea  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jul 22 11:34:41 2021
    13 // Update Count     : 448
     12// Last Modified On : Thu Jul 29 22:34:10 2021
     13// Update Count     : 454
    1414//
    1515
     
    142142
    143143        if ( fclose( (FILE *)(os.file$) ) == EOF ) {
    144                 abort | IO_MSG "close output" | nl | strerror( errno );
     144                throw (Close_Failure){ os };
     145                // abort | IO_MSG "close output" | nl | strerror( errno );
    145146        } // if
    146147        os.file$ = 0p;
     
    149150ofstream & write( ofstream & os, const char data[], size_t size ) {
    150151        if ( fail( os ) ) {
    151                 abort | IO_MSG "attempt write I/O on failed stream";
     152                throw (Write_Failure){ os };
     153                // abort | IO_MSG "attempt write I/O on failed stream";
    152154        } // if
    153155
    154156        if ( fwrite( data, 1, size, (FILE *)(os.file$) ) != size ) {
    155                 abort | IO_MSG "write" | nl | strerror( errno );
     157                throw (Write_Failure){ os };
     158                // abort | IO_MSG "write" | nl | strerror( errno );
    156159        } // if
    157160        return os;
     
    277280
    278281        if ( fclose( (FILE *)(is.file$) ) == EOF ) {
    279                 abort | IO_MSG "close input" | nl | strerror( errno );
     282                throw (Close_Failure){ is };
     283                // abort | IO_MSG "close input" | nl | strerror( errno );
    280284        } // if
    281285        is.file$ = 0p;
     
    284288ifstream & read( ifstream & is, char data[], size_t size ) {
    285289        if ( fail( is ) ) {
    286                 abort | IO_MSG "attempt read I/O on failed stream";
     290                throw (Read_Failure){ is };
     291                // abort | IO_MSG "attempt read I/O on failed stream";
    287292        } // if
    288293
    289294        if ( fread( data, size, 1, (FILE *)(is.file$) ) == 0 ) {
    290                 abort | IO_MSG "read" | nl | strerror( errno );
     295                throw (Read_Failure){ is };
     296                // abort | IO_MSG "read" | nl | strerror( errno );
    291297        } // if
    292298        return is;
     
    338344
    339345
    340 //EHM_VIRTUAL_TABLE(Open_Failure, Open_Failure_main_table);
    341 static vtable(Open_Failure) Open_Failure_main_table;
     346static vtable(Open_Failure) Open_Failure_vt;
    342347
    343348// exception I/O constructors
    344349void ?{}( Open_Failure & this, ofstream & ostream ) {
    345         this.virtual_table = &Open_Failure_main_table;
     350        this.virtual_table = &Open_Failure_vt;
    346351        this.ostream = &ostream;
    347352        this.tag = 1;
     
    349354
    350355void ?{}( Open_Failure & this, ifstream & istream ) {
    351         this.virtual_table = &Open_Failure_main_table;
     356        this.virtual_table = &Open_Failure_vt;
    352357        this.istream = &istream;
    353358        this.tag = 0;
    354359} // ?{}
    355360
    356 void throwOpen_Failure( ofstream & ostream ) {
    357         Open_Failure exc = { ostream };
    358 }
    359 
    360 void throwOpen_Failure( ifstream & istream ) {
    361         Open_Failure exc = { istream };
    362 }
     361
     362static vtable(Close_Failure) Close_Failure_vt;
     363
     364// exception I/O constructors
     365void ?{}( Close_Failure & this, ofstream & ostream ) {
     366        this.virtual_table = &Close_Failure_vt;
     367        this.ostream = &ostream;
     368        this.tag = 1;
     369} // ?{}
     370
     371void ?{}( Close_Failure & this, ifstream & istream ) {
     372        this.virtual_table = &Close_Failure_vt;
     373        this.istream = &istream;
     374        this.tag = 0;
     375} // ?{}
     376
     377
     378static vtable(Write_Failure) Write_Failure_vt;
     379
     380// exception I/O constructors
     381void ?{}( Write_Failure & this, ofstream & ostream ) {
     382        this.virtual_table = &Write_Failure_vt;
     383        this.ostream = &ostream;
     384        this.tag = 1;
     385} // ?{}
     386
     387void ?{}( Write_Failure & this, ifstream & istream ) {
     388        this.virtual_table = &Write_Failure_vt;
     389        this.istream = &istream;
     390        this.tag = 0;
     391} // ?{}
     392
     393
     394static vtable(Read_Failure) Read_Failure_vt;
     395
     396// exception I/O constructors
     397void ?{}( Read_Failure & this, ofstream & ostream ) {
     398        this.virtual_table = &Read_Failure_vt;
     399        this.ostream = &ostream;
     400        this.tag = 1;
     401} // ?{}
     402
     403void ?{}( Read_Failure & this, ifstream & istream ) {
     404        this.virtual_table = &Read_Failure_vt;
     405        this.istream = &istream;
     406        this.tag = 0;
     407} // ?{}
     408
     409// void throwOpen_Failure( ofstream & ostream ) {
     410//      Open_Failure exc = { ostream };
     411// }
     412
     413// void throwOpen_Failure( ifstream & istream ) {
     414//      Open_Failure exc = { istream };
     415// }
    363416
    364417// Local Variables: //
  • libcfa/src/fstream.hfa

    re4da70b rba0d2ea  
    1010// Created On       : Wed May 27 17:56:53 2015
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Tue Jul 20 21:18:03 2021
    13 // Update Count     : 232
     12// Last Modified On : Wed Jul 28 07:35:50 2021
     13// Update Count     : 234
    1414//
    1515
     
    160160void ?{}( Open_Failure & this, ifstream & );
    161161
     162exception Close_Failure {
     163        union {
     164                ofstream * ostream;
     165                ifstream * istream;
     166        };
     167        // TEMPORARY: need polymorphic exceptions
     168        int tag;                                                                                        // 1 => ostream; 0 => istream
     169};
     170
     171void ?{}( Close_Failure & this, ofstream & );
     172void ?{}( Close_Failure & this, ifstream & );
     173
     174exception Write_Failure {
     175        union {
     176                ofstream * ostream;
     177                ifstream * istream;
     178        };
     179        // TEMPORARY: need polymorphic exceptions
     180        int tag;                                                                                        // 1 => ostream; 0 => istream
     181};
     182
     183void ?{}( Write_Failure & this, ofstream & );
     184void ?{}( Write_Failure & this, ifstream & );
     185
     186exception Read_Failure {
     187        union {
     188                ofstream * ostream;
     189                ifstream * istream;
     190        };
     191        // TEMPORARY: need polymorphic exceptions
     192        int tag;                                                                                        // 1 => ostream; 0 => istream
     193};
     194
     195void ?{}( Read_Failure & this, ofstream & );
     196void ?{}( Read_Failure & this, ifstream & );
     197
    162198// Local Variables: //
    163199// mode: c //
Note: See TracChangeset for help on using the changeset viewer.