summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java15
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/Generator.java3
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/generators/javatypes/JavaTypesGenerator.java3
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);