aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-21 16:30:51 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-21 16:30:51 +0100
commit0d57c3b1aad4137a6c96db0b9f71dfb04038def1 (patch)
tree6b04162678c24ba642e69c540868e75cc907693a /src/main/java
parent29a860237c12e760648a6637cbb9644d9d847e6a (diff)
Create separate PatioDataLayouts util class
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java13
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenNamespaces.java9
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataLayouts.java24
-rw-r--r--src/main/java/org/shedlang/compiler/patio/ast/types/PatioTypes.java18
4 files changed, 34 insertions, 30 deletions
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
index 590c41ba..9d7f8729 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenClosures.java
@@ -6,10 +6,7 @@ import org.shedlang.compiler.patio.ast.PatioVisibility;
import org.shedlang.compiler.patio.ast.instructions.*;
import org.shedlang.compiler.patio.ast.operands.PatioFunctionPtr;
import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
-import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
-import org.shedlang.compiler.patio.ast.types.PatioStruct;
-import org.shedlang.compiler.patio.ast.types.PatioType;
-import org.shedlang.compiler.patio.ast.types.PatioTypes;
+import org.shedlang.compiler.patio.ast.types.*;
import org.shedlang.compiler.sources.Source;
import org.shedlang.compiler.stackir.instructions.DefineFunctionInstruction;
import org.shedlang.compiler.util.Lists;
@@ -31,14 +28,14 @@ class PatioCodeGenClosures {
private static PatioDataLayout closureDataLayoutForCall() {
return new PatioStruct(List.of(
- PatioTypes.scalar(PatioTypes.FUNCTION_POINTER)
+ PatioDataLayouts.scalar(PatioTypes.FUNCTION_POINTER)
));
}
private static PatioDataLayout closureDataLayout(int freeVariableCount) {
- return PatioTypes.struct(List.of(
- PatioTypes.scalar(PatioTypes.FUNCTION_POINTER),
- PatioTypes.structFlat(Lists.repeat(PatioCodeGenTypes.VALUE_TYPE, freeVariableCount))
+ return PatioDataLayouts.struct(List.of(
+ PatioDataLayouts.scalar(PatioTypes.FUNCTION_POINTER),
+ PatioDataLayouts.structFlat(Lists.repeat(PatioCodeGenTypes.VALUE_TYPE, freeVariableCount))
));
}
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenNamespaces.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenNamespaces.java
index eed8e7ec..fbbd5c79 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenNamespaces.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenNamespaces.java
@@ -8,6 +8,7 @@ import org.shedlang.compiler.patio.ast.operands.PatioDataPtr;
import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.operands.PatioOperand;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
+import org.shedlang.compiler.patio.ast.types.PatioDataLayouts;
import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.patio.ast.types.PatioTypes;
import org.shedlang.compiler.sources.Source;
@@ -44,7 +45,7 @@ public class PatioCodeGenNamespaces {
context = context.addDataElement(
globalNameNamespaceIsInited(namespaceName),
- PatioTypes.scalar(PatioTypes.BOOL),
+ PatioDataLayouts.scalar(PatioTypes.BOOL),
source
);
@@ -58,7 +59,7 @@ public class PatioCodeGenNamespaces {
initContext = initContext.addInstruction(new PatioMemoryStore(
new PatioDataPtr(globalNameNamespaceIsInited(namespaceName)),
- PatioTypes.scalar(PatioTypes.BOOL),
+ PatioDataLayouts.scalar(PatioTypes.BOOL),
List.of(),
new PatioBool(true),
source
@@ -84,7 +85,7 @@ public class PatioCodeGenNamespaces {
importContext = importContext.addInstruction(new PatioMemoryLoad(
isInited,
new PatioDataPtr(globalNameNamespaceIsInited(namespaceName)),
- PatioTypes.scalar(PatioTypes.BOOL),
+ PatioDataLayouts.scalar(PatioTypes.BOOL),
List.of(),
source
));
@@ -211,7 +212,7 @@ public class PatioCodeGenNamespaces {
}
private static PatioDataLayout namespaceDataLayout(NamespaceTypeInfo namespaceTypeInfo) {
- return PatioTypes.structFlat(
+ return PatioDataLayouts.structFlat(
Lists.repeat(
PatioCodeGenTypes.VALUE_TYPE,
namespaceTypeInfo.fieldCount()
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataLayouts.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataLayouts.java
new file mode 100644
index 00000000..b2a83f7a
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioDataLayouts.java
@@ -0,0 +1,24 @@
+package org.shedlang.compiler.patio.ast.types;
+
+import java.util.List;
+
+public class PatioDataLayouts {
+ private PatioDataLayouts() {
+ }
+
+ public static PatioDataLayout scalar(PatioType type) {
+ return new PatioScalar(type);
+ }
+
+ public static PatioDataLayout structFlat(List<PatioType> elements) {
+ return new PatioStruct(
+ elements.stream()
+ .map(element -> scalar(element))
+ .toList()
+ );
+ }
+
+ public static PatioDataLayout struct(List<PatioDataLayout> elements) {
+ return new PatioStruct(elements);
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioTypes.java b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioTypes.java
index 8e53c095..35f82222 100644
--- a/src/main/java/org/shedlang/compiler/patio/ast/types/PatioTypes.java
+++ b/src/main/java/org/shedlang/compiler/patio/ast/types/PatioTypes.java
@@ -1,7 +1,5 @@
package org.shedlang.compiler.patio.ast.types;
-import java.util.List;
-
public class PatioTypes {
private PatioTypes() {
}
@@ -11,20 +9,4 @@ public class PatioTypes {
public static final PatioFunctionPointerType FUNCTION_POINTER = PatioFunctionPointerType.INSTANCE;
public static final PatioIntType INT = PatioIntType.INSTANCE;
public static final PatioVoidType VOID = PatioVoidType.INSTANCE;
-
- public static PatioDataLayout scalar(PatioType type) {
- return new PatioScalar(type);
- }
-
- public static PatioDataLayout structFlat(List<PatioType> elements) {
- return new PatioStruct(
- elements.stream()
- .map(element -> scalar(element))
- .toList()
- );
- }
-
- public static PatioDataLayout struct(List<PatioDataLayout> elements) {
- return new PatioStruct(elements);
- }
}