Major refactoring. Major problems!
On the right path but it doesn't work yet.
This commit is contained in:
parent
ae8ba67ed7
commit
9937f344dc
20 changed files with 695 additions and 506 deletions
58
src/repl.c
58
src/repl.c
|
|
@ -31,44 +31,64 @@
|
|||
* Dummy up a Lisp read call with its own stack frame.
|
||||
*/
|
||||
struct cons_pointer repl_read( struct cons_pointer stream_pointer ) {
|
||||
struct stack_frame *frame = make_empty_frame( NULL, oblist );
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
if (!nilp(frame_pointer)) {
|
||||
inc_ref(frame_pointer);
|
||||
struct stack_frame *frame = get_stack_frame(frame_pointer);
|
||||
|
||||
set_reg( frame, 0, stream_pointer );
|
||||
struct cons_pointer result = lisp_read( frame, oblist );
|
||||
free_stack_frame( frame );
|
||||
if (frame != NULL){
|
||||
|
||||
return result;
|
||||
set_reg( frame, 0, stream_pointer );
|
||||
struct cons_pointer result = lisp_read( frame, frame_pointer, oblist );
|
||||
}
|
||||
dec_ref(frame_pointer);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy up a Lisp eval call with its own stack frame.
|
||||
*/
|
||||
struct cons_pointer repl_eval( struct cons_pointer input ) {
|
||||
struct stack_frame *frame = make_empty_frame( NULL, oblist );
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
if (!nilp(frame_pointer)) {
|
||||
inc_ref(frame_pointer);
|
||||
struct stack_frame *frame = get_stack_frame(frame_pointer);
|
||||
|
||||
set_reg( frame, 0, input );
|
||||
struct cons_pointer result = lisp_eval( frame, oblist );
|
||||
|
||||
if ( !exceptionp( result ) ) {
|
||||
free_stack_frame( frame );
|
||||
if (frame != NULL){
|
||||
set_reg( frame, 0, input );
|
||||
result = lisp_eval( frame, frame_pointer, oblist );
|
||||
}
|
||||
|
||||
return result;
|
||||
dec_ref(frame_pointer);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Dummy up a Lisp print call with its own stack frame.
|
||||
*/
|
||||
struct cons_pointer repl_print( struct cons_pointer stream_pointer,
|
||||
struct cons_pointer value ) {
|
||||
struct stack_frame *frame = make_empty_frame( NULL, oblist );
|
||||
struct cons_pointer value ) {
|
||||
struct cons_pointer result = NIL;
|
||||
struct cons_pointer frame_pointer = make_empty_frame( NIL );
|
||||
if (!nilp(frame_pointer)) {
|
||||
struct stack_frame *frame = get_stack_frame(frame_pointer);
|
||||
|
||||
set_reg( frame, 0, value );
|
||||
set_reg( frame, 1, stream_pointer );
|
||||
struct cons_pointer result = lisp_print( frame, oblist );
|
||||
free_stack_frame( frame );
|
||||
if (frame != NULL){
|
||||
set_reg( frame, 0, value );
|
||||
set_reg( frame, 1, stream_pointer );
|
||||
result = lisp_print( frame, frame_pointer, oblist );
|
||||
free_stack_frame( frame );
|
||||
}
|
||||
dec_ref(frame_pointer);
|
||||
}
|
||||
|
||||
return result;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue