summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-14 22:32:00 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-14 22:32:00 +0100
commit98b7b7bcf1ea27533c04757628b0ad2cf72fe09a (patch)
tree448d9da32afcdb4874928d65fd6c70ee97fbbdb8 /src
parentf429cfc456599b260a83816ab3761aec46e4a72c (diff)
Add mutable borrows to Rust AST
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java3
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java12
3 files changed, 15 insertions, 1 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 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