--- stack/stack.c 2002/02/08 03:45:00 1.58 +++ stack/stack.c 2002/02/08 04:58:23 1.59 @@ -347,9 +347,6 @@ case list: push_sym(env, "list"); break; - default: - push_sym(env, "unknown"); - break; } } @@ -380,9 +377,6 @@ } printf("]"); break; - default: - printf("#", (stack_head->item->content.ptr)); - break; } } @@ -508,18 +502,16 @@ rcl(env); /* get its contents */ if(env->err) return; if(env->head->item->type!=symb){ /* don't recurse symbols */ - eval(env); /* evaluate the value */ - return; + return eval(env); /* evaluate the value */ } - break; + return; /* If it's a lone function value, run it */ case func: in_func= (funcp)(env->head->item->content.ptr); toss(env); if(env->err) return; - (*in_func)(env); - break; + return (*in_func)(env); /* If it's a list */ case list: @@ -528,19 +520,23 @@ toss(env); if(env->err) return; iterator= (stackitem*)temp_val->content.ptr; - while(iterator!=NULL && iterator->item!=NULL) { + while(iterator!=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; + if(iterator->next == NULL){ + free_val(temp_val); + return eval(env); + } eval(env); if(env->err) return; } iterator= iterator->next; } free_val(temp_val); - break; + return; /* If it's a string */ case string: @@ -550,17 +546,15 @@ if(env->err) return; temp_string= malloc(strlen((char*)temp_val->content.ptr)+5); strcpy(temp_string, "[ "); - strcat(temp_string, (char*)temp_val->content.ptr); + strcpy(temp_string+2, (char*)temp_val->content.ptr); + free_val(temp_val); strcat(temp_string, " ]"); stack_read(env, temp_string); - eval(env); - if(env->err) return; - free_val(temp_val); free(temp_string); - break; + return eval(env); case integer: - break; + return; } } @@ -1022,7 +1016,7 @@ push_val(&(env->head), copy_val(env->head->item)); } -/* If-Then */ +/* "if", If-Then */ extern void sx_6966(environment *env) { int truth;