Age Owner TLA Line data Source code
1 : #include "header.h"
2 :
779 peter 3 CBC 19 : extern struct SN_env * SN_create_env(int S_size, int I_size)
4 : {
5710 tgl 5 19 : struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env));
6 19 : if (z == NULL) return NULL;
7 19 : z->p = create_s();
8 19 : if (z->p == NULL) goto error;
9 19 : if (S_size)
10 : {
11 : int i;
5710 tgl 12 UBC 0 : z->S = (symbol * *) calloc(S_size, sizeof(symbol *));
13 0 : if (z->S == NULL) goto error;
14 :
15 0 : for (i = 0; i < S_size; i++)
16 : {
17 0 : z->S[i] = create_s();
18 0 : if (z->S[i] == NULL) goto error;
19 : }
20 : }
21 :
5710 tgl 22 CBC 19 : if (I_size)
23 : {
24 19 : z->I = (int *) calloc(I_size, sizeof(int));
25 19 : if (z->I == NULL) goto error;
26 : }
27 :
28 19 : return z;
5710 tgl 29 UBC 0 : error:
30 0 : SN_close_env(z, S_size);
31 0 : return NULL;
32 : }
33 :
34 0 : extern void SN_close_env(struct SN_env * z, int S_size)
35 : {
36 0 : if (z == NULL) return;
37 0 : if (S_size)
38 : {
39 : int i;
40 0 : for (i = 0; i < S_size; i++)
41 : {
42 0 : lose_s(z->S[i]);
43 : }
44 0 : free(z->S);
45 : }
46 0 : free(z->I);
47 0 : if (z->p) lose_s(z->p);
48 0 : free(z);
49 : }
50 :
5710 tgl 51 CBC 3401 : extern int SN_set_current(struct SN_env * z, int size, const symbol * s)
52 : {
53 3401 : int err = replace_s(z, 0, z->l, size, s, NULL);
54 3401 : z->c = 0;
55 3401 : return err;
56 : }
|