diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-14 22:32:00 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-14 22:32:00 +0100 |
| commit | 98b7b7bcf1ea27533c04757628b0ad2cf72fe09a (patch) | |
| tree | 448d9da32afcdb4874928d65fd6c70ee97fbbdb8 | |
| parent | f429cfc456599b260a83816ab3761aec46e4a72c (diff) | |
Add mutable borrows to Rust AST
4 files changed, 16 insertions, 1 deletions
diff --git a/hobgoblin/src/output/lang/rust/ast.hob b/hobgoblin/src/output/lang/rust/ast.hob index f9fe379..c37d72e 100644 --- a/hobgoblin/src/output/lang/rust/ast.hob +++ b/hobgoblin/src/output/lang/rust/ast.hob @@ -167,6 +167,7 @@ struct RustPrefixExpression { enum RustPrefixOperator { variant borrow; + variant borrowMutable; } struct RustStructExpression { 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 43442d2..19b194f 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 @@ -405,6 +405,7 @@ public class RustWriter implements AutoCloseable { private void writePrefixExpression(RustPrefixExpression prefixExpression) throws IOException { this.writer.write(switch (prefixExpression.operator()) { case BORROW -> "&"; + case BORROW_MUTABLE -> "&mut "; }); this.writeExpression(prefixExpression.operand()); } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java index d5c69c1..f2c0aa8 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java @@ -6,7 +6,8 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator imports public enum RustPrefixOperator { - BORROW + BORROW, + BORROW_MUTABLE // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator body // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator body diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java index aa6c887..e4cee1e 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java @@ -549,6 +549,18 @@ public class RustWriterTests { assertThat(string, equalTo("&x")); } + @Test + public void borrowMutableExpression() throws IOException { + var rust = RustPrefixExpression.arbitrary() + .withOperator(RustPrefixOperator.BORROW_MUTABLE) + .withOperand(RustPath.of("x")) + .build(); + + var string = write(writer -> writer.writeExpression(rust)); + + assertThat(string, equalTo("&mut x")); + } + // === Struct expressions === @Test |
