--- stack/stack.c 2002/02/06 23:27:22 1.43 +++ stack/stack.c 2002/02/07 01:01:02 1.44 @@ -428,6 +428,9 @@ extern void eval(environment *env) { funcp in_func; + value* temp_val; + stackitem* iterator; + if(env->head==NULL) { printerr("Too Few Arguments"); env->err=1; @@ -451,10 +454,31 @@ toss(env); if(env->err) return; (*in_func)(env); + return; + } + + /* If it's a list */ + if(env->head->item->type==list) { + temp_val= env->head->item; + env->head->item->refcount++; + toss(env); + if(env->err) return; + iterator= (stackitem*)temp_val->content.ptr; + while(iterator!=NULL && iterator->item!=NULL) { + push_val(&(env->head), iterator->item); + if(env->head->item->type==symb + && strcmp(";", ((symbol*)(env->head->item->content.ptr))->id)==0) { + toss(env); + if(env->err) return; + eval(env); + } + iterator= iterator->next; + } + free_val(temp_val); } } -/* Reverse a list */ +/* Reverse (flip) a list */ extern void rev(environment *env){ stackitem *old_head, *new_head, *item;