From cf0d8abea1f4c536647adce002727fd09d90a642 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Sun, 4 Dec 2016 14:18:30 -0800 Subject: [PATCH] Destroy external scanner when destroying Parser --- src/runtime/parser.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/runtime/parser.c b/src/runtime/parser.c index 997103c8..6a358448 100644 --- a/src/runtime/parser.c +++ b/src/runtime/parser.c @@ -1120,12 +1120,16 @@ bool parser_init(Parser *self) { } void parser_set_language(Parser *self, const TSLanguage *language) { - self->language = language; - if (language->external_scanner.create) { + if (self->external_scanner_payload) + if (self->language->external_scanner.destroy) + self->language->external_scanner.destroy(self->external_scanner_payload); + + if (language->external_scanner.create) self->external_scanner_payload = language->external_scanner.create(); - } else { + else self->external_scanner_payload = NULL; - } + + self->language = language; } void parser_destroy(Parser *self) { @@ -1137,6 +1141,9 @@ void parser_destroy(Parser *self) { array_delete(&self->tree_path1); if (self->tree_path2.contents) array_delete(&self->tree_path2); + if (self->external_scanner_payload) + if (self->language->external_scanner.destroy) + self->language->external_scanner.destroy(self->external_scanner_payload); } Tree *parser_parse(Parser *self, TSInput input, Tree *old_tree) {