aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-09-28 13:48:33 +0100
committerMichael Williamson <mike@zwobble.org>2023-09-28 13:48:33 +0100
commit1ce720a70e964dd002800f4bc96c631229e0fa24 (patch)
treefeeea3cb42a97880fb760e3e2eee21d5b0e12392 /src/main/java
parentdd30830b4c24e046d1e35968bbe101748894f897 (diff)
Pluralise type info collection
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/Backend.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/PatioBackend.java6
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java12
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java12
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java20
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java52
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java (renamed from src/main/java/org/shedlang/compiler/typechecker/TypeInfo.java)14
9 files changed, 63 insertions, 63 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java
index fcfb127c..7b96a524 100644
--- a/src/main/java/org/shedlang/compiler/ShedCompiler.java
+++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java
@@ -74,7 +74,7 @@ public class ShedCompiler {
namespaces.add(stackIrNamespace);
}
- backend.compile(config, namespaces, typeCheckerContext.toTypeInfo(), config.targetDir().resolve(backend.name()));
+ backend.compile(config, namespaces, typeCheckerContext.toTypeInfos(), config.targetDir().resolve(backend.name()));
}
private List<Path> collectSourceFilePaths(Path sourceRoot) throws IOException {
diff --git a/src/main/java/org/shedlang/compiler/backends/Backend.java b/src/main/java/org/shedlang/compiler/backends/Backend.java
index aba5fe1b..42938d34 100644
--- a/src/main/java/org/shedlang/compiler/backends/Backend.java
+++ b/src/main/java/org/shedlang/compiler/backends/Backend.java
@@ -2,7 +2,7 @@ package org.shedlang.compiler.backends;
import org.shedlang.compiler.config.ProjectConfig;
import org.shedlang.compiler.stackir.StackIrNamespace;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import java.io.IOException;
import java.nio.file.Path;
@@ -14,7 +14,7 @@ public interface Backend {
void compile(
ProjectConfig config,
List<StackIrNamespace> namespaces,
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
Path targetDir
) throws IOException, InterruptedException;
}
diff --git a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java b/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java
index fe64a16d..5c27757c 100644
--- a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java
@@ -3,7 +3,7 @@ package org.shedlang.compiler.backends;
import org.shedlang.compiler.config.ProjectConfig;
import org.shedlang.compiler.stackir.InstructionSerializer;
import org.shedlang.compiler.stackir.StackIrNamespace;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import java.nio.file.Path;
import java.util.List;
@@ -12,7 +12,7 @@ public class GenerateInstructionsBackend implements Backend {
public void compile(
ProjectConfig config,
List<StackIrNamespace> namespaces,
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
Path targetDir
) {
System.out.println("main: " + config.main());
diff --git a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioBackend.java
index 682bf79f..a647e842 100644
--- a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/PatioBackend.java
@@ -5,7 +5,7 @@ import org.shedlang.compiler.patio.PatioCodeGen;
import org.shedlang.compiler.patio.PatioCodeGenContext;
import org.shedlang.compiler.patio.ast.PatioSerializer;
import org.shedlang.compiler.stackir.StackIrNamespace;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import java.nio.file.Path;
import java.util.List;
@@ -14,12 +14,12 @@ public class PatioBackend implements Backend {
public void compile(
ProjectConfig config,
List<StackIrNamespace> namespaces,
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
Path targetDir
) {
System.out.println("main: " + config.main());
- var context = PatioCodeGenContext.forTypeInfo(typeInfo);
+ var context = PatioCodeGenContext.forTypeInfos(typeInfos);
for (var namespace : namespaces) {
System.out.println(namespace.namespaceName());
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
index 2cb22612..77159c8c 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/LlvmBackend.java
@@ -16,7 +16,7 @@ import org.shedlang.compiler.patio.PatioCodeGen;
import org.shedlang.compiler.patio.PatioCodeGenContext;
import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.stackir.StackIrNamespace;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import org.shedlang.compiler.types.NamespaceName;
import java.io.IOException;
@@ -42,14 +42,14 @@ public class LlvmBackend implements Backend {
public void compile(
ProjectConfig config,
List<StackIrNamespace> namespaces,
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
Path targetDir
) throws IOException, InterruptedException {
var objectFilePaths = new ArrayList<Path>();
for (var namespace : namespaces) {
var patioCompilationUnit = PatioCodeGen.generateNamespace(
namespace,
- PatioCodeGenContext.forTypeInfo(typeInfo)
+ PatioCodeGenContext.forTypeInfos(typeInfos)
);
var llvmModule = LlvmPatioCodeGen.generateCompilationUnit(patioCompilationUnit);
@@ -64,7 +64,7 @@ public class LlvmBackend implements Backend {
}
for (var bin : config.bins()) {
- var mainModule = this.generateMain(config.main(), typeInfo);
+ var mainModule = this.generateMain(config.main(), typeInfos);
var mainObjectPath = compileLlvmModule(mainModule, targetDir.resolve("bins"), bin.name());
var gccArgs = new ArrayList<String>();
@@ -84,11 +84,11 @@ public class LlvmBackend implements Backend {
}
}
- private LlvmModule generateMain(NamespaceName main, TypeInfo typeInfo) {
+ private LlvmModule generateMain(NamespaceName main, TypeInfos typeInfos) {
// TODO: use more appropriate source
var source = Sources.NULL;
- var context = PatioCodeGenContext.forTypeInfo(typeInfo);
+ var context = PatioCodeGenContext.forTypeInfos(typeInfos);
var generateMainResult = PatioCodeGen.generateMain(main, source, context);
var mainFunctionName = generateMainResult.value();
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
index 8c3bc338..218a6f69 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmBackend.java
@@ -11,7 +11,7 @@ import org.shedlang.compiler.patio.PatioCodeGen;
import org.shedlang.compiler.patio.PatioCodeGenContext;
import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.stackir.StackIrNamespace;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import org.shedlang.compiler.types.NamespaceName;
import java.io.FileOutputStream;
@@ -35,14 +35,14 @@ public class WasmBackend implements Backend {
public void compile(
ProjectConfig config,
List<StackIrNamespace> namespaces,
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
Path targetDir
) throws IOException, InterruptedException {
var objectFilePaths = new ArrayList<Path>();
for (var namespace : namespaces) {
var patioCompilationUnit = PatioCodeGen.generateNamespace(
namespace,
- PatioCodeGenContext.forTypeInfo(typeInfo)
+ PatioCodeGenContext.forTypeInfos(typeInfos)
);
var wasmModule = WasmPatioCodeGen.generateCompilationUnit(patioCompilationUnit);
@@ -66,7 +66,7 @@ public class WasmBackend implements Backend {
ldArgs.add(objectFilePath.toString());
}
- var mainModule = this.generateMain(config.main(), typeInfo);
+ var mainModule = this.generateMain(config.main(), typeInfos);
var mainObjectPath = writeObjectFile(mainModule, targetDir.resolve("bins"), bin.name());
ldArgs.add(mainObjectPath.toString());
@@ -76,11 +76,11 @@ public class WasmBackend implements Backend {
}
}
- private WasmModule generateMain(NamespaceName main, TypeInfo typeInfo) {
+ private WasmModule generateMain(NamespaceName main, TypeInfos typeInfos) {
// TODO: set appropriate source
var source = Sources.NULL;
- var context = PatioCodeGenContext.forTypeInfo(typeInfo);
+ var context = PatioCodeGenContext.forTypeInfos(typeInfos);
var generateMainResult = PatioCodeGen.generateMain(main, source, context);
var mainFunctionName = generateMainResult.value();
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
index 44495f3b..fb176c1e 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGenContext.java
@@ -12,7 +12,7 @@ import org.shedlang.compiler.patio.ast.operands.PatioLocalRef;
import org.shedlang.compiler.patio.ast.types.PatioDataLayout;
import org.shedlang.compiler.patio.ast.types.PatioType;
import org.shedlang.compiler.sources.Source;
-import org.shedlang.compiler.typechecker.TypeInfo;
+import org.shedlang.compiler.typechecker.TypeInfos;
import org.shedlang.compiler.types.NamespaceName;
import org.shedlang.compiler.types.NamespaceTypeInfo;
import org.shedlang.compiler.util.P;
@@ -29,18 +29,18 @@ public record PatioCodeGenContext(
FunctionContext functionContext
) {
public record CompilationUnitContext(
- TypeInfo typeInfo,
+ TypeInfos typeInfos,
OrderedPMap<String, PatioCompilationUnitElement> elementsByName
) {
public NamespaceTypeInfo namespaceTypeInfo(NamespaceName namespaceName) {
- return typeInfo.namespaceTypeInfo(namespaceName);
+ return typeInfos.namespaceTypeInfo(namespaceName);
}
- public static final CompilationUnitContext EMPTY = forTypeInfo(TypeInfo.EMPTY);
+ public static final CompilationUnitContext EMPTY = forTypeInfos(TypeInfos.EMPTY);
- public static CompilationUnitContext forTypeInfo(TypeInfo typeInfo) {
+ public static CompilationUnitContext forTypeInfos(TypeInfos typeInfos) {
return new CompilationUnitContext(
- typeInfo,
+ typeInfos,
OrderedPMap.empty()
);
}
@@ -48,7 +48,7 @@ public record PatioCodeGenContext(
public CompilationUnitContext addElement(PatioCompilationUnitElement element) {
// TODO: handle existing element with name.
return new CompilationUnitContext(
- this.typeInfo,
+ this.typeInfos,
this.elementsByName.plus(element.name(), element)
);
}
@@ -74,7 +74,7 @@ public record PatioCodeGenContext(
PatioCompilationUnitElement element
) {
return new CompilationUnitContext(
- this.typeInfo,
+ this.typeInfos,
this.elementsByName.plus(element.name(), element)
);
}
@@ -228,9 +228,9 @@ public record PatioCodeGenContext(
FunctionContext.EMPTY
);
- public static PatioCodeGenContext forTypeInfo(TypeInfo typeInfo) {
+ public static PatioCodeGenContext forTypeInfos(TypeInfos typeInfos) {
return new PatioCodeGenContext(
- CompilationUnitContext.forTypeInfo(typeInfo),
+ CompilationUnitContext.forTypeInfos(typeInfos),
P.stack(),
FunctionContext.EMPTY
);
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
index 5026dee6..c62b4e48 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeCheckerContext.java
@@ -104,17 +104,17 @@ public class TypeCheckerContext {
}
}
- private final PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfo;
- private final PMap<StructType, StructTypeInfo> structTypeInfo;
+ private final PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfos;
+ private final PMap<StructType, StructTypeInfo> structTypeInfos;
private final PStack<StackElement> stack;
public TypeCheckerContext(
- PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfo,
- PMap<StructType, StructTypeInfo> structTypeInfo,
+ PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfos,
+ PMap<StructType, StructTypeInfo> structTypeInfos,
PStack<StackElement> stack
) {
- this.namespaceTypeInfo = namespaceTypeInfo;
- this.structTypeInfo = structTypeInfo;
+ this.namespaceTypeInfos = namespaceTypeInfos;
+ this.structTypeInfos = structTypeInfos;
this.stack = stack;
}
@@ -142,8 +142,8 @@ public class TypeCheckerContext {
}
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo,
+ this.namespaceTypeInfos,
+ this.structTypeInfos,
newStack
);
}
@@ -179,8 +179,8 @@ public class TypeCheckerContext {
Optional<Type> newReturnType
) {
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo,
+ this.namespaceTypeInfos,
+ this.structTypeInfos,
this.stack.plus(new LexicalContext(
newNamespaceName,
this.environment().plusAll(newEnvironment),
@@ -195,8 +195,8 @@ public class TypeCheckerContext {
public TypeCheckerContext exit() {
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo,
+ this.namespaceTypeInfos,
+ this.structTypeInfos,
this.stack.minus(0)
);
}
@@ -204,8 +204,8 @@ public class TypeCheckerContext {
public TypeCheckerContext enterFreeVariableCapture() {
// TODO: do this properly (should not affect environment, possibly other bits of lexical context)
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo,
+ this.namespaceTypeInfos,
+ this.structTypeInfos,
this.stack.plus(FreeVariableCapture.EMPTY)
);
}
@@ -242,8 +242,8 @@ public class TypeCheckerContext {
}
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo,
+ this.namespaceTypeInfos,
+ this.structTypeInfos,
newLexicalContextStack
);
}
@@ -341,14 +341,14 @@ public class TypeCheckerContext {
var namespaceTypeInfo = new NamespaceTypeInfo(fields);
return new TypeCheckerContext(
- this.namespaceTypeInfo.plus(namespaceName, namespaceTypeInfo),
- this.structTypeInfo,
+ this.namespaceTypeInfos.plus(namespaceName, namespaceTypeInfo),
+ this.structTypeInfos,
this.stack
);
}
public PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfo() {
- return namespaceTypeInfo;
+ return namespaceTypeInfos;
}
public TypeCheckerContext addStructTypeInfo(
@@ -356,19 +356,19 @@ public class TypeCheckerContext {
StructTypeInfo structTypeInfo
) {
return new TypeCheckerContext(
- this.namespaceTypeInfo,
- this.structTypeInfo.plus(structType, structTypeInfo),
+ this.namespaceTypeInfos,
+ this.structTypeInfos.plus(structType, structTypeInfo),
this.stack
);
}
public StructTypeInfo structTypeInfo(StructType type, Source source) {
- return Optional.ofNullable(this.structTypeInfo.get(type))
+ return Optional.ofNullable(this.structTypeInfos.get(type))
.orElseThrow(() -> new MissingStructTypeInfoError(type, source));
}
- public PMap<StructType, StructTypeInfo> structTypeInfo() {
- return structTypeInfo;
+ public PMap<StructType, StructTypeInfo> structTypeInfos() {
+ return structTypeInfos;
}
public <T> TypeCheckerResult<T> toResult(T value) {
@@ -391,7 +391,7 @@ public class TypeCheckerContext {
return new TypeCheckerResult<>(mappedValues, context);
}
- public TypeInfo toTypeInfo() {
- return new TypeInfo(namespaceTypeInfo);
+ public TypeInfos toTypeInfos() {
+ return new TypeInfos(namespaceTypeInfos);
}
}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeInfo.java b/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java
index f7c381d9..7331ee07 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeInfo.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeInfos.java
@@ -5,20 +5,20 @@ import org.pcollections.PMap;
import org.shedlang.compiler.types.NamespaceName;
import org.shedlang.compiler.types.NamespaceTypeInfo;
-public class TypeInfo {
- public static final TypeInfo EMPTY = new TypeInfo(Empty.map());
+public class TypeInfos {
+ public static final TypeInfos EMPTY = new TypeInfos(Empty.map());
- private final PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfo;
+ private final PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfos;
- public TypeInfo(
- PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfo
+ public TypeInfos(
+ PMap<NamespaceName, NamespaceTypeInfo> namespaceTypeInfos
) {
- this.namespaceTypeInfo = namespaceTypeInfo;
+ this.namespaceTypeInfos = namespaceTypeInfos;
}
public NamespaceTypeInfo namespaceTypeInfo(NamespaceName namespaceName) {
// TODO: throw better error
- var typeInfo = namespaceTypeInfo.get(namespaceName);
+ var typeInfo = namespaceTypeInfos.get(namespaceName);
if (typeInfo == null) {
throw new RuntimeException("No type info for: " + namespaceName);
} else {