Print is less badly broken. Read is less badly broken. GC is too aggressive.
This commit is contained in:
parent
22b0160a26
commit
63906fe817
19 changed files with 489 additions and 303 deletions
|
|
@ -72,10 +72,11 @@ void repl( struct pso_pointer frame_pointer ) {
|
|||
|
||||
while ( readp( input_stream ) &&
|
||||
!url_feof( stream_get_url_file( input_stream ) ) ) {
|
||||
if ( show_prompt )
|
||||
if ( show_prompt ) {
|
||||
princ( make_frame( 2, frame_pointer,
|
||||
c_assoc( lisp_io_prompt, env ),
|
||||
output_stream ) );
|
||||
}
|
||||
|
||||
/* the reason for initialising a new stack for each REPL input is to
|
||||
* be sure the old stack is fully torn down and reclaimed. Once I'm
|
||||
|
|
@ -86,13 +87,21 @@ void repl( struct pso_pointer frame_pointer ) {
|
|||
consp( oblist ) ? oblist :
|
||||
make_cons( nil, oblist, nil ) ) );
|
||||
|
||||
print( make_frame
|
||||
( 2, base_of_stack,
|
||||
eval( make_frame
|
||||
( 1, base_of_stack,
|
||||
read( make_frame
|
||||
( 1, base_of_stack, input_stream ) ) ) ),
|
||||
output_stream ) );
|
||||
struct pso_pointer next =
|
||||
inc_ref( make_frame( 1, base_of_stack, input_stream ) );
|
||||
struct pso_pointer read_value = inc_ref( read( next ) );
|
||||
dec_ref( next );
|
||||
|
||||
next = inc_ref( make_frame( 1, base_of_stack, read_value ) );
|
||||
struct pso_pointer eval_value = inc_ref( eval( next ) );
|
||||
dec_ref( next );
|
||||
dec_ref( read_value );
|
||||
|
||||
next =
|
||||
inc_ref( make_frame
|
||||
( 2, base_of_stack, eval_value, output_stream ) );
|
||||
print( next );
|
||||
dec_ref( next );
|
||||
|
||||
dec_ref( base_of_stack );
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue