diff options
Diffstat (limited to 'src/main/java/org')
4 files changed, 29 insertions, 12 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java index c421ca4..5ad86de 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rust/RustGenerator.java @@ -92,7 +92,7 @@ public class RustGenerator { return new RustTypePath(segments); } - private List<RustIdentifier> namespaceNameToRustCrateModulePath(NamespaceName namespaceName) { + public List<RustIdentifier> namespaceNameToRustCrateModulePath(NamespaceName namespaceName) { return namespaceName.parts().stream() .map(part -> generateModuleName(part)) .toList(); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java index 822f229..6f53ba2 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttransient0/RustTransient0Generator.java @@ -3,12 +3,16 @@ package org.zwobble.hobgoblin.compiler.output.generators.rusttransient0; import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; import org.zwobble.hobgoblin.compiler.config.OutputConfig; import org.zwobble.hobgoblin.compiler.output.generators.Generator; +import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGenerator; import org.zwobble.hobgoblin.compiler.output.generators.rust.RustGeneratorConfig; +import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier; +import org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustModule; import org.zwobble.hobgoblin.compiler.typechecker.TypesInfo; import org.zwobble.json5.reader.Json5ObjectReader; import java.io.IOException; import java.nio.file.Path; +import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -26,20 +30,36 @@ public class RustTransient0Generator implements Generator { var rustConfig = RustGeneratorConfig.parseLangsConfig(langsJson); - return new RustTransient0Generator(outputPath, rustConfig); + var rustGenerator = new RustGenerator(outputPath, rustConfig); + + return new RustTransient0Generator(rustGenerator, rustConfig); }; } - private final Path outputPath; + private final RustGenerator rustGenerator; private final RustGeneratorConfig config; - private RustTransient0Generator(Path outputPath, RustGeneratorConfig config) { - this.outputPath = outputPath; + private RustTransient0Generator(RustGenerator rustGenerator, RustGeneratorConfig config) { + this.rustGenerator = rustGenerator; this.config = config; } @Override public void generate(List<TypedNamespaceNode> namespaces, TypesInfo typesInfo) throws IOException { + for (var namespace : namespaces) { + var rustModule = generateNamespace(namespace); + + this.rustGenerator.write(rustModule); + } + } + + private RustModule generateNamespace(TypedNamespaceNode namespace) { + var moduleName = new ArrayList<>(this.rustGenerator.namespaceNameToRustCrateModulePath(namespace.namespaceName())); + moduleName.add(RustIdentifier.of("transient_0")); + return new RustModule( + moduleName, + List.of() + ); } } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java index d1248b4..aab7284 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/generators/rusttypes/RustTypesGenerator.java @@ -56,7 +56,7 @@ public class RustTypesGenerator implements Generator { } private RustModule generateNamespace(TypedNamespaceNode namespace, Context context) { - var rustModuleName = generateNamespaceName(namespace.namespaceName()); + var rustModuleName = this.rustGenerator.namespaceNameToRustCrateModulePath(namespace.namespaceName()); var rustItems = namespace.body().stream() .flatMap(statement -> generateNamespaceStatement(statement, context).stream()) @@ -65,12 +65,6 @@ public class RustTypesGenerator implements Generator { return new RustModule(rustModuleName, rustItems); } - private List<RustIdentifier> generateNamespaceName(NamespaceName namespaceName) { - return namespaceName.parts().stream() - .map(part -> this.rustGenerator.generateModuleName(part)) - .toList(); - } - private List<RustItem> generateNamespaceStatement( TypedNamespaceStatementNode statement, Context context diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIdentifier.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIdentifier.java index 34e0ff7..c6c3000 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIdentifier.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIdentifier.java @@ -24,5 +24,8 @@ public record RustIdentifier(String value) { } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier body + public static RustIdentifier of(String name) { + return new RustIdentifier(name); + } // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier body } |
