summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-03 12:20:28 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-03 12:20:28 +0100
commit5cafba08830a07cbe59ac61c9f5c06bc04d0022b (patch)
treec2d20cb6b0d565412cce6799c0d79efab6dca2c2 /src/main
parent8dc5c03a23d1ab5f07848bbc217059de96eed30a (diff)
Add block expression to Rust AST
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java23
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBlockExpression.java44
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpressionStatement.java2
4 files changed, 69 insertions, 2 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 23643a6..f2a3c43 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
@@ -221,12 +221,35 @@ public class RustWriter implements AutoCloseable {
void writeExpression(RustExpression expression) throws IOException {
switch (expression) {
+ case RustBlockExpression blockExpression -> {
+ this.writeBlockExpression(blockExpression);
+ }
+
case RustBoolLiteral boolLiteral -> {
this.writeBoolLiteral(boolLiteral);
}
}
}
+ private void writeBlockExpression(RustBlockExpression blockExpression) throws IOException {
+ this.writer.write("{");
+ this.writer.indent();
+
+ for (var statement : blockExpression.statements()) {
+ this.writer.newLine();
+ this.writeStatement(statement);
+ }
+
+ if (blockExpression.finalOperand().isPresent()) {
+ this.writer.newLine();
+ this.writeExpression(blockExpression.finalOperand().get());
+ }
+
+ this.writer.dedent();
+ this.writer.newLine();
+ this.writer.write("}");
+ }
+
private void writeBoolLiteral(RustBoolLiteral boolLiteral) throws IOException {
this.writer.write(boolLiteral.value() ? "true" : "false");
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBlockExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBlockExpression.java
new file mode 100644
index 0000000..794290d
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBlockExpression.java
@@ -0,0 +1,44 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression imports
+
+public record RustBlockExpression(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement> statements, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression> finalOperand) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder(java.util.List.of(), java.util.Optional.empty());
+ }
+
+ public record Builder(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement> statements, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression> finalOperand) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression(statements, finalOperand);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder withStatements(java.util.List<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement> statements) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder(statements, finalOperand);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder addStatement(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement statement) {
+ var statements = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement>(this.statements);
+ statements.add(statement);
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder(statements, finalOperand);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder addStatement(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement.Builder statement) {
+ var statements = new java.util.ArrayList<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement>(this.statements);
+ statements.add(statement.build());
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder(statements, finalOperand);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder withFinalOperand(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression> finalOperand) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder(statements, finalOperand);
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
index f665e26..13c50b0 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
@@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
-public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral {
+public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral {
public interface Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression build();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpressionStatement.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpressionStatement.java
index 3083b79..3f5076d 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpressionStatement.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpressionStatement.java
@@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
public record RustExpressionStatement(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression expression) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement {
public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpressionStatement.Builder arbitrary() {
- return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpressionStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral.arbitrary().build());
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpressionStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build());
}
public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression expression) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement.Builder {