From 3ce11f3a242c2287a14d5f5a4ae230b4c79beaaa Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 28 Aug 2026 13:48:39 +0100 Subject: Add <= and >= operators to Java AST --- .../compiler/output/lang/java/JavaWriter.java | 6 +++++ .../output/lang/java/ast/JavaBinaryOperator.java | 2 ++ .../compiler/output/lang/java/JavaWriterTests.java | 26 ++++++++++++++++++++++ 3 files changed, 34 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 52c2db1..d2f46ad 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 @@ -792,9 +792,11 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> JavaPrecedence.BITWISE_INCLUSIVE_OR; case EQUAL_TO -> JavaPrecedence.EQUALITY; case GREATER_THAN -> JavaPrecedence.RELATIONAL; + case GREATER_THAN_OR_EQUAL -> JavaPrecedence.RELATIONAL; case LOGICAL_AND -> JavaPrecedence.LOGICAL_AND; case LEFT_SHIFT -> JavaPrecedence.SHIFT; case LESS_THAN -> JavaPrecedence.RELATIONAL; + case LESS_THAN_OR_EQUAL -> JavaPrecedence.RELATIONAL; case MULTIPLY -> JavaPrecedence.MULTIPLICATIVE; case NOT_EQUAL_TO -> JavaPrecedence.EQUALITY; case UNSIGNED_RIGHT_SHIFT -> JavaPrecedence.SHIFT; @@ -830,8 +832,10 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> "|"; case EQUAL_TO -> "=="; case GREATER_THAN -> ">"; + case GREATER_THAN_OR_EQUAL -> ">="; case LEFT_SHIFT -> "<<"; case LESS_THAN -> "<"; + case LESS_THAN_OR_EQUAL -> "<="; case LOGICAL_AND -> "&&"; case MULTIPLY -> "*"; case NOT_EQUAL_TO -> "!="; @@ -853,8 +857,10 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> true; case EQUAL_TO -> true; case GREATER_THAN -> true; + case GREATER_THAN_OR_EQUAL -> true; case LEFT_SHIFT -> true; case LESS_THAN -> true; + case LESS_THAN_OR_EQUAL -> true; case LOGICAL_AND -> true; case MULTIPLY -> true; case NOT_EQUAL_TO -> 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 d098691..5c96b0a 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 @@ -12,8 +12,10 @@ public enum JavaBinaryOperator { BITWISE_OR, EQUAL_TO, GREATER_THAN, + GREATER_THAN_OR_EQUAL, LEFT_SHIFT, LESS_THAN, + LESS_THAN_OR_EQUAL, LOGICAL_AND, MULTIPLY, NOT_EQUAL_TO, 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 de39610..6ccf789 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 @@ -1459,6 +1459,19 @@ public class JavaWriterTests { assertThat(string, equalTo("x > 42")); } + @Test + public void binaryOperationGreaterThanOrEqual() throws IOException { + var java = new JavaBinaryOperation( + JavaBinaryOperator.GREATER_THAN_OR_EQUAL, + new JavaRef(JavaIdentifier.of("x")), + new JavaIntegerLiteral(42) + ); + + var string = write(writer -> writer.writeTopLevelExpression(java)); + + assertThat(string, equalTo("x >= 42")); + } + @Test public void binaryOperationLeftShift() throws IOException { var java = JavaBinaryOperation.arbitrary() @@ -1485,6 +1498,19 @@ public class JavaWriterTests { assertThat(string, equalTo("x < 42")); } + @Test + public void binaryOperationLessThanOrEqual() throws IOException { + var java = new JavaBinaryOperation( + JavaBinaryOperator.LESS_THAN_OR_EQUAL, + new JavaRef(JavaIdentifier.of("x")), + new JavaIntegerLiteral(42) + ); + + var string = write(writer -> writer.writeTopLevelExpression(java)); + + assertThat(string, equalTo("x <= 42")); + } + @Test public void binaryOperationLogicalAnd() throws IOException { var java = new JavaBinaryOperation( -- cgit v1.2.3