| 50 |
} |
} |
| 51 |
|
|
| 52 |
|
|
| 53 |
void printerr(environment *env, const char* in_string) |
void printerr(environment *env) |
| 54 |
{ |
{ |
| 55 |
|
char *in_string; |
| 56 |
|
|
| 57 |
|
switch(env->err) { |
| 58 |
|
case 0: |
| 59 |
|
return; |
| 60 |
|
case 1: |
| 61 |
|
in_string= "Too Few Arguments"; |
| 62 |
|
break; |
| 63 |
|
case 2: |
| 64 |
|
in_string= "Bad Argument Type"; |
| 65 |
|
break; |
| 66 |
|
case 3: |
| 67 |
|
in_string= "Unbound Variable"; |
| 68 |
|
break; |
| 69 |
|
default: |
| 70 |
|
in_string= "Unknown error"; |
| 71 |
|
break; |
| 72 |
|
} |
| 73 |
|
|
| 74 |
fprintf(stderr, "\"%s\":\nErr: %s\n", env->errsymb, in_string); |
fprintf(stderr, "\"%s\":\nErr: %s\n", env->errsymb, in_string); |
| 75 |
} |
} |
| 76 |
|
|
| 605 |
{ |
{ |
| 606 |
value *temp= env->head; |
value *temp= env->head; |
| 607 |
|
|
| 608 |
switch(check_args(env, unknown, unknown, empty)) { |
if(check_args(env, unknown, unknown, empty)) |
| 609 |
case 1: |
return printerr(env); |
|
printerr(env, "Too Few Arguments"); |
|
|
return; |
|
|
case 2: |
|
|
printerr(env, "Bad Argument Type"); |
|
|
return; |
|
|
default: |
|
|
break; |
|
|
} |
|
| 610 |
|
|
| 611 |
env->head= CDR(env->head); |
env->head= CDR(env->head); |
| 612 |
CDR(temp)= CDR(env->head); |
CDR(temp)= CDR(env->head); |
| 619 |
{ |
{ |
| 620 |
value *val; |
value *val; |
| 621 |
|
|
| 622 |
switch(check_args(env, symb, empty)) { |
if(check_args(env, symb, empty)) |
| 623 |
case 1: |
return printerr(env); |
|
printerr(env, "Too Few Arguments"); |
|
|
return; |
|
|
case 2: |
|
|
printerr(env, "Bad Argument Type"); |
|
|
return; |
|
|
default: |
|
|
break; |
|
|
} |
|
| 624 |
|
|
| 625 |
val= CAR(env->head)->content.sym->val; |
val= CAR(env->head)->content.sym->val; |
| 626 |
if(val == NULL){ |
if(val == NULL){ |
|
printerr(env, "Unbound Variable"); |
|
| 627 |
env->err= 3; |
env->err= 3; |
| 628 |
return; |
return printerr(env); |
| 629 |
} |
} |
| 630 |
|
|
| 631 |
push_val(env, val); /* Return the symbol's bound value */ |
push_val(env, val); /* Return the symbol's bound value */ |
| 632 |
swap(env); |
swap(env); |
| 633 |
if(env->err) return; |
if(env->err) return; |
| 648 |
|
|
| 649 |
gc_maybe(env); |
gc_maybe(env); |
| 650 |
|
|
| 651 |
switch(check_args(env, unknown, empty)) { |
if(check_args(env, unknown, empty)) |
| 652 |
case 1: |
return printerr(env); |
|
printerr(env, "Too Few Arguments"); |
|
|
return; |
|
|
case 2: |
|
|
printerr(env, "Bad Argument Type"); |
|
|
return; |
|
|
default: |
|
|
break; |
|
|
} |
|
| 653 |
|
|
| 654 |
switch(CAR(env->head)->type) { |
switch(CAR(env->head)->type) { |
| 655 |
/* if it's a symbol */ |
/* if it's a symbol */ |
| 666 |
case func: |
case func: |
| 667 |
in_func= CAR(env->head)->content.func; |
in_func= CAR(env->head)->content.func; |
| 668 |
env->head= CDR(env->head); |
env->head= CDR(env->head); |
| 669 |
return in_func(env); |
return in_func((void*)env); |
| 670 |
|
|
| 671 |
/* If it's a list */ |
/* If it's a list */ |
| 672 |
case tcons: |
case tcons: |
| 692 |
if (CDR(iterator)->type == empty || CDR(iterator)->type == tcons) |
if (CDR(iterator)->type == empty || CDR(iterator)->type == tcons) |
| 693 |
iterator= CDR(iterator); |
iterator= CDR(iterator); |
| 694 |
else { |
else { |
| 695 |
printerr(env, "Bad Argument Type"); /* Improper list */ |
env->err= 2; /* Improper list */ |
| 696 |
env->err= 2; |
return printerr(env); |
|
return; |
|
| 697 |
} |
} |
| 698 |
} |
} |
| 699 |
unprotect(temp_val); |
unprotect(temp_val); |
| 860 |
if(CAR(env->head)->type==empty) |
if(CAR(env->head)->type==empty) |
| 861 |
return; /* Don't reverse an empty list */ |
return; /* Don't reverse an empty list */ |
| 862 |
|
|
| 863 |
switch(check_args(env, tcons, empty)) { |
if(check_args(env, tcons, empty)) |
| 864 |
case 1: |
return printerr(env); |
|
printerr(env, "Too Few Arguments"); |
|
|
return; |
|
|
case 2: |
|
|
printerr(env, "Bad Argument Type"); |
|
|
return; |
|
|
default: |
|
|
break; |
|
|
} |
|
| 865 |
|
|
| 866 |
old_head= CAR(env->head); |
old_head= CAR(env->head); |
| 867 |
new_head= new_val(env); |
new_head= new_val(env); |