From 3ffddab4deb7e1c115936792d45f4ede5b904901 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 26 Jul 2026 16:17:19 +0100 Subject: Add logical and to Java AST --- .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 3 +++ .../compiler/output/lang/java/ast/JavaBinaryOperator.java | 1 + .../compiler/output/lang/java/JavaWriterTests.java | 13 +++++++++++++ 3 files changed, 17 insertions(+) (limited to 'src') 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 @@ -1333,6 +1333,19 @@ public class JavaWriterTests { assertThat(string, equalTo("x < 42")); } + @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( -- cgit v1.2.3