diff options
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 3b00b0e..57c406d 100644 --- a/hobgoblin/src/output/lang/java/ast.hob +++ b/hobgoblin/src/output/lang/java/ast.hob @@ -176,6 +176,7 @@ struct JavaBinaryOperation { enum JavaBinaryOperator { variant assign; variant bitwiseAnd; + variant leftShift; 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 95e3081..393447c 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 @@ -52,6 +52,7 @@ public class JavaWriter implements AutoCloseable { this.writer.write(switch (binaryOperation.operator()) { case ASSIGN -> "="; case BITWISE_AND -> "&"; + case LEFT_SHIFT -> "<<"; case UNSIGNED_RIGHT_SHIFT -> ">>>"; }); this.writer.write(" "); @@ -66,6 +67,7 @@ public class JavaWriter implements AutoCloseable { return switch (operator) { case ASSIGN -> false; case BITWISE_AND -> true; + case LEFT_SHIFT -> true; case UNSIGNED_RIGHT_SHIFT -> true; }; } @@ -344,6 +346,7 @@ public class JavaWriter implements AutoCloseable { return switch (binaryOperation.operator()) { case ASSIGN -> JavaPrecedence.ASSIGNMENT; case BITWISE_AND -> JavaPrecedence.BITWISE_AND; + case LEFT_SHIFT -> JavaPrecedence.SHIFT; case UNSIGNED_RIGHT_SHIFT -> JavaPrecedence.SHIFT; }; } 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 44073fa..ba89103 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 @@ -8,6 +8,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public enum JavaBinaryOperator { ASSIGN, BITWISE_AND, + LEFT_SHIFT, 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 25b2c9f..c487515 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 @@ -849,6 +849,19 @@ public class JavaWriterTests { } @Test + public void binaryOperationUnsignedLeftShift() throws IOException { + var java = JavaBinaryOperation.arbitrary() + .withOperator(JavaBinaryOperator.LEFT_SHIFT) + .withLeft(JavaRef.arbitrary().withName(JavaIdentifier.of("x"))) + .withRight(JavaRef.arbitrary().withName(JavaIdentifier.of("y"))) + .build(); + + var string = write(writer -> writer.writeTopLevelExpression(java)); + + assertThat(string, equalTo("x << y")); + } + + @Test public void binaryOperationUnsignedRightShift() throws IOException { var java = JavaBinaryOperation.arbitrary() .withOperator(JavaBinaryOperator.UNSIGNED_RIGHT_SHIFT) |
