From edcaf92f6189a9f1af4978606d4948b56aca07b1 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Tue, 14 Jul 2026 22:35:53 +0100 Subject: Support mutable lets in Rust AST --- .../compiler/output/lang/rust/RustWriter.java | 5 +++++ .../output/lang/rust/ast/RustLetStatement.java | 20 ++++++++++++-------- 2 files changed, 17 insertions(+), 8 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 19b194f..6febdde 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 @@ -300,6 +300,11 @@ public class RustWriter implements AutoCloseable { private void writeLetStatement(RustLetStatement letStatement) throws IOException { this.writer.write("let "); + + if (letStatement.mutable()) { + this.writer.write("mut "); + } + this.writeIdentifier(letStatement.variableName()); this.writer.write(" = "); this.writeExpression(letStatement.value()); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLetStatement.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLetStatement.java index 810218f..876351f 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLetStatement.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLetStatement.java @@ -5,30 +5,34 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement imports -public record RustLetStatement(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier variableName, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement { +public record RustLetStatement(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier variableName, boolean mutable, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement { public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), false, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build()); } - public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier variableName, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement.Builder { + public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier variableName, boolean mutable, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStatement.Builder { public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement build() { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement(variableName, value); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement(variableName, mutable, value); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder withVariableName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier variableName) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, value); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, mutable, value); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder withVariableName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder variableName) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName.build(), value); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName.build(), mutable, value); + } + + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder withMutable(boolean mutable) { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, mutable, value); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder withValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression value) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, value); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, mutable, value); } public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder withValue(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder value) { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, value.build()); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder(variableName, mutable, value.build()); } // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLetStatement.Builder body -- cgit v1.2.3