aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-16 13:41:42 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-16 13:41:42 +0000
commit006d465c265246fa84e7926f2f0d3fe0ac19b2e2 (patch)
treea4778584645d4886fa38c1c6f2c2f5eb65d832e4 /src/main/java
parent20377ab1d402ccc75ecc6af0354a1d726be3d4cd (diff)
Make strings GC objects
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java32
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java4
2 files changed, 34 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java
new file mode 100644
index 00000000..e67554fe
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java
@@ -0,0 +1,32 @@
+package org.shedlang.compiler.patio;
+
+import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
+import org.shedlang.compiler.patio.ast.types.PatioDataLayouts;
+import org.shedlang.compiler.patio.ast.types.PatioDataValue;
+import org.shedlang.compiler.patio.ast.types.PatioDataValues;
+import org.shedlang.compiler.util.Lists;
+
+import java.util.List;
+
+public class PatioCodeGenGc {
+ private PatioCodeGenGc() {
+ }
+
+ public static PatioDataLayout gcObjectDataLayout(PatioDataLayout valueLayout) {
+ return PatioDataLayouts.struct(List.of(
+ PatioDataLayouts.DATA_POINTER,
+ valueLayout
+ ));
+ }
+
+ public static List<Integer> gcObjectOffset(List<Integer> valueOffset) {
+ return Lists.concat(List.of(1), valueOffset);
+ }
+
+ public static PatioDataValue gcObjectStaticDataValue(PatioDataValue value) {
+ return PatioDataValues.struct(List.of(
+ PatioDataValues.int_(0),
+ value
+ ));
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java
index a0d11ca7..3269057b 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java
@@ -43,10 +43,10 @@ public class PatioCodeGenStrings {
codeUnitsDataValues.add(PatioDataValues.byte_(codeUnit));
}
- var dataValue = PatioDataValues.struct(List.of(
+ var dataValue = PatioCodeGenGc.gcObjectStaticDataValue(PatioDataValues.struct(List.of(
PatioDataValues.int_(codeUnits.length),
PatioDataValues.array(PatioDataLayouts.BYTE, codeUnitsDataValues)
- ));
+ )));
var elementNameResult = context.allocateCompilationUnitElementName(
PatioCodeGenCompilationUnitElementSpace.STRING