struct SN_env * SN_create_env(int S_size, int I_size, int B_size) { struct SN_env *z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); struct SN_env *z2 = z; if (!z) return z; z->p = create_s(); if (!z->p) z = NULL; if (z && S_size) { if ((z->S = (symbol * *) calloc(S_size, sizeof(symbol *)))) { int i; for (i = 0; i < S_size; i++) { if (!(z->S[i] = create_s())) { z = NULL; break; } } z2->S_size = i; } else z = NULL; } if (z && I_size) { z->I = (int *) calloc(I_size, sizeof(int)); if (z->I) z->I_size = I_size; else z = NULL; } if (z && B_size) { z->B = (symbol *) calloc(B_size, sizeof(symbol)); if (z->B) z->B_size = B_size; else z = NULL; } if (!z) SN_close_env(z2); return z; }
extern struct SN_env * SN_create_env(int S_size, int I_size, int B_size) { struct SN_env * z = (struct SN_env *) calloc(1, sizeof(struct SN_env)); if (z == NULL) return NULL; z->p = create_s(); if (z->p == NULL) goto error; if (S_size) { int i; z->S = (symbol * *) calloc(S_size, sizeof(symbol *)); if (z->S == NULL) goto error; for (i = 0; i < S_size; i++) { z->S[i] = create_s(); if (z->S[i] == NULL) goto error; } } if (I_size) { z->I = (int *) calloc(I_size, sizeof(int)); if (z->I == NULL) goto error; } if (B_size) { z->B = (unsigned char *) calloc(B_size, sizeof(unsigned char)); if (z->B == NULL) goto error; } return z; error: SN_close_env(z, S_size); return NULL; }