Implement 5.52 translate Scheme to C
This commit is contained in:
41
shared/scm2c/stack.c
Normal file
41
shared/scm2c/stack.c
Normal file
@@ -0,0 +1,41 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "stack.h"
|
||||
|
||||
struct stack proc_stack;
|
||||
|
||||
stack* create_stack(void) {
|
||||
stack* s = malloc(sizeof(stack));
|
||||
if (!s) exit(-1);
|
||||
s->first = NULL;
|
||||
return s;
|
||||
}
|
||||
|
||||
void save(void *d, stack *s) {
|
||||
stack_elem* elem = malloc(sizeof(stack_elem));
|
||||
elem->value = d;
|
||||
|
||||
if (!s->first) {
|
||||
elem->next = NULL;
|
||||
} else {
|
||||
elem->next = s->first;
|
||||
}
|
||||
s->first = elem;
|
||||
}
|
||||
|
||||
void* restore(stack *s) {
|
||||
void *r;
|
||||
stack_elem *se;
|
||||
|
||||
if (!s->first) {
|
||||
printf("stack empty!\n");
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
se = s->first;
|
||||
r = s->first->value;
|
||||
s->first = se->next;
|
||||
free(se);
|
||||
return r;
|
||||
}
|
||||
Reference in New Issue
Block a user