348 |
return out_item; |
return out_item; |
349 |
} |
} |
350 |
|
|
351 |
|
extern void rcl(environment *env) |
352 |
|
{ |
353 |
|
value *val; |
354 |
|
|
355 |
|
if(env->head == NULL) { |
356 |
|
printerr("Stack empty"); |
357 |
|
return; |
358 |
|
} |
359 |
|
|
360 |
|
if(env->head->item->type!=symb) { |
361 |
|
printerr("Not a symbol"); |
362 |
|
return; |
363 |
|
} |
364 |
|
val=((symbol *)(env->head->item->content.ptr))->val; |
365 |
|
toss(env); /* toss the symbol */ |
366 |
|
push_val(&(env->head), val); /* Return its bound value */ |
367 |
|
} |
368 |
|
|
369 |
/* If the top element is a symbol, determine if it's bound to a |
/* If the top element is a symbol, determine if it's bound to a |
370 |
function value, and if it is, toss the symbol and execute the |
function value, and if it is, toss the symbol and execute the |
638 |
toss(env); |
toss(env); |
639 |
} |
} |
640 |
|
|
641 |
|
extern void words(environment *env) |
642 |
|
{ |
643 |
|
symbol *temp; |
644 |
|
int i; |
645 |
|
|
646 |
|
for(i= 0; i<HASHTBLSIZE; i++) { |
647 |
|
temp= env->symbols[i]; |
648 |
|
while(temp!=NULL) { |
649 |
|
printf("%s\n", temp->id); |
650 |
|
temp= temp->next; |
651 |
|
} |
652 |
|
} |
653 |
|
} |
654 |
|
|
655 |
int main() |
int main() |
656 |
{ |
{ |
657 |
environment myenv; |
environment myenv; |