diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-16 13:41:42 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-16 13:41:42 +0000 |
| commit | 006d465c265246fa84e7926f2f0d3fe0ac19b2e2 (patch) | |
| tree | a4778584645d4886fa38c1c6f2c2f5eb65d832e4 /src/main/java | |
| parent | 20377ab1d402ccc75ecc6af0354a1d726be3d4cd (diff) | |
Make strings GC objects
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/PatioCodeGenGc.java | 32 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/patio/PatioCodeGenStrings.java | 4 |
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 |
