summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-04 22:24:57 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-04 22:24:57 +0100
commitaad987d6a5f8360af1d20316e2fbed56f418796c (patch)
treef7ffed49d7924258f5a342ed70771f0be897ba1d
parent2b396e9c0d450596814697e444bd8f44f060de0c (diff)
Add bitwise and to Java AST
-rw-r--r--hobgoblin/src/output/lang/java/ast.hob1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java1
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBinaryOperator.java1
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java13
4 files changed, 16 insertions, 0 deletions
diff --git a/hobgoblin/src/output/lang/java/ast.hob b/hobgoblin/src/output/lang/java/ast.hob
index f380173..3b00b0e 100644
--- a/hobgoblin/src/output/lang/java/ast.hob
+++ b/hobgoblin/src/output/lang/java/ast.hob
@@ -175,6 +175,7 @@ struct JavaBinaryOperation {
enum JavaBinaryOperator {
variant assign;
+ variant bitwiseAnd;
variant unsignedRightShift;
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
index ec91f63..e8e0f40 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java
@@ -44,6 +44,7 @@ public class JavaWriter implements AutoCloseable {
this.writer.write(" ");
this.writer.write(switch (binaryOperation.operator()) {
case ASSIGN -> "=";
+ case BITWISE_AND -> "&";
case UNSIGNED_RIGHT_SHIFT -> ">>>";
});
this.writer.write(" ");
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBinaryOperator.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBinaryOperator.java
index 4f646ba..44073fa 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBinaryOperator.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBinaryOperator.java
@@ -7,6 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
public enum JavaBinaryOperator {
ASSIGN,
+ BITWISE_AND,
UNSIGNED_RIGHT_SHIFT
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBinaryOperator body
diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
index 8c3531f..e1e43ad 100644
--- a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
+++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java
@@ -862,6 +862,19 @@ public class JavaWriterTests {
}
@Test
+ public void binaryOperationBitwiseAnd() throws IOException {
+ var java = JavaBinaryOperation.arbitrary()
+ .withOperator(JavaBinaryOperator.BITWISE_AND)
+ .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("x")))
+ .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("y")))
+ .build();
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("x & y"));
+ }
+
+ @Test
public void fieldAccess() throws IOException {
var java = new JavaFieldAccess(
new JavaRef(JavaIdentifier.of("one")),