Major refactoring, all tests still pass

Bignum issues not yet folly resolved.
This commit is contained in:
Simon Brooke 2019-01-05 11:42:17 +00:00
parent 396e214b5f
commit d624c671cd
6 changed files with 96 additions and 99 deletions

View file

@ -744,7 +744,7 @@ lisp_read( struct stack_frame *frame, struct cons_pointer frame_pointer,
frame->arg[0] : get_default_stream( true, env );
if ( readp( in_stream ) ) {
debug_print( L"lisp_print: setting input stream\n", DEBUG_IO );
debug_print( L"lisp_read: setting input stream\n", DEBUG_IO );
debug_dump_object( in_stream, DEBUG_IO );
input = pointer2cell( in_stream ).payload.stream.stream;
inc_ref( in_stream );
@ -1124,3 +1124,31 @@ struct cons_pointer lisp_source( struct stack_frame *frame,
return result;
}
/**
* Print the internal representation of the object indicated by `frame->arg[0]` to the
* (optional, defaults to `stdout`) stream indicated by `frame->arg[1]`.
*/
struct cons_pointer lisp_inspect( struct stack_frame *frame, struct cons_pointer frame_pointer,
struct cons_pointer env ) {
debug_print( L"Entering print\n", DEBUG_IO );
struct cons_pointer result = frame->arg[0];
FILE *output = stdout;
struct cons_pointer out_stream = writep( frame->arg[1] ) ?
frame->arg[1] : get_default_stream( false, env );
if ( writep( out_stream ) ) {
debug_print( L"lisp_print: setting output stream\n", DEBUG_IO );
debug_dump_object( out_stream, DEBUG_IO );
output = pointer2cell( out_stream ).payload.stream.stream;
inc_ref( out_stream );
}
dump_object( output, frame->arg[0] );
if ( writep( out_stream ) ) {
dec_ref( out_stream );
}
return result;
}

View file

@ -201,3 +201,6 @@ lisp_exception( struct stack_frame *frame, struct cons_pointer frame_pointer,
struct cons_pointer lisp_source( struct stack_frame *frame,
struct cons_pointer frame_pointer,
struct cons_pointer env );
struct cons_pointer lisp_inspect( struct stack_frame *frame, struct cons_pointer frame_pointer,
struct cons_pointer env );