Line data Source code
1 : #include "header.h" 2 : 3 38 : extern struct SN_env * SN_create_env(int S_size, int I_size) 4 : { 5 38 : struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); 6 38 : if (z == NULL) return NULL; 7 38 : z->p = create_s(); 8 38 : if (z->p == NULL) goto error; 9 38 : if (S_size) 10 : { 11 : int i; 12 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 : 22 38 : if (I_size) 23 : { 24 38 : z->I = (int *) calloc(I_size, sizeof(int)); 25 38 : if (z->I == NULL) goto error; 26 : } 27 : 28 38 : return z; 29 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 : 51 6802 : extern int SN_set_current(struct SN_env * z, int size, const symbol * s) 52 : { 53 6802 : int err = replace_s(z, 0, z->l, size, s, NULL); 54 6802 : z->c = 0; 55 6802 : return err; 56 : }