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 7a405d4..e0f1061 100644
--- a/hobgoblin/src/output/lang/rust/ast.hob
+++ b/hobgoblin/src/output/lang/rust/ast.hob
@@ -179,6 +179,7 @@ struct RustPrefixExpression {
enum RustPrefixOperator {
variant borrow;
variant borrowMutable;
+ variant dereference;
}
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 0f026a2..8c449f9 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
@@ -435,6 +435,7 @@ public class RustWriter implements AutoCloseable {
this.writer.write(switch (prefixExpression.operator()) {
case BORROW -> "&";
case BORROW_MUTABLE -> "&mut ";
+ case DEREFERENCE -> "*";
});
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 f2c0aa8..a8282de 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
@@ -7,7 +7,8 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
public enum RustPrefixOperator {
BORROW,
- BORROW_MUTABLE
+ BORROW_MUTABLE,
+ DEREFERENCE
// 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 67f3f30..16c774f 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
@@ -606,6 +606,18 @@ public class RustWriterTests {
assertThat(string, equalTo("&mut x"));
}
+ @Test
+ public void dereferenceExpression() throws IOException {
+ var rust = RustPrefixExpression.arbitrary()
+ .withOperator(RustPrefixOperator.DEREFERENCE)
+ .withOperand(RustPath.of("x"))
+ .build();
+
+ var string = write(writer -> writer.writeExpression(rust));
+
+ assertThat(string, equalTo("*x"));
+ }
+
// === Struct expressions ===
@Test