From b3675ddedb8b6d77cb0e2eb2bbe9e8a60bbbec23 Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Sat, 1 Feb 2025 20:56:40 +0200 Subject: [PATCH 1/2] fix: use allocation functions through FFM Fixes #62 Co-Authored-By: maloewe-ona <138245828+maloewe-ona@users.noreply.github.com> --- scripts/TreeSitter_java.patch | 9 +++++++++ scripts/jextract.ps1 | 4 ++++ scripts/jextract.sh | 4 ++++ src/main/java/io/github/treesitter/jtreesitter/Node.java | 5 +---- src/main/java/io/github/treesitter/jtreesitter/Tree.java | 7 ++----- 5 files changed, 20 insertions(+), 9 deletions(-) diff --git a/scripts/TreeSitter_java.patch b/scripts/TreeSitter_java.patch index c1a4350..27bf08e 100644 --- a/scripts/TreeSitter_java.patch +++ b/scripts/TreeSitter_java.patch @@ -20,3 +20,12 @@ public static final ValueLayout.OfBoolean C_BOOL = ValueLayout.JAVA_BOOLEAN; public static final ValueLayout.OfByte C_CHAR = ValueLayout.JAVA_BYTE; +@@ -8599,4 +8606,8 @@ public class TreeSitter { + throw new AssertionError("should not reach here", ex$); + } + } ++ ++ static { ++ ts_set_allocator(malloc$address(), calloc$address(), realloc$address(), free$address()); ++ } + } diff --git a/scripts/jextract.ps1 b/scripts/jextract.ps1 index 8b4dcde..2cdb01c 100755 --- a/scripts/jextract.ps1 +++ b/scripts/jextract.ps1 @@ -15,6 +15,10 @@ $lib = "$($args[0])/core/lib" --include-struct TSRange ` --include-struct TSTreeCursor ` --include-function free ` + --include-function malloc ` + --include-function calloc ` + --include-function realloc ` + --include-function ts_set_allocator ` --include-function ts_language_copy ` --include-function ts_language_delete ` --include-function ts_language_field_count ` diff --git a/scripts/jextract.sh b/scripts/jextract.sh index b8870bd..a31a2a6 100755 --- a/scripts/jextract.sh +++ b/scripts/jextract.sh @@ -17,6 +17,10 @@ exec jextract \ --include-struct TSRange \ --include-struct TSTreeCursor \ --include-function free \ + --include-function malloc \ + --include-function calloc \ + --include-function realloc \ + --include-function ts_set_allocator \ --include-function ts_language_copy \ --include-function ts_language_delete \ --include-function ts_language_field_count \ diff --git a/src/main/java/io/github/treesitter/jtreesitter/Node.java b/src/main/java/io/github/treesitter/jtreesitter/Node.java index 7a89ba6..c5348bf 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/Node.java +++ b/src/main/java/io/github/treesitter/jtreesitter/Node.java @@ -23,9 +23,6 @@ public final class Node { private final Arena arena = Arena.ofAuto(); private boolean wasEdited = false; - // FIXME: figure out why free() crashes on Windows - private static final boolean IS_UNIX = !System.getProperty("os.name").startsWith("Windows"); - Node(MemorySegment self, Tree tree) { this.self = self; this.tree = tree; @@ -446,7 +443,7 @@ public TreeCursor walk() { public String toSexp() { var string = ts_node_string(self); var result = string.getString(0); - if (IS_UNIX) free(string); + free(string); return result; } diff --git a/src/main/java/io/github/treesitter/jtreesitter/Tree.java b/src/main/java/io/github/treesitter/jtreesitter/Tree.java index 7f948f0..7040726 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/Tree.java +++ b/src/main/java/io/github/treesitter/jtreesitter/Tree.java @@ -22,9 +22,6 @@ public final class Tree implements AutoCloseable, Cloneable { private final Language language; private @Nullable List includedRanges; - // FIXME: figure out why free() crashes on Windows - private static final boolean IS_UNIX = !System.getProperty("os.name").startsWith("Windows"); - Tree(MemorySegment self, Language language, @Nullable String source, @Nullable Charset charset) { arena = Arena.ofShared(); this.self = self.reinterpret(arena, TreeSitter::ts_tree_delete); @@ -95,7 +92,7 @@ public List getIncludedRanges() { var range = TSRange.asSlice(ranges, i); includedRanges.add(Range.from(range)); } - if (IS_UNIX) free(ranges); + free(ranges); } } return Collections.unmodifiableList(includedRanges); @@ -122,7 +119,7 @@ public List getChangedRanges(Tree newTree) { var range = TSRange.asSlice(ranges, i); changedRanges.add(Range.from(range)); } - if (IS_UNIX) free(ranges); + free(ranges); return changedRanges; } } From 0922fe7bff96e2a6003bda70a243b84a16a34149 Mon Sep 17 00:00:00 2001 From: ObserverOfTime Date: Tue, 4 Feb 2025 20:50:30 +0200 Subject: [PATCH 2/2] Update scripts/TreeSitter_java.patch Co-authored-by: maloewe-ona <138245828+maloewe-ona@users.noreply.github.com> --- scripts/TreeSitter_java.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/TreeSitter_java.patch b/scripts/TreeSitter_java.patch index 27bf08e..5694788 100644 --- a/scripts/TreeSitter_java.patch +++ b/scripts/TreeSitter_java.patch @@ -25,7 +25,7 @@ } } + -+ static { ++ static { + ts_set_allocator(malloc$address(), calloc$address(), realloc$address(), free$address()); + } }