|
static void *copy_dict(void *v, void *(*ele)(void*)) { Dict *r = NULL; if (v == NULL || ((r = hash_get(v)) != NULL)) return r; r = store(v, sizeof(Dict)); r->map = copy_map(r->map, ele); r->key = copy_vector(r->key, copy_string); return r; } static void *copy_type(void *v) { Type *r = NULL; if (v == NULL || ((r = hash_get(v)) != NULL)) return r; r = store(v, sizeof(Type)); r->ptr = copy_type(r->ptr); r->fields = copy_dict(r->fields, copy_type); r->rettype = copy_type(r->rettype); r->params = copy_vector(r->params, copy_type); return r; }