aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2025-03-09 15:49:44 +0000
committerMichael Williamson <mike@zwobble.org>2025-03-09 15:49:44 +0000
commit596b1c1fde6b94326c7cc1ee35c81586fa04ab72 (patch)
treeec136bf863a8b1e1469854ce1a1b1d714b2bcfec /src/main/java
parent0272d952e38e3d449ac4d077c6bc6c4ed405fe10 (diff)
Clear GC roots so valgrind can find leaks
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java1
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java23
2 files changed, 24 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
index b3f235cf..51cc0bb8 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
@@ -98,6 +98,7 @@ public class ShidToPatio {
);
mainContext = ShidToPatioGc.collect(source, mainContext);
+ mainContext = ShidToPatioGc.clear(source, mainContext);
mainContext = mainContext.addInstruction(
new PatioReturn(exitCode, source)
diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
index 07e8cbaf..39ff3ce5 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
@@ -276,4 +276,27 @@ public class ShidToPatioGc {
return context;
}
+
+ // == Clear ==
+
+ private static final PatioFunctionDeclaration CLEAR = new PatioFunctionDeclaration(
+ "shed__runtime__gc_clear",
+ List.of(),
+ PatioTypes.VOID,
+ Sources.RUNTIME
+ );
+
+ public static ShidToPatioContext clear(
+ Source source,
+ ShidToPatioContext context
+ ) {
+ return context
+ .ensureCompilationUnitElement(CLEAR)
+ .addInstruction(new PatioCall(
+ Optional.empty(),
+ CLEAR.name(),
+ List.of(),
+ source
+ ));
+ }
}