--- stack/symbols.c 2003/08/11 14:31:48 1.6 +++ stack/symbols.c 2003/08/12 07:15:29 1.7 @@ -1038,8 +1038,6 @@ usleep(dur); } -/// XXXXXX - /* "*" */ extern void sx_2a(environment *env) @@ -1047,14 +1045,12 @@ int a, b; float fa, fb; - if(env->head->type==empty || CDR(env->head)->type==empty) { + if(check_args(env, unknown, unknown, empty)==1) { printerr(env, "Too Few Arguments"); - env->err= 1; return; } - - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==integer) { + + if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1064,8 +1060,7 @@ return; } - if(CAR(env->head)->type==tfloat - && CAR(CDR(env->head))->type==tfloat) { + if(check_args(env, tfloat, tfloat, empty)==0) { fa= CAR(env->head)->content.f; toss(env); if(env->err) return; fb= CAR(env->head)->content.f; @@ -1075,8 +1070,7 @@ return; } - if(CAR(env->head)->type==tfloat - && CAR(CDR(env->head))->type==integer) { + if(check_args(env, tfloat, integer, empty)==0) { fa= CAR(env->head)->content.f; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1086,8 +1080,7 @@ return; } - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==tfloat) { + if(check_args(env, integer, tfloat, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; fb= CAR(env->head)->content.f; @@ -1107,14 +1100,12 @@ int a, b; float fa, fb; - if(env->head->type==empty || CDR(env->head)->type==empty) { + if(check_args(env, unknown, unknown, empty)==1) { printerr(env, "Too Few Arguments"); - env->err= 1; return; } - - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==integer) { + + if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1124,8 +1115,7 @@ return; } - if(CAR(env->head)->type==tfloat - && CAR(CDR(env->head))->type==tfloat) { + if(check_args(env, tfloat, tfloat, empty)==0) { fa= CAR(env->head)->content.f; toss(env); if(env->err) return; fb= CAR(env->head)->content.f; @@ -1135,8 +1125,7 @@ return; } - if(CAR(env->head)->type==tfloat - && CAR(CDR(env->head))->type==integer) { + if(check_args(env, tfloat, integer, empty)==0) { fa= CAR(env->head)->content.f; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1146,8 +1135,7 @@ return; } - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==tfloat) { + if(check_args(env, integer, tfloat, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; fb= CAR(env->head)->content.f; @@ -1166,14 +1154,12 @@ { int a, b; - if(env->head->type==empty || CDR(env->head)->type==empty) { + if(check_args(env, unknown, unknown, empty)==1) { printerr(env, "Too Few Arguments"); - env->err= 1; return; } - - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==integer) { + + if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1191,15 +1177,13 @@ extern void sx_646976(environment *env) { int a, b; - - if(env->head->type==empty || CDR(env->head)->type==empty) { + + if(check_args(env, unknown, unknown, empty)==1) { printerr(env, "Too Few Arguments"); - env->err= 1; return; } - - if(CAR(env->head)->type==integer - && CAR(CDR(env->head))->type==integer) { + + if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; toss(env); if(env->err) return; b= CAR(env->head)->content.i; @@ -1213,18 +1197,19 @@ env->err= 2; } + extern void setcar(environment *env) { - if(env->head->type==empty || CDR(env->head)->type==empty) { + + switch(check_args(env, tcons, unknown, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CDR(env->head)->type!=tcons) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } CAR(CAR(CDR(env->head)))=CAR(env->head); @@ -1233,16 +1218,16 @@ extern void setcdr(environment *env) { - if(env->head->type==empty || CDR(env->head)->type==empty) { + + switch(check_args(env, tcons, unknown, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CDR(env->head)->type!=tcons) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } CDR(CAR(CDR(env->head)))=CAR(env->head); @@ -1251,16 +1236,16 @@ extern void car(environment *env) { - if(env->head->type==empty) { + + switch(check_args(env, tcons, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CAR(env->head)->type!=tcons) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } CAR(env->head)=CAR(CAR(env->head)); @@ -1268,16 +1253,16 @@ extern void cdr(environment *env) { - if(env->head->type==empty) { + + switch(check_args(env, tcons, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CAR(env->head)->type!=tcons) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } CAR(env->head)=CDR(CAR(env->head)); @@ -1287,10 +1272,15 @@ { value *val; - if(env->head->type==empty || CDR(env->head)->type==empty) { + switch(check_args(env, unknown, unknown, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; + case 2: + printerr(env, "Bad Argument Type"); + return; + default: + break; } val=new_val(env); @@ -1319,16 +1309,15 @@ /* Needs two values on the stack, the top one must be an association list */ - if(env->head->type==empty || CDR(env->head)->type==empty) { + switch(check_args(env, tcons, unknown, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CAR(env->head)->type!=tcons) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } key=CAR(CDR(env->head)); @@ -1406,17 +1395,15 @@ value *new_port; FILE *stream; - if(env->head->type == empty || CDR(env->head)->type == empty) { + switch(check_args(env, string, string, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err=1; return; - } - - if(CAR(env->head)->type != string - || CAR(CDR(env->head))->type != string) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } stream=fopen(CAR(CDR(env->head))->content.ptr, @@ -1446,16 +1433,15 @@ { int ret; - if(env->head->type == empty) { + switch(check_args(env, port, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err=1; return; - } - - if(CAR(env->head)->type != port) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } ret= fclose(CAR(env->head)->content.p); @@ -1469,20 +1455,20 @@ toss(env); } + extern void mangle(environment *env) { char *new_string; - if(env->head->type==empty) { + switch(check_args(env, string, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CAR(env->head)->type!=string) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } new_string= mangle_str(CAR(env->head)->content.string); @@ -1503,16 +1489,15 @@ extern void sx_77616974706964(environment *env) { - if(env->head->type==empty) { + switch(check_args(env, integer, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; - } - - if(CAR(env->head)->type!=integer) { + case 2: printerr(env, "Bad Argument Type"); - env->err= 2; return; + default: + break; } push_int(env, waitpid(CAR(env->head)->content.i, NULL, 0)); @@ -1523,12 +1508,18 @@ /* Discard the top element of the stack. */ extern void toss(environment *env) { - if(env->head->type==empty) { + + switch(check_args(env, unknown, empty)) { + case 1: printerr(env, "Too Few Arguments"); - env->err= 1; return; + case 2: + printerr(env, "Bad Argument Type"); + return; + default: + break; } - + env->head= CDR(env->head); /* Remove the top stack item */ }