1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
|
#include <stdlib.h>
typedef struct frame_data {
int retval;
int param[16];
int pcount;
} frame_data_t;
typedef struct call_frame {
frame_data_t *data;
struct call_frame *previous;
} call_frame_t;
typedef struct call_stack {
call_frame_t *top;
int size;
} call_stack_t;
call_stack_t call_stack;
void initialize() {
call_stack.size = 0;
call_stack.top = NULL;
}
void push(frame_data_t *frame_data) {
call_frame_t *call_frame = (call_frame_t *) malloc(sizeof(call_frame_t));
call_frame->previous = call_stack.top; // previous soll auf den call_frame zeigen, der bisher top war
call_stack.top = call_frame; // top soll jetzt auf den neuen zeigen
call_stack.size++; // die Groesse des Stacks (sagt man Tiefe?) hat sich um eins erhoeht
call_frame->data = frame_data; // Verweis auf den neuen (uebergebenen) Datensatz
}
|