Very close to a basic REPL now.

This commit is contained in:
Simon Brooke 2026-04-16 22:28:35 +01:00
parent 83537391a6
commit 4efe9eab87
23 changed files with 188 additions and 84 deletions

View file

@ -72,7 +72,7 @@ print_list_contents( URL_FILE *output, struct cons_pointer pointer,
if ( initial_space ) {
url_fputwc( btowc( ' ' ), output );
}
print( output, cell->payload.cons.car );
c_print( output, cell->payload.cons.car );
print_list_contents( output, cell->payload.cons.cdr, true );
break;
@ -80,7 +80,7 @@ print_list_contents( URL_FILE *output, struct cons_pointer pointer,
break;
default:
url_fwprintf( output, L" . " );
print( output, pointer );
c_print( output, pointer );
}
}
@ -99,9 +99,9 @@ void print_map( URL_FILE *output, struct cons_pointer map ) {
for ( struct cons_pointer ks = hashmap_keys( map ); !nilp( ks );
ks = c_cdr( ks ) ) {
struct cons_pointer key = c_car( ks );
print( output, key );
c_print( output, key );
url_fputwc( btowc( ' ' ), output );
print( output, hashmap_get( map, key, false ) );
c_print( output, hashmap_get( map, key, false ) );
if ( !nilp( c_cdr( ks ) ) ) {
url_fputws( L", ", output );
@ -153,7 +153,7 @@ void print_128bit( URL_FILE *output, __int128_t n ) {
* Print the cons-space object indicated by `pointer` to the stream indicated
* by `output`.
*/
struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
struct cons_pointer c_print( URL_FILE *output, struct cons_pointer pointer ) {
struct cons_space_object cell = pointer2cell( pointer );
char *buffer;
@ -171,7 +171,7 @@ struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
break;
case FUNCTIONTV:
url_fputws( L"<Function: ", output );
print( output, cell.payload.function.meta );
c_print( output, cell.payload.function.meta );
url_fputwc( L'>', output );
break;
case INTEGERTV:
@ -190,7 +190,7 @@ struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
make_cons( cell.payload.lambda.args,
cell.payload.lambda.body ) );
print( output, to_print );
c_print( output, to_print );
dec_ref( to_print );
url_fputwc( L'>', output );
@ -206,20 +206,20 @@ struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
make_cons( cell.payload.lambda.args,
cell.payload.lambda.body ) );
print( output, to_print );
c_print( output, to_print );
dec_ref( to_print );
url_fputwc( L'>', output );
}
break;
case RATIOTV:
print( output, cell.payload.ratio.dividend );
c_print( output, cell.payload.ratio.dividend );
url_fputws( L"/", output );
print( output, cell.payload.ratio.divisor );
c_print( output, cell.payload.ratio.divisor );
break;
case READTV:
url_fwprintf( output, L"<Input stream: " );
print( output, cell.payload.stream.meta );
c_print( output, cell.payload.stream.meta );
url_fputwc( L'>', output );
break;
case REALTV:
@ -246,7 +246,7 @@ struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
break;
case SPECIALTV:
url_fwprintf( output, L"<Special form: " );
print( output, cell.payload.special.meta );
c_print( output, cell.payload.special.meta );
url_fputwc( L'>', output );
break;
case TIMETV:
@ -264,7 +264,7 @@ struct cons_pointer print( URL_FILE *output, struct cons_pointer pointer ) {
break;
case WRITETV:
url_fwprintf( output, L"<Output stream: " );
print( output, cell.payload.stream.meta );
c_print( output, cell.payload.stream.meta );
url_fputwc( L'>', output );
break;
default:
@ -312,7 +312,7 @@ lisp_print( struct stack_frame *frame, struct cons_pointer frame_pointer,
debug_print( L"lisp_print: about to print\n", DEBUG_IO );
debug_dump_object( frame->arg[0], DEBUG_IO );
result = print( output, frame->arg[0] );
result = c_print( output, frame->arg[0] );
debug_print( L"lisp_print returning\n", DEBUG_IO );
debug_dump_object( result, DEBUG_IO );