aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/ShedCompiler.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-17 10:49:53 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-17 10:49:53 +0100
commit43fd7ec22f5f86ab79a5aa70c8dd460d84ad4726 (patch)
tree2aeb384c88372b8b6f37307b7471b85031134e92 /src/main/java/org/shedlang/compiler/ShedCompiler.java
parentc70a0a1ecbd562f8e13c6c96b28bcd15d3cd2b62 (diff)
Hack together compilation of LLVM modules to object files
Diffstat (limited to 'src/main/java/org/shedlang/compiler/ShedCompiler.java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java31
1 files changed, 16 insertions, 15 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java
index 6f252776..ebf97bdc 100644
--- a/src/main/java/org/shedlang/compiler/ShedCompiler.java
+++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java
@@ -36,6 +36,18 @@ public class ShedCompiler {
var namespaces = new LinkedHashMap<NamespaceName, List<Instruction>>();
+ var typeCheckerContext = TypeCheckerContext.EMPTY
+ .enter(P.map(
+ Map.entry("Io", Types.effectType(Effects.IO)),
+ Map.entry("Unit", Types.metaType(Types.UNIT)),
+
+ Map.entry("print", new FunctionType(
+ List.of(Types.STRING),
+ List.of(),
+ Types.UNIT
+ ))
+ ));
+
for (var sourceFilePath : sourceFilePaths) {
var namespaceNameParts = StreamSupport.stream(sourceRoot.relativize(sourceFilePath).spliterator(), false)
.map(element -> {
@@ -51,25 +63,14 @@ public class ShedCompiler {
var tokens = tokenise(source);
var untypedNode = Parser.parseNamespace(tokens, namespaceName);
+ var typeCheckNamespaceResult = TypeChecker.typeCheckNamespace(untypedNode, typeCheckerContext);
+ typeCheckerContext = typeCheckNamespaceResult.context();
- var context = TypeCheckerContext.EMPTY
- .enter(P.map(
- Map.entry("Io", Types.effectType(Effects.IO)),
- Map.entry("Unit", Types.metaType(Types.UNIT)),
-
- Map.entry("print", new FunctionType(
- List.of(Types.STRING),
- List.of(),
- Types.UNIT
- ))
- ));
- var typedNode = TypeChecker.typeCheckNamespace(untypedNode, context);
-
- var instructions = StackCompiler.compileNamespace(typedNode.value());
+ var instructions = StackCompiler.compileNamespace(typeCheckNamespaceResult.value());
namespaces.put(namespaceName, instructions);
}
- backend.compile(config, namespaces);
+ backend.compile(config, namespaces, typeCheckerContext.toTypeInfo());
}
private List<Path> collectSourceFilePaths(Path sourceRoot) throws IOException {