diff --git a/tree_sitter/CHANGELOG.md b/tree_sitter/CHANGELOG.md index 155037f..9a4bfe4 100644 --- a/tree_sitter/CHANGELOG.md +++ b/tree_sitter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.1 +- Fix memory management by making NativeFinalizer instances static across all Finalizable classes +- Fix QueryCursor to use correct deletion function (ts_query_cursor_delete) + ## 0.2.0 - Update dependencies, and latest version of TreeSitter C bindings. diff --git a/tree_sitter/lib/tree_sitter.dart b/tree_sitter/lib/tree_sitter.dart index a989009..e0c73da 100644 --- a/tree_sitter/lib/tree_sitter.dart +++ b/tree_sitter/lib/tree_sitter.dart @@ -58,7 +58,7 @@ base class Parser implements Finalizable { late final _language = _languagePtr.asFunction Function()>()(); - final _finalizer = + static final _finalizer = NativeFinalizer(treeSitterApi.addresses.ts_parser_delete.cast()); /// Creates a new parser with the given shared library and entry point @@ -110,7 +110,7 @@ base class Parser implements Finalizable { final class CancelToken implements Finalizable { final Pointer _token; - final _finalizer = NativeFinalizer(free.cast()); + static final _finalizer = NativeFinalizer(free.cast()); CancelToken() : _token = calloc(1) { _finalizer.attach(this, _token.cast(), detach: this); } @@ -122,7 +122,7 @@ final class CancelToken implements Finalizable { base class Tree implements Finalizable { final Pointer tree; - final _finalizer = + static final _finalizer = NativeFinalizer(treeSitterApi.addresses.ts_tree_delete.cast()); Tree(this.tree) { @@ -142,7 +142,7 @@ base class Tree implements Finalizable { base class TreeCursor implements Finalizable { late final Pointer cursor = malloc(1); - final _finalizer = + static final _finalizer = NativeFinalizer(treeSitterApi.addresses.ts_tree_cursor_delete.cast()); final TSNode node; TreeCursor(this.node) { @@ -153,7 +153,7 @@ base class TreeCursor implements Finalizable { base class Query implements Finalizable { late final Pointer query; - final _finalizer = + static final _finalizer = NativeFinalizer(treeSitterApi.addresses.ts_query_delete.cast()); Query(this.query) { _finalizer.attach(this, query.cast(), detach: this); @@ -243,8 +243,8 @@ extension TSApiIntX on int { base class QueryCursor implements Finalizable { final Pointer cursor = treeSitterApi.ts_query_cursor_new(); - final _finalizer = - NativeFinalizer(treeSitterApi.addresses.ts_query_delete.cast()); + static final _finalizer = + NativeFinalizer(treeSitterApi.addresses.ts_query_cursor_delete.cast()); QueryCursor() { _finalizer.attach(this, cursor.cast(), detach: this); } diff --git a/tree_sitter/pubspec.yaml b/tree_sitter/pubspec.yaml index e359977..2734b2c 100644 --- a/tree_sitter/pubspec.yaml +++ b/tree_sitter/pubspec.yaml @@ -1,6 +1,6 @@ name: tree_sitter description: A tree sitter parsing library -version: 0.2.0 +version: 0.2.1 repository: https://github.com/UserNobody14/tree-sitter-dart environment: