summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-18 10:10:03 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-18 10:10:03 +0100
commit3ea197f9f1deec604e99f2bf2292acd3fc7d3ac7 (patch)
tree7b10012aeb4c6961afdfad823d6de92cde39b76f
parentf1cd9657920232dbc7fa792ed2def4e8b34b19cd (diff)
Add add operator to Rust AST
-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/RustBinaryExpression.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBinaryOperator.java1
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriterTests.java13
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)