6 struct gamma
*gamma_init()
8 struct gamma
*gamma
= safe_malloc(sizeof(struct gamma
));
12 gamma
->schemes
= NULL
;
16 void gamma_insert(struct gamma
*gamma
, char *ident
, struct scheme
*scheme
)
19 gamma
->vars
= realloc(gamma
->vars
, gamma
->nschemes
*sizeof(char *));
20 gamma
->schemes
= realloc(gamma
->schemes
,
21 gamma
->nschemes
*sizeof(struct scheme
*));
22 gamma
->vars
[gamma
->nschemes
-1] = safe_strdup(ident
);
23 gamma
->schemes
[gamma
->nschemes
-1] = scheme
;
26 struct scheme
*gamma_lookup(struct gamma
*gamma
, char *ident
)
28 for (int i
= 0; i
<gamma
->nschemes
; i
++)
29 if (strcmp(ident
, gamma
->vars
[i
]) == 0)
30 return gamma
->schemes
[i
];
34 struct type
*gamma_fresh(struct gamma
*gamma
)
37 sprintf(buf
, "%d", gamma
->fresh
++);
38 return type_var(safe_strdup(buf
));
41 void gamma_print(struct gamma
*gamma
, FILE *out
)
44 for (int i
= 0; i
<gamma
->nschemes
; i
++) {
45 fprintf(out
, "%s=", gamma
->vars
[i
]);
46 scheme_print(gamma
->schemes
[i
], out
);
47 if (i
+ 1 < gamma
->nschemes
)
53 void gamma_free(struct gamma
*gamma
)
55 for (int i
= 0; i
<gamma
->nschemes
; i
++) {
57 scheme_free(gamma
->schemes
[i
]);