diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-05-18 19:25:48 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-05-18 19:25:48 +0100 |
| commit | e6017ab17bd81d6205b03dc96956b0f0855b5c67 (patch) | |
| tree | 79722d6d1f453a171fc136e6760432441579c984 /src/main/java | |
| parent | d29c6f1a0c8d19f7a27c25034bc942ca778db7d8 (diff) | |
Pass types info into generator
Diffstat (limited to 'src/main/java')
3 files changed, 13 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index 275051b..40d9453 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -30,23 +30,26 @@ public class HobgoblinCompiler { .listFiles(file -> file.toPath().toString().endsWith(FILE_NAME_EXTENSION)); var typedNamespaceNodes = new ArrayList<TypedNamespaceNode>(); + + var typeCheckerContext = TypeCheckerGlobalContext.initial(); + typeCheckerContext.addNativeType(NativeTypes.INT_32); + typeCheckerContext.addNativeType(NativeTypes.STRING); + typeCheckerContext.addNativeTypeConstructor(NativeTypes.LIST); + for (var sourceFile : sourceFiles) { var namespaceName = sourceFileNamespaceName(sourceDirectory, sourceFile.toPath()); var sourceContents = Files.readString(sourceFile.toPath(), StandardCharsets.UTF_8); var sourceText = SourceText.fromString(sourceFile.toPath().toString(), sourceContents); var untypedNamespaceNode = Parser.parseNamespace(sourceText, namespaceName); - var typeCheckerContext = TypeCheckerGlobalContext.initial(); - typeCheckerContext.addNativeType(NativeTypes.INT_32); - typeCheckerContext.addNativeType(NativeTypes.STRING); - typeCheckerContext.addNativeTypeConstructor(NativeTypes.LIST); - var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext); typedNamespaceNodes.add(typedNamespaceNode); } + var typesInfo = typeCheckerContext.toTypesInfo(); + for (var generator : generators) { - generator.generate(typedNamespaceNodes); + generator.generate(typedNamespaceNodes, typesInfo); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java index 67f8d91..4a73000 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java @@ -1,10 +1,11 @@ package org.zwobble.hobgoblin.compiler.output.generators; import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; +import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import java.io.IOException; import java.util.List; public interface Generator { - void generate(List<TypedNamespaceNode> namespaces) throws IOException; + void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException; } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java index 42839c9..7e785f1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java @@ -11,6 +11,7 @@ import org.zwobble.hobgoblin.compiler.output.CodeWriter; import org.zwobble.hobgoblin.compiler.output.generators.Generator; import org.zwobble.hobgoblin.compiler.output.lang.java.JavaWriter; import org.zwobble.hobgoblin.compiler.output.lang.java.ast.*; +import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.hobgoblin.compiler.types.*; import org.zwobble.json5.values.Json5Object; import org.zwobble.json5.values.Json5String; @@ -43,7 +44,7 @@ public class JavaTypesGenerator implements Generator { } @Override - public void generate(List<TypedNamespaceNode> namespaces) throws IOException { + public void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException { for (var namespace : namespaces) { var javaCompilationUnits = generateNamespace(namespace); |
