From 006d465c265246fa84e7926f2f0d3fe0ac19b2e2 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 16 Dec 2023 13:41:42 +0000 Subject: Make strings GC objects --- .../shedlang/compiler/patio/PatioCodeGenGc.java | 32 ++++++++++++++++++++++ .../compiler/patio/PatioCodeGenStrings.java | 4 +-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java (limited to 'src/main/java') 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 gcObjectOffset(List 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 -- cgit v1.2.3