summaryrefslogtreecommitdiff
path: root/src/ast.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/ast.c')
-rw-r--r--src/ast.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/ast.c b/src/ast.c
new file mode 100644
index 0000000..1622568
--- /dev/null
+++ b/src/ast.c
@@ -0,0 +1,30 @@
+#include <stdbool.h>
+#include <stdio.h>
+#include "buffer.h"
+#include "ast.h"
+#include "inlines.h"
+#include "references.h"
+
+// Free a node_block list and any children.
+void cmark_free_nodes(node_block *e)
+{
+ node_block * next;
+ while (e != NULL) {
+ free_inlines(e->inline_content);
+ strbuf_free(&e->string_content);
+ if (e->tag == BLOCK_FENCED_CODE) {
+ strbuf_free(&e->as.code.info);
+ } else if (e->tag == BLOCK_DOCUMENT) {
+ reference_map_free(e->as.document.refmap);
+ }
+ if (e->last_child) {
+ // Splice children into list
+ e->last_child->next = e->next;
+ e->next = e->children;
+ }
+ next = e->next;
+ free(e);
+ e = next;
+ }
+}
+