diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-18 09:59:06 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-18 09:59:06 +0100 |
| commit | d4a22c167efa7707d75fb952e5e98ec95b0c7dfd (patch) | |
| tree | 68967d1a631629680cc296e5939bdc9536b6b388 | |
| parent | c82fcaa28e77fce24db5956862ca6355c1a8397d (diff) | |
Add dereference expression 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 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 |
