Ignore:
Timestamp:
Apr 25, 2025, 7:08:53 PM (9 months ago)
Author:
Andrew Beach <ajbeach@…>
Branches:
master
Children:
7d02d35, ecfa58be
Parents:
65bd3c2
Message:

Rewrote the iostream traits to have a single assertion each, a table containing function pointers. This is just an experiment right now. It seems that it does cause significant speed up of assertion resolution, but for some reason also seems to add a flat overhead that mostly eats up that saving.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/iostream.cfa

    r65bd3c2 rae0c1c3  
    4242
    4343forall( ostype & | basic_ostream( ostype ) ) {
    44         ostype & ?|?( ostype & os, bool b ) {
     44        ostype & ?|?( ostype & os, bool b ) with ( basic_ostream_table ) {
    4545                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    4646                fmt( os, "%s", b ? "true" : "false" );
     
    4949        OSTYPE_VOID_IMPL( os, bool )
    5050
    51         ostype & ?|?( ostype & os, char c ) {
     51        ostype & ?|?( ostype & os, char c ) with ( basic_ostream_table ) {
    5252                fmt( os, "%c", c );
    5353                if ( c == '\n' ) setNL$( os, true );
     
    5656        OSTYPE_VOID_IMPL( os, char )
    5757
    58         ostype & ?|?( ostype & os, signed char sc ) {
     58        ostype & ?|?( ostype & os, signed char sc ) with ( basic_ostream_table ) {
    5959                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    6060                fmt( os, "%'hhd", sc );
     
    6363        OSTYPE_VOID_IMPL( os, signed char )
    6464
    65         ostype & ?|?( ostype & os, unsigned char usc ) {
     65        ostype & ?|?( ostype & os, unsigned char usc ) with ( basic_ostream_table ) {
    6666                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    6767                fmt( os, "%'hhu", usc );
     
    7070        OSTYPE_VOID_IMPL( os, unsigned char )
    7171
    72         ostype & ?|?( ostype & os, short int si ) {
     72        ostype & ?|?( ostype & os, short int si ) with ( basic_ostream_table ) {
    7373                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    7474                fmt( os, "%'hd", si );
     
    7777        OSTYPE_VOID_IMPL( os, short int )
    7878
    79         ostype & ?|?( ostype & os, unsigned short int usi ) {
     79        ostype & ?|?( ostype & os, unsigned short int usi ) with ( basic_ostream_table ) {
    8080                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    8181                fmt( os, "%'hu", usi );
     
    8484        OSTYPE_VOID_IMPL( os, unsigned short int )
    8585
    86         ostype & ?|?( ostype & os, int i ) {
     86        ostype & ?|?( ostype & os, int i ) with ( basic_ostream_table ) {
    8787                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    8888                fmt( os, "%'d", i );
     
    9191        OSTYPE_VOID_IMPL( os, int )
    9292
    93         ostype & ?|?( ostype & os, unsigned int ui ) {
     93        ostype & ?|?( ostype & os, unsigned int ui ) with ( basic_ostream_table ) {
    9494                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    9595                fmt( os, "%'u", ui );
     
    9898        OSTYPE_VOID_IMPL( os, unsigned int )
    9999
    100         ostype & ?|?( ostype & os, long int li ) {
     100        ostype & ?|?( ostype & os, long int li ) with ( basic_ostream_table ) {
    101101                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    102102                fmt( os, "%'ld", li );
     
    105105        OSTYPE_VOID_IMPL( os, long int )
    106106
    107         ostype & ?|?( ostype & os, unsigned long int uli ) {
     107        ostype & ?|?( ostype & os, unsigned long int uli ) with ( basic_ostream_table ) {
    108108                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    109109                fmt( os, "%'lu", uli );
     
    112112        OSTYPE_VOID_IMPL( os, unsigned long int )
    113113
    114         ostype & ?|?( ostype & os, long long int lli ) {
     114        ostype & ?|?( ostype & os, long long int lli ) with ( basic_ostream_table ) {
    115115                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    116116                fmt( os, "%'lld", lli );
     
    119119        OSTYPE_VOID_IMPL( os, long long int )
    120120
    121         ostype & ?|?( ostype & os, unsigned long long int ulli ) {
     121        ostype & ?|?( ostype & os, unsigned long long int ulli ) with ( basic_ostream_table ) {
    122122                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    123123                fmt( os, "%'llu", ulli );
     
    130130        #define P10_UINT64 10_000_000_000_000_000_000_ULL       // 19 zeroes
    131131
    132         static inline void base10_128( ostype & os, unsigned int128 val ) {
     132        static inline void base10_128( ostype & os, unsigned int128 val ) with ( basic_ostream_table ) {
    133133                #if defined(__GNUC__) && __GNUC_PREREQ(7,0)             // gcc version >= 7
    134134                if ( val > P10_UINT64 ) {
     
    143143        } // base10_128
    144144
    145         static inline void base10_128( ostype & os, int128 val ) {
     145        static inline void base10_128( ostype & os, int128 val ) with ( basic_ostream_table ) {
    146146                if ( val < 0 ) {
    147147                        fmt( os, "-" );                                                         // leading negative sign
     
    151151        } // base10_128
    152152
    153         ostype & ?|?( ostype & os, int128 llli ) {
     153        ostype & ?|?( ostype & os, int128 llli ) with ( basic_ostream_table ) {
    154154                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    155155                base10_128( os, llli );
     
    158158        OSTYPE_VOID_IMPL( os, int128 )
    159159
    160         ostype & ?|?( ostype & os, unsigned int128 ullli ) {
     160        ostype & ?|?( ostype & os, unsigned int128 ullli ) with ( basic_ostream_table ) {
    161161                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    162162                base10_128( os, ullli );
     
    181181                }
    182182
    183         ostype & ?|?( ostype & os, float f ) {
     183        ostype & ?|?( ostype & os, float f ) with ( basic_ostream_table ) {
    184184                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    185185                PRINT_WITH_DP( os, "%'g", f );
     
    188188        OSTYPE_VOID_IMPL( os, float )
    189189
    190         ostype & ?|?( ostype & os, double d ) {
     190        ostype & ?|?( ostype & os, double d ) with ( basic_ostream_table ) {
    191191                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    192192                PRINT_WITH_DP( os, "%'.*lg", d, DBL_DIG );
     
    195195        OSTYPE_VOID_IMPL( os, double )
    196196
    197         ostype & ?|?( ostype & os, long double ld ) {
     197        ostype & ?|?( ostype & os, long double ld ) with ( basic_ostream_table ) {
    198198                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    199199                PRINT_WITH_DP( os, "%'.*Lg", ld, LDBL_DIG );
     
    202202        OSTYPE_VOID_IMPL( os, long double )
    203203
    204         ostype & ?|?( ostype & os, float _Complex fc ) {
     204        ostype & ?|?( ostype & os, float _Complex fc ) with ( basic_ostream_table ) {
    205205                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    206206//              os | crealf( fc ) | nonl;
     
    212212        OSTYPE_VOID_IMPL( os, float _Complex )
    213213
    214         ostype & ?|?( ostype & os, double _Complex dc ) {
     214        ostype & ?|?( ostype & os, double _Complex dc ) with ( basic_ostream_table ) {
    215215                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    216216//              os | creal( dc ) | nonl;
     
    222222        OSTYPE_VOID_IMPL( os, double _Complex )
    223223
    224         ostype & ?|?( ostype & os, long double _Complex ldc ) {
     224        ostype & ?|?( ostype & os, long double _Complex ldc ) with ( basic_ostream_table ) {
    225225                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    226226//              os | creall( ldc ) || nonl;
     
    232232        OSTYPE_VOID_IMPL( os, long double _Complex )
    233233
    234         ostype & ?|?( ostype & os, const char s[] ) {
     234        ostype & ?|?( ostype & os, const char s[] ) with ( basic_ostream_table ) {
    235235                enum { Open = 1, Close, OpenClose };
    236236                static const unsigned char mask[256] @= {               // 256 covers all Latin-1 characters
     
    295295//      } // ?|?
    296296
    297         ostype & ?|?( ostype & os, const void * p ) {
     297        ostype & ?|?( ostype & os, const void * p ) with ( basic_ostream_table ) {
    298298                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) );
    299299                fmt( os, "%p", p );
     
    306306                return manip( os );
    307307        } // ?|?
    308         void ?|?( ostype & os, ostype & (* manip)( ostype & ) ) {
     308        void ?|?( ostype & os, ostype & (* manip)( ostype & ) ) with ( basic_ostream_table ) {
    309309                manip( os );
    310310                if ( getPrt$( os ) ) ends( os );                                // something printed ?
     
    312312        } // ?|?
    313313
    314         ostype & nl( ostype & os ) {
     314        ostype & nl( ostype & os ) with ( basic_ostream_table ) {
    315315                (ostype &)(os | '\n');
    316316                setPrt$( os, false );                                                   // turn off
     
    319319        } // nl
    320320
    321         ostype & nonl( ostype & os ) {
     321        ostype & nonl( ostype & os ) with ( basic_ostream_table ) {
    322322                setPrt$( os, false );                                                   // turn off
    323323                return os;
    324324        } // nonl
    325325
    326         ostype & nlOn( ostype & os ) {
     326        ostype & nlOn( ostype & os ) with ( basic_ostream_table ) {
    327327                nlOn( os );                                                                             // call void returning
    328328                return os;
    329329        } // nlOn
    330330
    331         ostype & nlOff( ostype & os ) {
     331        ostype & nlOff( ostype & os ) with ( basic_ostream_table ) {
    332332                nlOff( os );                                                                    // call void returning
    333333                return os;
    334334        } // nlOff
    335335
    336         ostype & sepVal( ostype & os ) {
     336        ostype & sepVal( ostype & os ) with ( basic_ostream_table ) {
    337337                return (ostype &)(os | sepGet( os ));
    338338        } // sepVal
    339339
    340         ostype & sepTupleVal( ostype & os ) {
     340        ostype & sepTupleVal( ostype & os ) with ( basic_ostream_table ) {
    341341                return os | sepGetTuple( os );
    342342        } // sepTupleVal
    343343
    344         ostype & sep( ostype & os ) {
     344        ostype & sep( ostype & os ) with ( basic_ostream_table ) {
    345345                sep( os );                                                                              // call void returning
    346346                return os;
    347347        } // sep
    348348
    349         ostype & nosep( ostype & os ) {
     349        ostype & nosep( ostype & os ) with ( basic_ostream_table ) {
    350350                nosep( os );                                                                    // call void returning
    351351                return os;
    352352        } // nosep
    353353
    354         ostype & sepOn( ostype & os ) {
     354        ostype & sepOn( ostype & os ) with ( basic_ostream_table ) {
    355355                sepOn( os );                                                                    // call void returning
    356356                return os;
    357357        } // sepOn
    358358
    359         ostype & sepOff( ostype & os ) {
     359        ostype & sepOff( ostype & os ) with ( basic_ostream_table ) {
    360360                sepOff( os );                                                                   // call void returning
    361361                return os;
     
    365365// tuples
    366366forall( ostype &, T, Params... | writeable( T, ostype ) | { ostype & ?|?( ostype &, Params ); } ) {
    367         ostype & ?|?( ostype & os, T arg, Params rest ) {
     367        ostype & ?|?( ostype & os, T arg, Params rest ) with ( basic_ostream_table ) {
    368368                (ostype &)(os | arg);                                                   // print first argument
    369369                sepSetCur$( os, sepGetTuple( os ) );                    // switch to tuple separator
     
    372372                return os;
    373373        } // ?|?
    374         void ?|?( ostype & os, T arg, Params rest ) {
     374        void ?|?( ostype & os, T arg, Params rest ) with ( basic_ostream_table ) {
    375375                // (ostype &)(?|?( os, arg, rest )); ends( os );
    376376                (ostype &)(os | arg);                                                   // print first argument
     
    405405#define INTEGRAL_FMT_IMPL( T, IFMTNP, IFMTP ) \
    406406forall( ostype & | basic_ostream( ostype ) ) { \
    407         ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
     407        ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) with ( basic_ostream_table ) { \
    408408                if ( sepPrt$( os ) ) fmt( os, "%s", sepGetCur$( os ) ); \
    409409\
     
    653653        } /* eng */ \
    654654\
    655         ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) { \
     655        ostype & ?|?( ostype & os, _Ostream_Manip(T) f ) with ( basic_ostream_table ) { \
    656656                enum { size = 48 }; \
    657657                char buf[size]; \
     
    692692
    693693forall( ostype & | basic_ostream( ostype ) ) {
    694         ostype & ?|?( ostype & os, _Ostream_Manip(char) f ) {
     694        ostype & ?|?( ostype & os, _Ostream_Manip(char) f ) with ( basic_ostream_table ) {
    695695                if ( f.base != 'c' ) {                                                  // bespoke binary/octal/hex format
    696696                        _Ostream_Manip(unsigned char) fmtuc @= { f.val, f.wd, f.pc, f.base, {'\0'} };
     
    724724
    725725forall( ostype & | basic_ostream( ostype ) ) {
    726         ostype & ?|?( ostype & os, _Ostream_Manip(const char *) f ) {
     726        ostype & ?|?( ostype & os, _Ostream_Manip(const char *) f ) with ( basic_ostream_table ) {
    727727                if ( ! f.val ) return os;                                               // null pointer ?
    728728
     
    776776
    777777forall( istype & | basic_istream( istype ) ) {
    778         istype & ?|?( istype & is, bool & b ) {
     778        istype & ?|?( istype & is, bool & b ) with ( basic_istream_table ) {
    779779                int len = -1;                                                                   // len not set if no match
    780780                fmt( is, " " );                                                                 // remove leading whitespace
     
    792792        } // ?|?
    793793
    794         istype & ?|?( istype & is, char & c ) {
     794        istype & ?|?( istype & is, char & c ) with ( basic_istream_table ) {
    795795                char temp;
    796796                for () {
     
    804804        } // ?|?
    805805
    806         istype & ?|?( istype & is, signed char & sc ) {
     806        istype & ?|?( istype & is, signed char & sc ) with ( basic_istream_table ) {
    807807                int args = fmt( is, "%hhi", &sc );                              // can be multiple characters (100)
    808808                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    811811        } // ?|?
    812812
    813         istype & ?|?( istype & is, unsigned char & usc ) {
     813        istype & ?|?( istype & is, unsigned char & usc ) with ( basic_istream_table ) {
    814814                int args = fmt( is, "%hhi", &usc );                             // can be multiple characters (-100)
    815815                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    818818        } // ?|?
    819819
    820         istype & ?|?( istype & is, short int & si ) {
     820        istype & ?|?( istype & is, short int & si ) with ( basic_istream_table ) {
    821821                int args = fmt( is, "%hi", &si );                               // can be called with EOF on
    822822                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    825825        } // ?|?
    826826
    827         istype & ?|?( istype & is, unsigned short int & usi ) {
     827        istype & ?|?( istype & is, unsigned short int & usi ) with ( basic_istream_table ) {
    828828                int args = fmt( is, "%hi", &usi );                              // can be called with EOF on
    829829                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    832832        } // ?|?
    833833
    834         istype & ?|?( istype & is, int & i ) {
     834        istype & ?|?( istype & is, int & i ) with ( basic_istream_table ) {
    835835                int args = fmt( is, "%i", &i );                                 // can be called with EOF on
    836836                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    839839        } // ?|?
    840840
    841         istype & ?|?( istype & is, unsigned int & ui ) {
     841        istype & ?|?( istype & is, unsigned int & ui ) with ( basic_istream_table ) {
    842842                int args = fmt( is, "%i", &ui );                                // can be called with EOF on
    843843                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    846846        } // ?|?
    847847
    848         istype & ?|?( istype & is, long int & li ) {
     848        istype & ?|?( istype & is, long int & li ) with ( basic_istream_table ) {
    849849                int args = fmt( is, "%li", &li );                               // can be called with EOF on
    850850                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    853853        } // ?|?
    854854
    855         istype & ?|?( istype & is, unsigned long int & ulli ) {
     855        istype & ?|?( istype & is, unsigned long int & ulli ) with ( basic_istream_table ) {
    856856                int args = fmt( is, "%li", &ulli );                             // can be called with EOF on
    857857                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    860860        } // ?|?
    861861
    862         istype & ?|?( istype & is, long long int & lli ) {
     862        istype & ?|?( istype & is, long long int & lli ) with ( basic_istream_table ) {
    863863                int args = fmt( is, "%lli", &lli );                             // can be called with EOF on
    864864                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    867867        } // ?|?
    868868
    869         istype & ?|?( istype & is, unsigned long long int & ulli ) {
     869        istype & ?|?( istype & is, unsigned long long int & ulli ) with ( basic_istream_table ) {
    870870                int args = fmt( is, "%lli", &ulli );                    // can be called with EOF on
    871871                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    879879        } // ?|?
    880880
    881         istype & ?|?( istype & is, unsigned int128 & ullli ) {
     881        istype & ?|?( istype & is, unsigned int128 & ullli ) with ( basic_istream_table ) {
    882882                char s[40];
    883883                bool sign = false;
     
    896896        #endif // __SIZEOF_INT128__
    897897
    898         istype & ?|?( istype & is, float & f ) {
     898        istype & ?|?( istype & is, float & f ) with ( basic_istream_table ) {
    899899                int args = fmt( is, "%f", &f );                                 // can be called with EOF on
    900900                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    903903        } // ?|?
    904904
    905         istype & ?|?( istype & is, double & d ) {
     905        istype & ?|?( istype & is, double & d ) with ( basic_istream_table ) {
    906906                int args = fmt( is, "%lf", &d );                                // can be called with EOF on
    907907                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    910910        } // ?|?
    911911
    912         istype & ?|?( istype & is, long double & ld ) {
     912        istype & ?|?( istype & is, long double & ld ) with ( basic_istream_table ) {
    913913                int args = fmt( is, "%Lf", &ld );                               // can be called with EOF on
    914914                if ( ! eof( is ) && args != 1 ) throwResume ExceptionInst( missing_data );
     
    917917        } // ?|?
    918918
    919         istype & ?|?( istype & is, float _Complex & fc ) {
     919        istype & ?|?( istype & is, float _Complex & fc ) with ( basic_istream_table ) {
    920920                float re, im;
    921921                int args = fmt( is, "%f%fi", &re, &im );                // can be called with EOF on
     
    926926        } // ?|?
    927927
    928         istype & ?|?( istype & is, double _Complex & dc ) {
     928        istype & ?|?( istype & is, double _Complex & dc ) with ( basic_istream_table ) {
    929929                double re, im;
    930930                int args = fmt( is, "%lf%lfi", &re, &im );              // can be called with EOF on
     
    935935        } // ?|?
    936936
    937         istype & ?|?( istype & is, long double _Complex & ldc ) {
     937        istype & ?|?( istype & is, long double _Complex & ldc ) with ( basic_istream_table ) {
    938938                long double re, im;
    939939                int args = fmt( is, "%Lf%Lfi", &re, &im );              // can be called with EOF on
     
    944944        } // ?|?
    945945
    946         istype & ?|?( istype & is, const char fmt[] ) {         // match text
     946        istype & ?|?( istype & is, const char fmt[] ) with ( basic_istream_table ) {            // match text
    947947                size_t len = strlen( fmt );
    948948                char fmtstr[len + 16];
     
    966966        } // ?|?
    967967
    968         istype & nl( istype & is ) {
     968        istype & nl( istype & is ) with ( basic_istream_table ) {
    969969                fmt( is, "%*[^\n]" );                                                   // ignore characters to newline
    970970                if ( ! eof( is ) ) fmt( is, "%*c" );                    // read newline
     
    972972        } // nl
    973973
    974         istype & nlOn( istype & is ) {
     974        istype & nlOn( istype & is ) with ( basic_istream_table ) {
    975975                nlOn( is );                                                                             // call void returning
    976976                return is;
    977977        } // nlOn
    978978
    979         istype & nlOff( istype & is ) {
     979        istype & nlOff( istype & is ) with ( basic_istream_table ) {
    980980                nlOff( is );                                                                    // call void returning
    981981                return is;
     
    986986
    987987forall( istype & | basic_istream( istype ) ) {
    988         istype & ?|?( istype & is, _Istream_Cskip f ) {
     988        istype & ?|?( istype & is, _Istream_Cskip f ) with ( basic_istream_table ) {
    989989                if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
    990990                if ( f.scanset ) {
     
    10061006        }
    10071007
    1008         istype & ?|?( istype & is, _Istream_Cquote f ) with( f.cstr ) {
     1008        istype & ?|?( istype & is, _Istream_Cquote f ) with( basic_istream_table, f.cstr ) {
    10091009                if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
    10101010                int args;
     
    10311031        }
    10321032
    1033         istype & ?|?( istype & is, _Istream_Cstr f ) with( f.cstr ) {
     1033        istype & ?|?( istype & is, _Istream_Cstr f ) with( basic_istream_table, f.cstr ) {
     1034                assert(eof);
    10341035                if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
    10351036                const char * scanset;
     
    11391140#define INPUT_FMT_IMPL( T, CODE ) \
    11401141forall( istype & | basic_istream( istype ) ) { \
    1141         istype & ?|?( istype & is, _Istream_Manip(T) f ) { \
     1142        istype & ?|?( istype & is, _Istream_Manip(T) f ) with ( basic_istream_table ) { \
    11421143                enum { size = 16 }; \
    11431144                char fmtstr[size]; \
     
    12031204
    12041205forall( istype & | istream( istype ), E | CfaEnum( E ) | Serial( E ) )
    1205 istype & ?|?( istype & is, E & e ) {
     1206istype & ?|?( istype & is, E & e ) with ( basic_istream_table ) {
    12061207//      if ( eof( is ) ) throwResume ExceptionInst( end_of_file );
    12071208
Note: See TracChangeset for help on using the changeset viewer.