From 43fd7ec22f5f86ab79a5aa70c8dd460d84ad4726 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 17 Jun 2023 10:49:53 +0100 Subject: Hack together compilation of LLVM modules to object files --- .../java/org/shedlang/compiler/ShedCompiler.java | 31 +++++++++++----------- 1 file changed, 16 insertions(+), 15 deletions(-) (limited to 'src/main/java/org/shedlang/compiler/ShedCompiler.java') 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>(); + 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 collectSourceFilePaths(Path sourceRoot) throws IOException { -- cgit v1.2.3