467 |
printf("\"%s\"", (char*)CAR(stack_head)->content.ptr); |
printf("\"%s\"", (char*)CAR(stack_head)->content.ptr); |
468 |
break; |
break; |
469 |
case symb: |
case symb: |
470 |
printf("%s", ((symbol *)(CAR(stack_head)->content.ptr))->id); |
printf("%s", CAR(stack_head)->content.sym->id); |
471 |
break; |
break; |
472 |
case func: |
case func: |
473 |
printf("#<function %p>", (funcp)(CAR(stack_head)->content.ptr)); |
printf("#<function %p>", (funcp)(CAR(stack_head)->content.ptr)); |
594 |
return; |
return; |
595 |
} |
} |
596 |
|
|
597 |
val= ((symbol *)(CAR(env->head)->content.ptr))->val; |
val= CAR(env->head)->content.sym->val; |
598 |
if(val == NULL){ |
if(val == NULL){ |
599 |
printerr("Unbound Variable"); |
printerr("Unbound Variable"); |
600 |
env->err= 3; |
env->err= 3; |
655 |
push_val(env, CAR(iterator)); |
push_val(env, CAR(iterator)); |
656 |
|
|
657 |
if(CAR(env->head)->type==symb |
if(CAR(env->head)->type==symb |
658 |
&& (((symbol*)(CAR(env->head)->content.ptr))->id[0]==';')) { |
&& CAR(env->head)->content.sym->id[0]==';') { |
659 |
toss(env); |
toss(env); |
660 |
if(env->err) return; |
if(env->err) return; |
661 |
|
|
717 |
iterator= env->head; |
iterator= env->head; |
718 |
if(iterator==NULL |
if(iterator==NULL |
719 |
|| (CAR(iterator)->type==symb |
|| (CAR(iterator)->type==symb |
720 |
&& ((symbol*)(CAR(iterator)->content.ptr))->id[0]=='[')) { |
&& CAR(iterator)->content.sym->id[0]=='[')) { |
721 |
temp= NULL; |
temp= NULL; |
722 |
toss(env); |
toss(env); |
723 |
} else { |
} else { |
724 |
/* Search for first delimiter */ |
/* Search for first delimiter */ |
725 |
while(CDR(iterator)!=NULL |
while(CDR(iterator)!=NULL |
726 |
&& (CAR(CDR(iterator))->type!=symb |
&& (CAR(CDR(iterator))->type!=symb |
727 |
|| ((symbol*)(CAR(CDR(iterator))->content.ptr))->id[0]!='[')) |
|| CAR(CDR(iterator))->content.sym->id[0]!='[')) |
728 |
iterator= CDR(iterator); |
iterator= CDR(iterator); |
729 |
|
|
730 |
/* Extract list */ |
/* Extract list */ |
940 |
return; |
return; |
941 |
} |
} |
942 |
|
|
943 |
sym_id= ((symbol*)(CAR(stack_head)->content.ptr))->id; |
sym_id= CAR(stack_head)->content.sym->id; |
944 |
toss(env); |
toss(env); |
945 |
|
|
946 |
return forget_sym(hash(env->symbols, sym_id)); |
return forget_sym(hash(env->symbols, sym_id)); |
1013 |
return EXIT_SUCCESS; /* EOF */ |
return EXIT_SUCCESS; /* EOF */ |
1014 |
} else if(myenv.head!=NULL |
} else if(myenv.head!=NULL |
1015 |
&& CAR(myenv.head)->type==symb |
&& CAR(myenv.head)->type==symb |
1016 |
&& ((symbol*)(CAR(myenv.head)->content.ptr))->id[0] |
&& CAR(myenv.head)->content.sym->id[0] |
1017 |
==';') { |
==';') { |
1018 |
toss(&myenv); /* No error check in main */ |
toss(&myenv); /* No error check in main */ |
1019 |
eval(&myenv); |
eval(&myenv); |
1362 |
eval(env); |
eval(env); |
1363 |
} |
} |
1364 |
|
|
1365 |
|
extern void sx_656c7365(environment *env) |
1366 |
|
{ |
1367 |
|
if(env->head==NULL || CDR(env->head)==NULL |
1368 |
|
|| CDR(CDR(env->head))==NULL || CDR(CDR(CDR(env->head)))==NULL) { |
1369 |
|
printerr("Too Few Arguments"); |
1370 |
|
env->err= 1; |
1371 |
|
return; |
1372 |
|
} |
1373 |
|
|
1374 |
|
if(CAR(CDR(env->head))->type!=symb |
1375 |
|
|| strcmp(CAR(CDR(env->head))->content.sym->id, "if")!=0) { |
1376 |
|
printerr("Bad Argument Type"); |
1377 |
|
env->err= 2; |
1378 |
|
return; |
1379 |
|
} |
1380 |
|
|
1381 |
|
swap(env); toss(env); |
1382 |
|
ifelse(env); |
1383 |
|
} |
1384 |
|
|
1385 |
/* "while" */ |
/* "while" */ |
1386 |
extern void sx_7768696c65(environment *env) |
extern void sx_7768696c65(environment *env) |
1387 |
{ |
{ |
1508 |
push_val(env, CAR(iterator)); |
push_val(env, CAR(iterator)); |
1509 |
push_val(env, loop); |
push_val(env, loop); |
1510 |
eval(env); if(env->err) return; |
eval(env); if(env->err) return; |
1511 |
if (CDR(iterator)->type == tcons){ |
if (iterator->type == tcons){ |
1512 |
iterator= CDR(iterator); |
iterator= CDR(iterator); |
1513 |
} else { |
} else { |
1514 |
printerr("Bad Argument Type"); /* Improper list */ |
printerr("Bad Argument Type"); /* Improper list */ |
1557 |
|
|
1558 |
if(iterator==NULL |
if(iterator==NULL |
1559 |
|| (CAR(iterator)->type==symb |
|| (CAR(iterator)->type==symb |
1560 |
&& ((symbol*)(CAR(iterator)->content.ptr))->id[0]=='[')) { |
&& CAR(iterator)->content.sym->id[0]=='[')) { |
1561 |
temp= NULL; |
temp= NULL; |
1562 |
toss(env); |
toss(env); |
1563 |
} else { |
} else { |
1564 |
/* Search for first delimiter */ |
/* Search for first delimiter */ |
1565 |
while(CDR(iterator)!=NULL |
while(CDR(iterator)!=NULL |
1566 |
&& (CAR(CDR(iterator))->type!=symb |
&& (CAR(CDR(iterator))->type!=symb |
1567 |
|| ((symbol*)(CAR(CDR(iterator))->content.ptr))->id[0] |
|| CAR(CDR(iterator))->content.sym->id[0]!='[')) |
|
!='[')) |
|
1568 |
iterator= CDR(iterator); |
iterator= CDR(iterator); |
1569 |
|
|
1570 |
/* Extract list */ |
/* Extract list */ |