diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-07-18 10:10:03 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-07-18 10:10:03 +0100 |
| commit | 3ea197f9f1deec604e99f2bf2292acd3fc7d3ac7 (patch) | |
| tree | 7b10012aeb4c6961afdfad823d6de92cde39b76f | |
| parent | f1cd9657920232dbc7fa792ed2def4e8b34b19cd (diff) | |
Add add operator to Rust AST
5 files changed, 17 insertions, 1 deletions
diff --git a/hobgoblin/src/output/lang/rust/ast.hob b/hobgoblin/src/output/lang/rust/ast.hob index 001972c..21cfbb7 100644 --- a/hobgoblin/src/output/lang/rust/ast.hob +++ b/hobgoblin/src/output/lang/rust/ast.hob @@ -149,6 +149,7 @@ struct RustBinaryExpression { } enum RustBinaryOperator { + variant add; variant equal; variant notEqual; } 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 3acb799..e4b24a8 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 @@ -381,6 +381,7 @@ public class RustWriter implements AutoCloseable { this.writeExpression(binaryExpression.left()); this.writer.write(" "); this.writer.write(switch (binaryExpression.operator()) { + case ADD -> "+"; case EQUAL -> "=="; case NOT_EQUAL -> "!="; }); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryExpression.java index 5344f84..8cd86ad 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryExpression.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryExpression.java @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; public record RustBinaryExpression(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryOperator operator, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression left, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression right) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression { public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryExpression.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryExpression.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryOperator.EQUAL, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryExpression.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryOperator.ADD, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryOperator operator, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression left, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression right) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryOperator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryOperator.java index 5adad69..1d9fff7 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryOperator.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryOperator.java @@ -6,6 +6,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast; // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryOperator imports public enum RustBinaryOperator { + ADD, EQUAL, NOT_EQUAL 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 fff5923..862d08b 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 @@ -411,6 +411,19 @@ public class RustWriterTests { // === Binary expressions === @Test + public void binaryExpressionAdd() throws IOException { + var rust = RustBinaryExpression.arbitrary() + .withOperator(RustBinaryOperator.ADD) + .withLeft(RustPath.of("x")) + .withRight(RustPath.of("y")) + .build(); + + var string = write(writer -> writer.writeExpression(rust)); + + assertThat(string, equalTo("x + y")); + } + + @Test public void binaryExpressionEqual() throws IOException { var rust = RustBinaryExpression.arbitrary() .withOperator(RustBinaryOperator.EQUAL) |
