summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hobgoblin/src/output/lang/rust/ast.hob1
-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
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