aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-03-19 18:39:42 +0000
committerMichael Williamson <mike@zwobble.org>2024-03-19 18:39:42 +0000
commita9a3c3a50b270e21180898d458597a4abfb7804b (patch)
tree0c4a8843416f4aaee1ff7aef151f2d168fbc1046 /src/main/java
parent3b7a25939f6117ab11084a448e591ffad5380874 (diff)
Call GC init once
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java2
-rw-r--r--src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java23
2 files changed, 25 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 ba3995cb..f86a1b5c 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatio.java
@@ -47,6 +47,8 @@ public class ShidToPatio {
PatioTypes.INT,
source,
mainContext -> {
+ mainContext = ShidToPatioGc.init(source, mainContext);
+
var namespaceValueResult = mainContext.allocateVal(
ShidToPatioLocalSpace.NAMESPACE_VALUE,
ShidToPatioTypes.VALUE_TYPE
diff --git a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
index dd6e161b..a79326b9 100644
--- a/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
+++ b/src/main/java/org/shedlang/compiler/shidtopatio/ShidToPatioGc.java
@@ -128,6 +128,29 @@ public class ShidToPatioGc {
));
}
+ // == Initialization ==
+
+ private static final PatioFunctionDeclaration INIT = new PatioFunctionDeclaration(
+ "shed__runtime__gc_init",
+ List.of(),
+ PatioTypes.VOID,
+ Sources.RUNTIME
+ );
+
+ public static ShidToPatioContext init(
+ Source source,
+ ShidToPatioContext context
+ ) {
+ return context
+ .ensureCompilationUnitElement(INIT)
+ .addInstruction(new PatioCall(
+ Optional.empty(),
+ INIT.name(),
+ List.of(),
+ source
+ ));
+ }
+
// == Allocation ==
private static final PatioFunctionDeclaration ALLOC = new PatioFunctionDeclaration(