From e6017ab17bd81d6205b03dc96956b0f0855b5c67 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Mon, 18 May 2026 19:25:48 +0100 Subject: Pass types info into generator --- .../org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 15 +++++++++------ .../hobgoblin/compiler/output/generators/Generator.java | 3 ++- .../output/generators/javatypes/JavaTypesGenerator.java | 3 ++- 3 files changed, 13 insertions(+), 8 deletions(-) (limited to 'src/main/java/org') 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(); + + 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 namespaces) throws IOException; + void generate(List 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 namespaces) throws IOException { + public void generate(List namespaces, TypesInfo typesInfo) throws IOException { for (var namespace : namespaces) { var javaCompilationUnits = generateNamespace(namespace); -- cgit v1.2.3