Changeset 6ba0659
- Timestamp:
- Feb 17, 2016, 2:22:22 PM (9 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, ctor, deferred_resn, demangler, enum, forall-pointer-decay, gc_noraii, jacob/cs343-translation, jenkins-sandbox, master, memory, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, string, with_gc
- Children:
- 658f6de0
- Parents:
- 52f85e0
- Location:
- src
- Files:
-
- 19 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Tests/Makefile
r52f85e0 r6ba0659 8 8 OUTPUTS = ${addprefix ${OUTPUTDIR}/,${EXAMPLES:.c=.txt}} 9 9 10 .SILENT :10 #.SILENT : 11 11 12 12 all : … … 19 19 20 20 ${OUTPUTDIR}/%.txt : %.c ${CFA} Makefile 21 -${CFA} -n ${CFAOPT} <$< > $@ 2>&121 -${CFA} -n ${CFAOPT} $< > $@ 2>&1 22 22 23 23 ${OUTPUTDIR}/report : ${OUTPUTS} ${EXPECTDIR} -
src/examples/abs.c
r52f85e0 r6ba0659 10 10 // Created On : Thu Jan 28 18:26:16 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 3 11:14:58201613 // Update Count : 4 312 // Last Modified On : Wed Feb 17 09:32:04 2016 13 // Update Count : 44 14 14 // 15 15 … … 18 18 19 19 int main( void ) { 20 ofstream *sout = ofstream_stdout();21 22 20 char ch = -65; 23 21 sout | "char\t\t\t" | ch | "\tabs " | abs( ch ) | endl; -
src/examples/alloc.c
r52f85e0 r6ba0659 11 11 // Created On : Wed Feb 3 07:56:22 2016 12 12 // Last Modified By : Peter A. Buhr 13 // Last Modified On : Wed Feb 3 16:32:04201614 // Update Count : 3813 // Last Modified On : Wed Feb 17 11:43:23 2016 14 // Update Count : 40 15 15 // 16 16 … … 27 27 28 28 int main( void ) { 29 ofstream * sout = ofstream_stdout();30 31 29 size_t size = 10; 32 30 int * p; … … 100 98 free( x ); 101 99 #endif 102 free( sout );103 100 } 104 101 -
src/examples/fstream_test.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:11:33 201613 // Update Count : 4 212 // Last Modified On : Wed Feb 17 11:45:43 2016 13 // Update Count : 43 14 14 // 15 15 … … 17 17 18 18 int main( void ) { 19 ofstream *sout = ofstream_stdout();20 ifstream *sin = ifstream_stdin();21 19 int nombre; 22 20 sout | "Entrez un nombre, s'il vous plaît:\n"; -
src/examples/hello.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:11:49201613 // Update Count : 712 // Last Modified On : Wed Feb 17 12:11:45 2016 13 // Update Count : 8 14 14 // 15 15 … … 17 17 18 18 int main() { 19 ofstream *sout = ofstream_stdout();20 ifstream *sin = ifstream_stdin();21 19 sout | "Bonjour au monde!\n"; 22 20 } -
src/examples/identity.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:11:58201613 // Update Count : 812 // Last Modified On : Wed Feb 17 12:17:32 2016 13 // Update Count : 10 14 14 // 15 15 … … 22 22 23 23 int main() { 24 ofstream *sout = ofstream_stdout();25 24 sout | "char\t\t\t" | identity( 'z' ) | endl; 26 25 sout | "signed int\t\t" | identity( 4 ) | endl; … … 30 29 sout | "signed long long int\t" | identity( 4ll ) | endl; 31 30 sout | "unsigned long long int\t" | identity( 4ull ) | endl; 32 sout | "float\t\t\t" | identity( 4. 0f ) | endl;33 sout | "double\t\t\t" | identity( 4. 0) | endl;34 sout | "long double\t\t" | identity( 4. 0l ) | endl;31 sout | "float\t\t\t" | identity( 4.1f ) | endl; 32 sout | "double\t\t\t" | identity( 4.1 ) | endl; 33 sout | "long double\t\t" | identity( 4.1l ) | endl; 35 34 } 36 35 -
src/examples/minmax.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 3 11:14:49201613 // Update Count : 4 612 // Last Modified On : Wed Feb 17 12:17:53 2016 13 // Update Count : 47 14 14 // 15 15 … … 18 18 19 19 int main( void ) { 20 ofstream *sout = ofstream_stdout();21 20 // char does not have less or greater than. 22 21 int ?<?( char op1, char op2 ) { return (int)op1 < (int)op2; } -
src/examples/quad.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:13:48201613 // Update Count : 512 // Last Modified On : Wed Feb 17 12:19:24 2016 13 // Update Count : 6 14 14 // 15 15 … … 27 27 28 28 int main() { 29 ofstream *sout = ofstream_stdout();30 29 int N = 2; 31 30 sout | "result of quad of " | N | " is " | quad( N ) | endl; -
src/examples/quoted_keyword.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:13:58201613 // Update Count : 812 // Last Modified On : Wed Feb 17 12:19:45 2016 13 // Update Count : 9 14 14 // 15 15 … … 28 28 29 29 int main() { 30 ofstream *sout = ofstream_stdout();31 30 sout | `catch` + st.`type` + st.`struct` + `throw` | endl; 32 31 } -
src/examples/random.c
r52f85e0 r6ba0659 7 7 8 8 int main() { 9 ofstream *sout = ofstream_stdout();10 11 9 randseed( getpid() ); // set random seed 12 10 -
src/examples/square.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:14:16201613 // Update Count : 2 512 // Last Modified On : Wed Feb 17 12:21:58 2016 13 // Update Count : 26 14 14 // 15 15 … … 23 23 int main() { 24 24 #if 0 25 ofstream *sout = ofstream_stdout();26 25 sout | "result of squaring 9 is " | endl; 27 26 -
src/examples/sum.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Sat Feb 6 11:57:42201613 // Update Count : 18 212 // Last Modified On : Tue Feb 16 23:49:31 2016 13 // Update Count : 189 14 14 // 15 15 … … 41 41 int main( void ) { 42 42 const int low = 5, High = 15, size = High - low; 43 ofstream *sout = ofstream_stdout();44 43 45 44 char s = 0, a[size], v = low; -
src/examples/swap.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 3 11:14:04201613 // Update Count : 6 312 // Last Modified On : Wed Feb 17 12:22:12 2016 13 // Update Count : 64 14 14 // 15 15 … … 18 18 19 19 int main( void ) { 20 ofstream *sout = ofstream_stdout();21 22 20 char c1 = 'a', c2 = 'b'; 23 21 sout | "char\t\t\t" | c1 | ' ' | c2 | "\t\t\tswap "; -
src/examples/twice.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:14:44201613 // Update Count : 1 212 // Last Modified On : Wed Feb 17 12:23:25 2016 13 // Update Count : 13 14 14 // 15 15 … … 27 27 char ?++( char *op ) { char temp = *op; *op += 1; return temp; } 28 28 29 ofstream *sout = ofstream_stdout();30 29 sout | twice( 'a' ) | ' ' | twice( 1 ) | ' ' | twice( 3.2 ) | endl; 31 30 } -
src/examples/vector_test.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:14:52201613 // Update Count : 1 712 // Last Modified On : Wed Feb 17 12:23:55 2016 13 // Update Count : 18 14 14 // 15 15 … … 20 20 21 21 int main( void ) { 22 ofstream *sout = ofstream_stdout();23 ifstream *sin = ifstream_stdin();24 22 vector_int vec = vector_int_allocate(); 25 23 -
src/libcfa/fstream
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Jan 27 23:47:41 201613 // Update Count : 312 // Last Modified On : Wed Feb 17 14:02:01 2016 13 // Update Count : 22 14 14 // 15 15 … … 19 19 #include "iostream" 20 20 21 typedef struct ofstream ofstream; 21 // implement context ostream 22 struct ofstream; 22 23 23 // implement context ostream 24 ofstream *write( ofstream *, const char *, streamsize_type ); 25 int fail( ofstream * ); 24 int fail( ofstream * os ); 25 int flush( ofstream * os ); 26 void open( ofstream ** os, const char * name, const char * mode ); 27 void close( ofstream * os ); 28 ofstream * write( ofstream * os, const char * data, streamsize_type size ); 26 29 27 ofstream *ofstream_stdout(); 28 ofstream *ofstream_stderr(); 29 ofstream *ofstream_fromfile( const char *name ); 30 void ofstream_close( ofstream *os ); 31 32 typedef struct ifstream ifstream; 30 extern ofstream * sout, * serr; 33 31 34 32 // implement context istream 35 ifstream *read( ifstream *, char *, streamsize_type ); 36 ifstream *unread( ifstream *, char ); 37 int fail( ifstream * ); 38 int eof( ifstream * ); 33 struct ifstream; 39 34 40 ifstream *ifstream_stdin(); 41 ifstream *ifstream_fromfile( const char *name ); 35 int fail( ifstream * is ); 36 int eof( ifstream * is ); 37 void open( ifstream ** is, const char * name, const char * mode ); 38 void close( ifstream * is ); 39 ifstream * get( ifstream * is, int * data ); 40 ifstream * read( ifstream * is, char * data, streamsize_type size ); 41 ifstream * ungetc( ifstream * is, char c ); 42 43 extern ifstream *sin; 42 44 43 45 #endif // __FSTREAM_H__ -
src/libcfa/fstream.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Tue Jan 26 17:12:59201613 // Update Count : 612 // Last Modified On : Wed Feb 17 14:03:05 2016 13 // Update Count : 76 14 14 // 15 15 … … 23 23 struct ofstream { 24 24 FILE *file; 25 int fail;26 25 }; 27 26 28 ofstream *write( ofstream *os, const char *data, streamsize_type size ) { 29 if ( ! os->fail ) { 30 fwrite( data, size, 1, os->file ); 31 os->fail = ferror( os->file ); 27 #define IO_MSG "I/O error " 28 29 int fail( ofstream * os ) { 30 return ferror( os->file ); 31 } // fail 32 33 int flush( ofstream * os ) { 34 return fflush( os->file ); 35 } // flush 36 37 void open( ofstream ** os, const char * name, const char * mode ) { 38 FILE *t = fopen( name, mode ); 39 if ( t == 0 ) { // do not change unless successful 40 perror( IO_MSG "open output" ); 41 exit( EXIT_FAILURE ); 42 } // if 43 (*os)->file = t; 44 } // open 45 46 void close( ofstream * os ) { 47 if ( os->file == stdout || os->file == stderr ) return; 48 49 if ( fclose( os->file ) == EOF ) { 50 perror( IO_MSG "close output" ); 51 } // if 52 } // close 53 54 ofstream * write( ofstream * os, const char * data, streamsize_type size ) { 55 if ( fail( os ) ) { 56 fprintf( stderr, "attempt write I/O on failed stream\n" ); 57 exit( EXIT_FAILURE ); 58 } // if 59 60 if ( fwrite( data, 1, size, os->file ) != size ) { 61 perror( IO_MSG "write" ); 62 exit( EXIT_FAILURE ); 32 63 } // if 33 64 return os; 34 65 } // write 35 66 36 int fail( ofstream *os ) { 37 return os->fail; 38 } // fail 67 static ofstream soutFile = { (FILE *)(&_IO_2_1_stdout_) }; 68 ofstream *sout = &soutFile; 69 static ofstream serrFile = { (FILE *)(&_IO_2_1_stderr_) }; 70 ofstream *serr = &serrFile; 39 71 40 static ofstream *make_ofstream() { 41 ofstream *new_stream = malloc( sizeof( ofstream ) ); 42 new_stream->fail = 0; 43 return new_stream; 44 } // make_ofstream 45 46 ofstream *ofstream_stdout() { 47 ofstream *stdout_stream = make_ofstream(); 48 stdout_stream->file = stdout; 49 return stdout_stream; 50 } // ofstream_stdout 51 52 ofstream *ofstream_stderr() { 53 ofstream *stderr_stream = make_ofstream(); 54 stderr_stream->file = stderr; 55 return stderr_stream; 56 } // ofstream_stderr 57 58 ofstream *ofstream_fromfile( const char *name ) { 59 ofstream *file_stream = make_ofstream(); 60 file_stream->file = fopen( name, "w" ); 61 file_stream->fail = file_stream->file == 0; 62 return file_stream; 63 } 64 65 void ofstream_close( ofstream *os ) { 66 if ( os->file != stdout && os->file != stderr ) { 67 os->fail = fclose( os->file ); 68 } 69 free( os ); 70 } 72 //--------------------------------------- 71 73 72 74 struct ifstream { 73 75 FILE *file; 74 int fail;75 int eof;76 76 }; 77 77 78 ifstream *read( ifstream *is, char *data, streamsize_type size ) { 79 if ( ! is->fail && ! is->eof ) { 80 fread( data, size, 1, is->file ); 81 is->fail = ferror( is->file ); 82 is->eof = feof( is->file ); 83 } 78 int fail( ifstream * is ) { 79 return ferror( is->file ); 80 } // fail 81 82 int eof( ifstream * is ) { 83 return feof( is->file ); 84 } // eof 85 86 ifstream * get( ifstream * is, int * data ) { 87 if ( fscanf( is->file, "%d", data ) == EOF ) { 88 if ( ferror( is->file ) ) { 89 fprintf( stderr, "invalid int read\n" ); 90 exit( EXIT_FAILURE ); 91 } // if 92 } // if 84 93 return is; 85 } 94 } // read 95 96 ifstream * read( ifstream * is, char * data, streamsize_type size ) { 97 if ( fail( is ) ) { 98 fprintf( stderr, "attempt read I/O on failed stream\n" ); 99 exit( EXIT_FAILURE ); 100 } // if 101 102 if ( fread( data, size, 1, is->file ) == 0 ) { 103 perror( IO_MSG "read" ); 104 exit( EXIT_FAILURE ); 105 } // if 106 return is; 107 } // read 86 108 87 ifstream *unread( ifstream *is, char c ) { 88 if ( ! is->fail ) { 89 if ( ! EOF == ungetc( c, is->file ) ) { 90 is->fail = 1; 91 } 92 } 109 ifstream *ungetc( ifstream * is, char c ) { 110 if ( fail( is ) ) { 111 fprintf( stderr, "attempt ungetc I/O on failed stream\n" ); 112 exit( EXIT_FAILURE ); 113 } // if 114 115 if ( ungetc( c, is->file ) == EOF ) { 116 perror( IO_MSG "ungetc" ); 117 exit( EXIT_FAILURE ); 118 } // if 93 119 return is; 94 } 120 } // ungetc 95 121 96 int fail( ifstream *is ) { 97 return is->fail; 98 } 122 void open( ifstream ** is, const char * name, const char * mode ) { 123 FILE *t = fopen( name, mode ); 124 if ( t == 0 ) { // do not change unless successful 125 perror( IO_MSG "open input" ); 126 exit( EXIT_FAILURE ); 127 } // if 128 (*is)->file = t; 129 } // open 99 130 100 int eof( ifstream *is ) { 101 return is->eof; 102 } 131 void close( ifstream * is ) { 132 if ( is->file == stdin ) return; 103 133 104 static ifstream *make_ifstream() { 105 ifstream *new_stream = malloc( sizeof( ifstream ) ); 106 new_stream->fail = 0; 107 new_stream->eof = 0; 108 return new_stream; 109 } 134 if ( fclose( is->file ) == EOF ) { 135 perror( IO_MSG "close input" ); 136 } // if 137 } // close 110 138 111 ifstream *ifstream_stdin() { 112 ifstream *stdin_stream = make_ifstream(); 113 stdin_stream->file = stdin; 114 return stdin_stream; 115 } 116 117 ifstream *ifstream_fromfile( const char *name ) { 118 ifstream *file_stream = make_ifstream(); 119 file_stream->file = fopen( name, "r" ); 120 file_stream->fail = file_stream->file == 0; 121 return file_stream; 122 } 139 static ifstream sinFile = { (FILE *)(&_IO_2_1_stdin_) }; 140 ifstream *sin = &sinFile; 123 141 124 142 // Local Variables: // -
src/libcfa/iostream
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Fri Jan 29 15:50:36201613 // Update Count : 2912 // Last Modified On : Wed Feb 17 14:04:24 2016 13 // Update Count : 32 14 14 // 15 15 … … 22 22 23 23 context ostream( dtype ostype ) { 24 ostype *write( ostype *, const char *, streamsize_type );25 24 int fail( ostype * ); 25 int flush( ostype * ); 26 ostype * write( ostype *, const char *, streamsize_type ); 26 27 }; 27 28 28 context writeable( type T ) { 29 29 forall( dtype ostype | ostream( ostype ) ) ostype * ?|?( ostype *, T ); … … 52 52 53 53 // writes the range [begin, end) to the given stream 54 forall( type elt_type | writeable( elt_type ), 55 type iterator_type | iterator( iterator_type, elt_type ), 56 dtype os_type | ostream( os_type ) ) 54 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 57 55 void write( iterator_type begin, iterator_type end, os_type *os ); 58 56 59 forall( type elt_type | writeable( elt_type ), 60 type iterator_type | iterator( iterator_type, elt_type ), 61 dtype os_type | ostream( os_type ) ) 57 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), dtype os_type | ostream( os_type ) ) 62 58 void write_reverse( iterator_type begin, iterator_type end, os_type *os ); 63 59 64 // ******************************************************************************60 //--------------------------------------- 65 61 66 62 context istream( dtype istype ) { 67 istype *read( istype *, char *, streamsize_type );68 istype *unread( istype *, char );69 63 int fail( istype * ); 70 64 int eof( istype * ); 65 istype * get( istype *, int * ); 66 istype * read( istype *, char *, streamsize_type ); 67 istype * ungetc( istype *, char ); 71 68 }; 72 69 -
src/libcfa/iostream.c
r52f85e0 r6ba0659 10 10 // Created On : Wed May 27 17:56:53 2015 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Wed Feb 1 0 15:48:46 201613 // Update Count : 6612 // Last Modified On : Wed Feb 17 14:19:56 2016 13 // Update Count : 76 14 14 // 15 15 … … 111 111 forall( dtype ostype, dtype retostype | ostream( ostype ) | ostream( retostype ) ) 112 112 retostype * ?|?( ostype *os, retostype * (*manip)(ostype*) ) { 113 return manip( os);113 return manip( os ); 114 114 } 115 115 116 116 forall( dtype ostype | ostream( ostype ) ) 117 117 ostype * endl( ostype * os ) { 118 119 // flush 120 118 os | "\n"; 119 flush( os ); 120 return os; 121 121 } // endl 122 122 123 forall( type elt_type | writeable( elt_type ), 124 type iterator_type | iterator( iterator_type, elt_type ), 123 //--------------------------------------- 124 125 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 125 126 dtype os_type | ostream( os_type ) ) 126 127 void write( iterator_type begin, iterator_type end, os_type *os ) { 127 void print( elt_type i ) { 128 os | i | ' '; 129 } 128 void print( elt_type i ) { os | i | ' '; } 130 129 for_each( begin, end, print ); 131 130 } // ?|? 132 131 133 forall( type elt_type | writeable( elt_type ), 134 type iterator_type | iterator( iterator_type, elt_type ), 132 forall( type elt_type | writeable( elt_type ), type iterator_type | iterator( iterator_type, elt_type ), 135 133 dtype os_type | ostream( os_type ) ) 136 134 void write_reverse( iterator_type begin, iterator_type end, os_type *os ) { … … 139 137 } // ?|? 140 138 139 //--------------------------------------- 141 140 142 141 forall( dtype istype | istream( istype ) ) … … 147 146 forall( dtype istype | istream( istype ) ) 148 147 istype * ?|?( istype *is, int *ip ) { 149 char cur; 150 151 // skip some whitespace 152 do { 153 is | &cur; 154 if ( fail( is ) || eof( is ) ) return is; 155 } while ( !( cur >= '0' && cur <= '9' ) ); 156 157 // accumulate digits 158 *ip = 0; 159 while ( cur >= '0' && cur <= '9' ) { 160 *ip = *ip * 10 + ( cur - '0' ); 161 is | &cur; 162 if ( fail( is ) || eof( is ) ) return is; 163 } 164 165 unread( is, cur ); 166 return is; 148 return get( is, ip ); 167 149 } // ?|? 168 150
Note: See TracChangeset
for help on using the changeset viewer.