// Copyright (c) 2024, Marvin Borner // SPDX-License-Identifier: MIT #include #include #include #include #include struct term *new_term(term_type type) { struct term *term = malloc(sizeof(*term)); if (!term) fatal("out of memory!\n"); term->type = type; term->meta = 0; return term; } void free_term(struct term *term) { switch (term->type) { case ABS: free_term(term->u.abs.term); free(term); break; case APP: free_term(term->u.app.lhs); free_term(term->u.app.rhs); free(term); break; case VAR: free(term); break; case REF: free(term); break; default: fatal("invalid type %d\n", term->type); } }