Changeset ac4dad2 for doc/papers/general/evaluation/c-print.c
- Timestamp:
- Apr 28, 2018, 9:20:28 AM (7 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, with_gc
- Children:
- 6926a6d
- Parents:
- aa5fdac
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
doc/papers/general/evaluation/c-print.c
raa5fdac rac4dad2 4 4 #include "c-print.h" 5 5 6 void print_string( FILE* out, const char* x) { fprintf(out, "%s", x); }6 void print_string( FILE * out, const char * x ) { fprintf( out, "%s", x ); } 7 7 8 void print_bool( FILE* out, _Bool x) { fprintf(out, "%s", x ? "true" : "false"); }8 void print_bool( FILE * out, _Bool x ) { fprintf( out, "%s", x ? "true" : "false" ); } 9 9 10 void print_char( FILE* out, char x) {11 if ( 0x20 <= x && x <= 0x7E ) { fprintf( out, "'%c'", x); }12 else { fprintf( out, "'\\%x'", x); }10 void print_char( FILE * out, char x ) { 11 if ( 0x20 <= x && x <= 0x7E ) { fprintf( out, "'%c'", x ); } 12 else { fprintf( out, "'\\%x'", x ); } 13 13 } 14 14 15 void print_int( FILE* out, int x) { fprintf(out, "%d", x); }15 void print_int( FILE * out, int x ) { fprintf( out, "%d", x ); } 16 16 17 void print_fmt( FILE* out, char fmt, void* p) {17 void print_fmt( FILE * out, char fmt, void * p ) { 18 18 switch( fmt ) { 19 case 's': print_string( out, (const char*)p); break; /***/20 case 'b': print_bool( out, *(_Bool*)p); break; /***/21 case 'c': print_char( out, *(char*)p); break; /***/22 case 'd': print_int( out, *(int*)p); break; /***/19 case 's': print_string( out, (const char*)p ); break; /***/ 20 case 'b': print_bool( out, *(_Bool*)p ); break; /***/ 21 case 'c': print_char( out, *(char*)p ); break; /***/ 22 case 'd': print_int( out, *(int*)p ); break; /***/ 23 23 } 24 24 } 25 25 26 void print( FILE* out, const char* fmt, ...) {26 void print( FILE * out, const char * fmt, ... ) { 27 27 va_list args; 28 28 va_start(args, fmt); 29 for ( const char* it = fmt; *it; ++it) {29 for ( const char * it = fmt; *it; ++it ) { 30 30 switch( *it ) { 31 case 's': print_string( out, va_arg(args, const char*)); break; /***/32 case 'b': print_bool( out, va_arg(args, int)); break; /***/33 case 'c': print_char( out, va_arg(args, int)); break; /***/34 case 'd': print_int( out, va_arg(args, int)); break; /***/31 case 's': print_string( out, va_arg( args, const char * ) ); break; /***/ 32 case 'b': print_bool( out, va_arg( args, int ) ); break; /***/ 33 case 'c': print_char( out, va_arg( args, int ) ); break; /***/ 34 case 'd': print_int( out, va_arg( args, int ) ); break; /***/ 35 35 case 'p': { 36 const struct pair x = va_arg( args, const struct pair); /***/37 fprintf( out, "[");38 print_fmt( out, *++it, x.first); /***/39 fprintf( out, ", ");40 print_fmt( out, *++it, x.second); /***/41 fprintf( out, "]");36 const struct pair x = va_arg( args, const struct pair ); /***/ 37 fprintf( out, "[" ); 38 print_fmt( out, *++it, x.first ); /***/ 39 fprintf( out, ", " ); 40 print_fmt( out, *++it, x.second ); /***/ 41 fprintf( out, "]" ); 42 42 break; 43 43 } 44 44 } 45 45 } 46 va_end( args);46 va_end( args ); 47 47 }
Note: See TracChangeset
for help on using the changeset viewer.