--- stack/symbols.c 2003/08/13 06:12:26 1.8 +++ stack/symbols.c 2003/08/13 11:58:00 1.9 @@ -10,16 +10,8 @@ /* Print a newline to a port */ extern void nlport(environment *env) { - switch(check_args(env, port, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, empty)) + return printerr(env); if(fprintf(CAR(env->head)->content.p, "\n") < 0){ perror("nl"); @@ -33,16 +25,8 @@ extern void type(environment *env) { - switch(check_args(env, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, empty)) + return printerr(env); switch(CAR(env->head)->type){ case empty: @@ -82,16 +66,8 @@ extern void print_(environment *env) { - switch(check_args(env, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, empty)) + return printerr(env); print_val(env, CAR(env->head), 0, NULL, stdout); if(env->err) return; @@ -111,16 +87,8 @@ extern void princ_(environment *env) { - switch(check_args(env, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, empty)) + return printerr(env); print_val(env, CAR(env->head), 1, NULL, stdout); } @@ -137,16 +105,8 @@ extern void printport_(environment *env) { - switch(check_args(env, port, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, unknown, empty)) + return printerr(env); print_val(env, CAR(CDR(env->head)), 0, NULL, CAR(env->head)->content.p); if(env->err) return; @@ -165,16 +125,8 @@ extern void princport_(environment *env) { - switch(check_args(env, port, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, unknown, empty)) + return printerr(env); print_val(env, CAR(CDR(env->head)), 1, NULL, CAR(env->head)->content.p); toss(env); if(env->err) return; @@ -193,16 +145,8 @@ { value *temp= env->head; - switch(check_args(env, unknown, unknown, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, unknown, unknown, empty)) + return printerr(env); env->head= CDR(CDR(env->head)); CDR(CDR(temp))= CDR(env->head); @@ -214,16 +158,8 @@ { value *temp, *new_head; - switch(check_args(env, tcons, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, empty)) + return printerr(env); rev(env); @@ -241,9 +177,8 @@ if (CDR(temp)->type == tcons) temp= CDR(temp); else { - printerr(env, "Bad Argument Type"); /* Improper list */ - env->err= 2; - return; + env->err= 2; /* Improper list */ + return printerr(env); } } @@ -258,16 +193,8 @@ { void *left, *right; - switch(check_args(env, unknown, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); left= CAR(env->head)->content.ptr; right= CAR(CDR(env->head))->content.ptr; @@ -281,16 +208,8 @@ { int val; - switch(check_args(env, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, integer, empty)) + return printerr(env); val= CAR(env->head)->content.i; toss(env); @@ -310,16 +229,8 @@ symbol *sym; /* Needs two values on the stack, the top one must be a symbol */ - switch(check_args(env, symb, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, symb, unknown, empty)) + return printerr(env); /* long names are a pain */ sym= CAR(env->head)->content.sym; @@ -341,16 +252,8 @@ { char* sym_id; - switch(check_args(env, symb, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, symb, empty)) + return printerr(env); sym_id= CAR(env->head)->content.sym->id; toss(env); @@ -373,10 +276,8 @@ char* new_string; value *a_val, *b_val; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, string, string, empty)==0) { a_val= CAR(env->head); @@ -436,8 +337,7 @@ return; } - printerr(env, "Bad Argument Type"); - env->err=2; + return printerr(env); } /* "-" */ @@ -446,10 +346,8 @@ int a, b; float fa, fb; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; @@ -491,8 +389,7 @@ return; } - printerr(env, "Bad Argument Type"); - env->err=2; + return printerr(env); } /* ">" */ @@ -501,10 +398,8 @@ int a, b; float fa, fb; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; @@ -546,8 +441,7 @@ return; } - printerr(env, "Bad Argument Type"); - env->err= 2; + return printerr(env); } /* "<" */ @@ -574,16 +468,8 @@ /* "dup"; duplicates an item on the stack */ extern void sx_647570(environment *env) { - switch(check_args(env, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, empty)) + return printerr(env); push_val(env, copy_val(env, CAR(env->head))); } @@ -593,16 +479,8 @@ { int truth; - switch(check_args(env, unknown, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, integer, empty)) + return printerr(env); swap(env); if(env->err) return; @@ -623,16 +501,8 @@ { int truth; - switch(check_args(env, unknown, unknown, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, unknown, integer, empty)) + return printerr(env); rot(env); if(env->err) return; @@ -656,18 +526,8 @@ extern void sx_656c7365(environment *env) { - switch(check_args(env, - unknown, symb, unknown, symb, integer, - empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, symb, unknown, symb, integer, empty)) + return printerr(env); /// XXX @@ -675,9 +535,8 @@ || strcmp(CAR(CDR(env->head))->content.sym->id, "then")!=0 || CAR(CDR(CDR(CDR(env->head))))->type!=symb || strcmp(CAR(CDR(CDR(CDR(env->head))))->content.sym->id, "if")!=0) { - printerr(env, "Bad Argument Type"); env->err= 2; - return; + return printerr(env); } swap(env); toss(env); rot(env); toss(env); @@ -687,24 +546,15 @@ extern void then(environment *env) { - switch(check_args(env, unknown, symb, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, symb, integer, empty)) + return printerr(env); /// XXX if(CAR(CDR(env->head))->type!=symb || strcmp(CAR(CDR(env->head))->content.sym->id, "if")!=0) { - printerr(env, "Bad Argument Type"); env->err= 2; - return; + return printerr(env); } swap(env); toss(env); @@ -717,16 +567,8 @@ int truth; value *loop, *test; - switch(check_args(env, unknown, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, integer, empty)) + return printerr(env); loop= CAR(env->head); protect(loop); @@ -743,9 +585,8 @@ /// XXX if(CAR(env->head)->type != integer) { - printerr(env, "Bad Argument Type"); env->err= 2; - return; + return printerr(env); } truth= CAR(env->head)->content.i; @@ -770,16 +611,8 @@ value *loop; int foo1, foo2; - switch(check_args(env, unknown, integer, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, integer, integer, empty)) + return printerr(env); loop= CAR(env->head); protect(loop); @@ -816,16 +649,8 @@ value *loop, *foo; value *iterator; - switch(check_args(env, unknown, tcons, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, tcons, empty)) + return printerr(env); loop= CAR(env->head); protect(loop); @@ -846,12 +671,13 @@ if (iterator->type == tcons){ iterator= CDR(iterator); } else { - printerr(env, "Bad Argument Type"); /* Improper list */ - env->err= 2; + env->err= 2; /* Improper list */ break; } } unprotect(loop); unprotect(foo); + + return printerr(env); } /* "to" */ @@ -860,16 +686,8 @@ int ending, start, i; value *iterator, *temp, *end; - switch(check_args(env, integer, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, integer, integer, empty)) + return printerr(env); end= new_val(env); @@ -926,16 +744,8 @@ { FILE *stream; - switch(check_args(env, port, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, empty)) + return printerr(env); stream=CAR(env->head)->content.p; readlinestream(env, stream); if(env->err) return; @@ -955,16 +765,8 @@ { FILE *stream; - switch(check_args(env, port, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, empty)) + return printerr(env); stream=CAR(env->head)->content.p; readstream(env, stream); if(env->err) return; @@ -978,16 +780,8 @@ { int freq, dur, period, ticks; - switch(check_args(env, integer, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, integer, integer, empty)) + return printerr(env); dur= CAR(env->head)->content.i; toss(env); @@ -1021,16 +815,8 @@ { int dur; - switch(check_args(env, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, integer, empty)) + return printerr(env); dur= CAR(env->head)->content.i; toss(env); @@ -1045,10 +831,8 @@ int a, b; float fa, fb; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; @@ -1090,8 +874,7 @@ return; } - printerr(env, "Bad Argument Type"); - env->err= 2; + return printerr(env); } /* "/" */ @@ -1100,10 +883,8 @@ int a, b; float fa, fb; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; @@ -1145,8 +926,7 @@ return; } - printerr(env, "Bad Argument Type"); - env->err= 2; + return printerr(env); } /* "mod" */ @@ -1154,10 +934,8 @@ { int a, b; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); if(check_args(env, integer, integer, empty)==0) { a= CAR(env->head)->content.i; @@ -1169,48 +947,31 @@ return; } - printerr(env, "Bad Argument Type"); - env->err= 2; + return printerr(env); } + /* "div" */ extern void sx_646976(environment *env) { int a, b; - if(check_args(env, unknown, unknown, empty)==1) { - printerr(env, "Too Few Arguments"); - return; - } + if(check_args(env, integer, integer, empty)) + return printerr(env); - 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; - toss(env); if(env->err) return; - push_int(env, (int)b/a); - - return; - } - - printerr(env, "Bad Argument Type"); - env->err= 2; + a= CAR(env->head)->content.i; + toss(env); if(env->err) return; + b= CAR(env->head)->content.i; + toss(env); if(env->err) return; + push_int(env, (int)b/a); } extern void setcar(environment *env) { - switch(check_args(env, tcons, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, unknown, empty)) + return printerr(env); CAR(CAR(CDR(env->head)))=CAR(env->head); toss(env); @@ -1219,16 +980,8 @@ extern void setcdr(environment *env) { - switch(check_args(env, tcons, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, unknown, empty)) + return printerr(env); CDR(CAR(CDR(env->head)))=CAR(env->head); toss(env); @@ -1237,16 +990,8 @@ extern void car(environment *env) { - switch(check_args(env, tcons, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, empty)) + return printerr(env); CAR(env->head)=CAR(CAR(env->head)); } @@ -1254,16 +999,8 @@ extern void cdr(environment *env) { - switch(check_args(env, tcons, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, empty)) + return printerr(env); CAR(env->head)=CDR(CAR(env->head)); } @@ -1272,16 +1009,8 @@ { value *val; - switch(check_args(env, unknown, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, unknown, empty)) + return printerr(env); val=new_val(env); val->content.c= malloc(sizeof(pair)); @@ -1298,7 +1027,7 @@ swap(env); if(env->err) return; toss(env); if(env->err) return; swap(env); if(env->err) return; - toss(env); if(env->err) return; + toss(env); } @@ -1309,41 +1038,25 @@ /* Needs two values on the stack, the top one must be an association list */ - switch(check_args(env, tcons, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, tcons, unknown, empty)) + return printerr(env); key=CAR(CDR(env->head)); item=CAR(env->head); while(item->type == tcons){ if(CAR(item)->type != tcons){ - printerr(env, "Bad Argument Type"); env->err= 2; - return; + return printerr(env); } + push_val(env, key); push_val(env, CAR(CAR(item))); - eqfunc(env); if(env->err) return; + eqfunc((void*)env); if(env->err) return; /* Check the result of 'eqfunc' */ - if(env->head->type==empty) { - printerr(env, "Too Few Arguments"); - env->err= 1; - return; - } - if(CAR(env->head)->type!=integer) { - printerr(env, "Bad Argument Type"); - env->err= 2; - return; - } + if(check_args(env, integer, empty)) + return printerr(env); if(CAR(env->head)->content.i){ toss(env); if(env->err) return; @@ -1352,9 +1065,8 @@ toss(env); if(env->err) return; if(item->type!=tcons) { - printerr(env, "Bad Argument Type"); env->err= 2; - return; + return printerr(env); } item=CDR(item); @@ -1376,7 +1088,7 @@ /* 1: [ [ 1 . 2 ] [ 3 . 4 ] ] => 1: [ 3 . 4 ] */ extern void assq(environment *env) { - assocgen(env, eq); + assocgen(env, (void*)eq); } @@ -1395,16 +1107,8 @@ value *new_port; FILE *stream; - switch(check_args(env, string, string, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, string, string, empty)) + return printerr(env); stream=fopen(CAR(CDR(env->head))->content.ptr, CAR(env->head)->content.ptr); @@ -1433,16 +1137,8 @@ { int ret; - switch(check_args(env, port, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, port, empty)) + return printerr(env); ret= fclose(CAR(env->head)->content.p); @@ -1460,16 +1156,8 @@ { char *new_string; - switch(check_args(env, string, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, string, empty)) + return printerr(env); new_string= mangle_str(CAR(env->head)->content.string); @@ -1489,16 +1177,8 @@ extern void sx_77616974706964(environment *env) { - switch(check_args(env, integer, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, integer, empty)) + return printerr(env); push_int(env, waitpid(CAR(env->head)->content.i, NULL, 0)); swap(env); toss(env); @@ -1509,16 +1189,8 @@ extern void toss(environment *env) { - switch(check_args(env, unknown, empty)) { - case 1: - printerr(env, "Too Few Arguments"); - return; - case 2: - printerr(env, "Bad Argument Type"); - return; - default: - break; - } + if(check_args(env, unknown, empty)) + return printerr(env); env->head= CDR(env->head); /* Remove the top stack item */ }