diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-10-21 11:08:36 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-10-21 11:08:36 +0100 |
| commit | bb7d77def0e86732c440125467b1ffc1648e06bc (patch) | |
| tree | 9864794831fd72fb0a911260ca566b6d88078ddb /src/main/java | |
| parent | 9dd1074673930b760e74415e9c9dbacf759b90e2 (diff) | |
Extract function to parse source files
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ShedCompiler.java | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java index 7b96a524..02aaf05b 100644 --- a/src/main/java/org/shedlang/compiler/ShedCompiler.java +++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java @@ -1,5 +1,6 @@ package org.shedlang.compiler; +import org.shedlang.compiler.ast.untyped.UntypedNamespaceNode; import org.shedlang.compiler.backends.Backend; import org.shedlang.compiler.config.ProjectConfig; import org.shedlang.compiler.parser.Parser; @@ -36,6 +37,8 @@ public class ShedCompiler { var sourceFilePaths = collectSourceFilePaths(sourceRoot); + var untypedNamespaceNodes = parseSource(sourceRoot, sourceFilePaths); + var namespaces = new ArrayList<StackIrNamespace>(); var typeCheckerContext = TypeCheckerContext.EMPTY @@ -52,6 +55,23 @@ public class ShedCompiler { Map.entry(ShedBuiltins.PRINT_NAME, ShedBuiltins.PRINT_TYPE) )); + for (var untypedNamespaceNode : untypedNamespaceNodes) { + var typeCheckNamespaceResult = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext); + typeCheckerContext = typeCheckNamespaceResult.context(); + + var stackIrNamespace = StackCompiler.compileNamespace(typeCheckNamespaceResult.value()); + namespaces.add(stackIrNamespace); + } + + backend.compile(config, namespaces, typeCheckerContext.toTypeInfos(), config.targetDir().resolve(backend.name())); + } + + private List<UntypedNamespaceNode> parseSource( + Path sourceRoot, + List<Path> sourceFilePaths + ) throws IOException { + var untypedNamespaceNodes = new ArrayList<UntypedNamespaceNode>(); + for (var sourceFilePath : sourceFilePaths) { var namespaceNameParts = StreamSupport.stream(sourceRoot.relativize(sourceFilePath).spliterator(), false) .map(element -> { @@ -67,14 +87,10 @@ public class ShedCompiler { var tokens = tokenise(source); var untypedNode = Parser.parseNamespace(tokens, namespaceName); - var typeCheckNamespaceResult = TypeChecker.typeCheckNamespace(untypedNode, typeCheckerContext); - typeCheckerContext = typeCheckNamespaceResult.context(); - - var stackIrNamespace = StackCompiler.compileNamespace(typeCheckNamespaceResult.value()); - namespaces.add(stackIrNamespace); + untypedNamespaceNodes.add(untypedNode); } - backend.compile(config, namespaces, typeCheckerContext.toTypeInfos(), config.targetDir().resolve(backend.name())); + return untypedNamespaceNodes; } private List<Path> collectSourceFilePaths(Path sourceRoot) throws IOException { |
