diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-17 10:49:53 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-17 10:49:53 +0100 |
| commit | 43fd7ec22f5f86ab79a5aa70c8dd460d84ad4726 (patch) | |
| tree | 2aeb384c88372b8b6f37307b7471b85031134e92 /src/main/java/org/shedlang/compiler/ShedCompiler.java | |
| parent | c70a0a1ecbd562f8e13c6c96b28bcd15d3cd2b62 (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.java | 31 |
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 { |
