summaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-03 12:31:42 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-03 12:31:42 +0100
commit3d4581cbac49ff887a53c21d064b19750f02f6e6 (patch)
tree5a8ba39d2702123db83755b5cb719b8c05356d65 /src/main/java/org/zwobble
parentaa397d67f7948d2ee0c89310147390eb0e288a73 (diff)
Add body to Rust functions
Diffstat (limited to 'src/main/java/org/zwobble')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java13
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustFunction.java36
2 files changed, 32 insertions, 17 deletions
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 f2a3c43..5b3c041 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,17 +128,20 @@ public class RustWriter implements AutoCloseable {
}
);
- this.writer.write(") ");
+ this.writer.write(")");
if (function.returnType().isPresent()) {
+ this.writer.write(" ");
this.writer.write("-> ");
this.writeType(function.returnType().get());
- this.writer.write(" ");
}
- this.writer.write("{");
- this.writer.newLine();
- this.writer.write("}");
+ if (function.body().isPresent()) {
+ this.writer.write(" ");
+ this.writeBlockExpression(function.body().get());
+ } else {
+ this.writer.write(";");
+ }
}
private void writeInherentImpl(RustInherentImpl inherentImpl) throws IOException {
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 311da08..be92d98 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,50 +5,62 @@ 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<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> returnType) 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<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> returnType, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression> body) 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(), java.util.Optional.empty());
+ 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(), java.util.Optional.empty());
}
- public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier name, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> returnType) 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<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam> params, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> returnType, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression> body) 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, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction(name, params, returnType, body);
}
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, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
}
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, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name.build(), params, returnType, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withParams(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam> params) {
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
}
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<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam>(this.params);
params.add(param);
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
}
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<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunctionParam>(this.params);
params.add(param.build());
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withReturnType(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType> returnType) {
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
}
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withReturnType(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType returnType) {
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, java.util.Optional.of(returnType));
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, java.util.Optional.of(returnType), body);
}
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withReturnType(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustType.Builder returnType) {
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, java.util.Optional.of(returnType.build()));
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, java.util.Optional.of(returnType.build()), body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withBody(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression> body) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, java.util.Optional.of(body));
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder body) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder(name, params, returnType, java.util.Optional.of(body.build()));
}
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFunction.Builder body