summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-26 16:17:19 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-26 16:17:19 +0100
commit3ffddab4deb7e1c115936792d45f4ede5b904901 (patch)
tree3d30813169e7cd2e0ba9ed58e47882b3406f0511
parent7272bb92deb55a032ef37e6f3f8549793b1e2a3b (diff)
Add logical 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.java3
-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, 18 insertions, 0 deletions
diff --git a/hobgoblin/src/output/lang/java/ast.hob b/hobgoblin/src/output/lang/java/ast.hob
index 0c09511..341c7ce 100644
--- a/hobgoblin/src/output/lang/java/ast.hob
+++ b/hobgoblin/src/output/lang/java/ast.hob
@@ -245,6 +245,7 @@ enum JavaBinaryOperator {
variant equalTo;
variant leftShift;
variant lessThan;
+ variant logicalAnd;
variant notEqualTo;
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 bc70492..1ca3abd 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
@@ -710,6 +710,7 @@ public class JavaWriter implements AutoCloseable {
case BITWISE_AND -> JavaPrecedence.BITWISE_AND;
case BITWISE_OR -> JavaPrecedence.BITWISE_INCLUSIVE_OR;
case EQUAL_TO -> JavaPrecedence.EQUALITY;
+ case LOGICAL_AND -> JavaPrecedence.LOGICAL_AND;
case LEFT_SHIFT -> JavaPrecedence.SHIFT;
case LESS_THAN -> JavaPrecedence.RELATIONAL;
case NOT_EQUAL_TO -> JavaPrecedence.EQUALITY;
@@ -747,6 +748,7 @@ public class JavaWriter implements AutoCloseable {
case EQUAL_TO -> "==";
case LEFT_SHIFT -> "<<";
case LESS_THAN -> "<";
+ case LOGICAL_AND -> "&&";
case NOT_EQUAL_TO -> "!=";
case UNSIGNED_RIGHT_SHIFT -> ">>>";
});
@@ -767,6 +769,7 @@ public class JavaWriter implements AutoCloseable {
case EQUAL_TO -> true;
case LEFT_SHIFT -> true;
case LESS_THAN -> true;
+ case LOGICAL_AND -> true;
case NOT_EQUAL_TO -> true;
case UNSIGNED_RIGHT_SHIFT -> true;
};
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 e51ad40..34d9d4e 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
@@ -13,6 +13,7 @@ public enum JavaBinaryOperator {
EQUAL_TO,
LEFT_SHIFT,
LESS_THAN,
+ LOGICAL_AND,
NOT_EQUAL_TO,
UNSIGNED_RIGHT_SHIFT
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 fb8b649..178ca0a 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
@@ -1334,6 +1334,19 @@ public class JavaWriterTests {
}
@Test
+ public void binaryOperationLogicalAnd() throws IOException {
+ var java = new JavaBinaryOperation(
+ JavaBinaryOperator.LOGICAL_AND,
+ new JavaRef(JavaIdentifier.of("x")),
+ new JavaRef(JavaIdentifier.of("y"))
+ );
+
+ var string = write(writer -> writer.writeTopLevelExpression(java));
+
+ assertThat(string, equalTo("x && y"));
+ }
+
+ @Test
public void binaryOperationNotEqualTo() throws IOException {
var java = new JavaBinaryOperation(
JavaBinaryOperator.NOT_EQUAL_TO,