diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-14 21:42:59 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-14 21:42:59 +0100 |
| commit | 02e2a52b22c7e56c396add075446c667f1f54bad (patch) | |
| tree | ad30fc004ffbefc25ea92f066e65653cc2c6e123 /src/main/java/org | |
| parent | bd750da1b6972c56358675f1675e0bb276eac3de (diff) | |
Add borrow expressions to Rust AST
Diffstat (limited to 'src/main/java/org')
4 files changed, 61 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 60641c8..c0550fd 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 @@ -324,6 +324,10 @@ public class RustWriter implements AutoCloseable { case RustPath path -> { this.writePath(path); } + + case RustPrefixExpression prefixExpression -> { + this.writePrefixExpression(prefixExpression); + } case RustStructExpression structExpression -> { this.writeStructExpression(structExpression); @@ -373,6 +377,13 @@ public class RustWriter implements AutoCloseable { this.writeIdentifier(fieldExpression.fieldName()); } + private void writePrefixExpression(RustPrefixExpression prefixExpression) throws IOException { + this.writer.write(switch (prefixExpression.operator()) { + case BORROW -> "&"; + }); + this.writeExpression(prefixExpression.operand()); + } + private void writeStructExpression(RustStructExpression structExpression) throws IOException { this.writePath(structExpression.structPath()); this.writer.write(" {"); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java index 3a14bec..9d6fdcb 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java @@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports -public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPath, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression { +public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPath, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression { public interface Builder { public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression build(); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixExpression.java new file mode 100644 index 0000000..540312f --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixExpression.java @@ -0,0 +1,36 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression imports + +public record RustPrefixExpression(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator operator, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression operand) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression { + public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder arbitrary() { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator.BORROW, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build()); + } + + public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator operator, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression operand) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder { + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression build() { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression(operator, operand); + } + + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder withOperator(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator operator) { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder(operator, operand); + } + + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder withOperand(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression operand) { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder(operator, operand); + } + + public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder withOperand(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder operand) { + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder(operator, operand.build()); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression.Builder body + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression body +} 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 new file mode 100644 index 0000000..d5c69c1 --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPrefixOperator.java @@ -0,0 +1,13 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixOperator imports + +public enum RustPrefixOperator { + BORROW + + // 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 +} |
