From 30db9ed9ab6922ea703321b09f03e9fa2eb28235 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 2 Jul 2026 23:33:17 +0100 Subject: Add return type to functions --- .../compiler/output/lang/rust/RustWriter.java | 10 +++++++++- .../output/lang/rust/ast/RustFunction.java | 22 +++++++++++++--------- 2 files changed, 22 insertions(+), 10 deletions(-) (limited to 'src/main/java/org') diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java index 432a4ba..1e93d1d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java @@ -128,7 +128,15 @@ public class RustWriter implements AutoCloseable { } ); - this.writer.write(") {"); + this.writer.write(") "); + + if (function.returnType().isPresent()) { + this.writer.write("-> "); + this.writeType(function.returnType().get()); + this.writer.write(" "); + } + + this.writer.write("{"); this.writer.newLine(); this.writer.write("}"); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustFunction.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustFunction.java index 984aae4..b0dda9d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustFunction.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustFunction.java @@ -5,38 +5,42 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction imports -public record RustFunction(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List params) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustAssociatedItem { +public record RustFunction(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List params, java.util.Optional returnType) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustAssociatedItem { public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), java.util.List.of()); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), java.util.List.of(), java.util.Optional.empty()); } - public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List params) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustAssociatedItem.Builder { + public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List params, java.util.Optional returnType) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustAssociatedItem.Builder { public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction build() { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction(name, params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction(name, params, returnType); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder name) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name.build(), params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name.build(), params, returnType); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withParams(java.util.List params) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam param) { var params = new java.util.ArrayList(this.params); params.add(param); - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder addParam(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam.Builder param) { var params = new java.util.ArrayList(this.params); params.add(param.build()); - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType); + } + + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withReturnType(java.util.Optional returnType) { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType); } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder body -- cgit v1.2.3