aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-12 21:29:51 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-12 21:29:51 +0100
commit7ff726e1f4ee42c5eaa1ce533cda7e34a08a82be (patch)
treeb82e8514e94dddf034cd2770ad4f3276d5ac417d /src/main/java
parent5fe757cc079c3df936638b9e7a1b3ca4df7211a3 (diff)
Add LLVM pointer type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java22
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java4
4 files changed, 16 insertions, 16 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
index b3e87ac7..c9f6b072 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/LlvmIrSerializer.java
@@ -1,21 +1,9 @@
package org.shedlang.compiler.backends.llvm.ir;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmBasicBlock;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmFunctionDefinition;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmGlobalDefinition;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmParam;
-import org.shedlang.compiler.backends.llvm.ir.ast.LlvmTopLevelEntity;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmAdd;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmCall;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmInstruction;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturn;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmReturnVoid;
-import org.shedlang.compiler.backends.llvm.ir.ast.instructions.LlvmTerminatorInstruction;
+import org.shedlang.compiler.backends.llvm.ir.ast.*;
+import org.shedlang.compiler.backends.llvm.ir.ast.instructions.*;
import org.shedlang.compiler.backends.llvm.ir.ast.operands.*;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmType;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeArray;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeScalar;
-import org.shedlang.compiler.backends.llvm.ir.ast.types.LlvmTypeStructure;
+import org.shedlang.compiler.backends.llvm.ir.ast.types.*;
import static org.shedlang.compiler.util.Iterables.forEachInterspersed;
@@ -154,6 +142,10 @@ public class LlvmIrSerializer {
);
builder.append("}");
}
+ case LlvmTypePointer pointer -> {
+ serializeType(pointer.elementType(), builder);
+ builder.append(" *");
+ }
}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
index 067ad6d8..dec3db7e 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmType.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.llvm.ir.ast.types;
-public sealed interface LlvmType permits LlvmTypeArray, LlvmTypeScalar, LlvmTypeStructure {
+public sealed interface LlvmType permits LlvmTypeArray, LlvmTypePointer, LlvmTypeScalar, LlvmTypeStructure {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java
new file mode 100644
index 00000000..64d3bfe3
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypePointer.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.llvm.ir.ast.types;
+
+public record LlvmTypePointer(LlvmType elementType) implements LlvmType {
+}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
index e93308fd..4362618a 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/ir/ast/types/LlvmTypes.java
@@ -14,6 +14,10 @@ public class LlvmTypes {
return new LlvmTypeArray(size, elementType);
}
+ public static LlvmTypePointer pointer(LlvmType elementType) {
+ return new LlvmTypePointer(elementType);
+ }
+
public static LlvmTypeStructure structure(List<LlvmType> elementTypes) {
return new LlvmTypeStructure(elementTypes);
}