static void address_free(Address *addr) { if (!addr) return; text_regex_free(addr->regex); address_free(addr->left); address_free(addr->right); free(addr); }
static void command_free(Command *cmd) { if (!cmd) return; for (Command *c = cmd->cmd, *next; c; c = next) { next = c->next; command_free(c); } for (const char **args = cmd->argv; *args; args++) free((void*)*args); address_free(cmd->address); text_regex_free(cmd->regex); free(cmd); }
void editor_free(Editor *ed) { if (!ed) return; while (ed->windows) editor_window_close(ed->windows); file_free(ed, ed->prompt->file); window_free(ed->prompt); text_regex_free(ed->search_pattern); for (int i = 0; i < REG_LAST; i++) register_release(&ed->registers[i]); for (int i = 0; i < MACRO_LAST; i++) macro_release(&ed->macros[i]); editor_syntax_unload(ed); ed->ui->free(ed->ui); map_free(ed->cmds); map_free(ed->options); buffer_release(&ed->buffer_repeat); free(ed); }