From 2fa409c86fc3f4426c640c3715b3c15e8cd30a3c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 10 Jul 2026 20:55:01 +0100 Subject: Add less than operator to Java AST --- hobgoblin/src/output/lang/java/ast.hob | 1 + .../hobgoblin/compiler/output/lang/java/JavaWriter.java | 3 +++ .../compiler/output/lang/java/ast/JavaBinaryOperator.java | 1 + .../compiler/output/lang/java/JavaWriterTests.java | 13 +++++++++++++ 4 files changed, 18 insertions(+) diff --git a/hobgoblin/src/output/lang/java/ast.hob b/hobgoblin/src/output/lang/java/ast.hob index f44e4af..5ec34a1 100644 --- a/hobgoblin/src/output/lang/java/ast.hob +++ b/hobgoblin/src/output/lang/java/ast.hob @@ -192,6 +192,7 @@ enum JavaBinaryOperator { variant bitwiseOr; variant equalTo; variant leftShift; + variant lessThan; 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 7b402b7..18df14e 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 @@ -609,6 +609,7 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> JavaPrecedence.BITWISE_INCLUSIVE_OR; case EQUAL_TO -> JavaPrecedence.EQUALITY; case LEFT_SHIFT -> JavaPrecedence.SHIFT; + case LESS_THAN -> JavaPrecedence.RELATIONAL; case NOT_EQUAL_TO -> JavaPrecedence.EQUALITY; case UNSIGNED_RIGHT_SHIFT -> JavaPrecedence.SHIFT; }; @@ -630,6 +631,7 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> "|"; case EQUAL_TO -> "=="; case LEFT_SHIFT -> "<<"; + case LESS_THAN -> "<"; case NOT_EQUAL_TO -> "!="; case UNSIGNED_RIGHT_SHIFT -> ">>>"; }); @@ -648,6 +650,7 @@ public class JavaWriter implements AutoCloseable { case BITWISE_OR -> true; case EQUAL_TO -> true; case LEFT_SHIFT -> true; + case LESS_THAN -> 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 a3284e6..4eaa2a5 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 @@ -11,6 +11,7 @@ public enum JavaBinaryOperator { BITWISE_OR, EQUAL_TO, LEFT_SHIFT, + LESS_THAN, 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 02f471c..4daf608 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 @@ -1006,6 +1006,19 @@ public class JavaWriterTests { assertThat(string, equalTo("x == y")); } + @Test + public void binaryOperationLessThan() throws IOException { + var java = new JavaBinaryOperation( + JavaBinaryOperator.LESS_THAN, + new JavaRef(JavaIdentifier.of("x")), + new JavaIntegerLiteral(42) + ); + + var string = write(writer -> writer.writeTopLevelExpression(java)); + + assertThat(string, equalTo("x < 42")); + } + @Test public void binaryOperationNotEqualTo() throws IOException { var java = new JavaBinaryOperation( -- cgit v1.2.3