diff --git a/src/hammer.c b/src/hammer.c
index 4f8f966a29e3b2d61dbb017868952d76bb3c9fb9..2de2cdcef117834cf8653a170b27f2a3585b20a2 100644
--- a/src/hammer.c
+++ b/src/hammer.c
@@ -86,6 +86,7 @@ int h_compile(HParser* parser, HParserBackend backend, const void* params) {
 }
 
 int h_compile__m(HAllocator* mm__, HParser* parser, HParserBackend backend, const void* params) {
+  backends[backend]->free(parser);
   int ret = backends[backend]->compile(mm__, parser, params);
   if (!ret)
     parser->backend = backend;