From b7e7ebf6380dcf0c7f02fca9002318d36ffc5b96 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 12 Jun 2026 17:01:17 +0100 Subject: Add Java expression statement --- .../zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java | 9 +++++++++ .../compiler/output/lang/java/ast/JavaBlockStatement.java | 2 +- .../compiler/output/lang/java/ast/JavaExpressionStatement.java | 4 ++++ .../hobgoblin/compiler/output/lang/java/JavaWriterTests.java | 9 +++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpressionStatement.java 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 aec83da..a7a3775 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 @@ -75,6 +75,10 @@ public class JavaWriter implements AutoCloseable { void writeBlockStatement(JavaBlockStatement statement) throws IOException { switch (statement) { + case JavaExpressionStatement expressionStatement -> { + writeExpressionStatement(expressionStatement); + } + case JavaReturn returnStatement -> { writeReturnStatement(returnStatement); } @@ -203,6 +207,11 @@ public class JavaWriter implements AutoCloseable { } } + private void writeExpressionStatement(JavaExpressionStatement expressionStatement) throws IOException { + writeExpression(expressionStatement.expression()); + this.writer.write(";"); + } + private void writeImplements(List implementsTypes) throws IOException { if (!implementsTypes.isEmpty()) { this.writer.write("implements "); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBlockStatement.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBlockStatement.java index 1ee5511..fe3e69a 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBlockStatement.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBlockStatement.java @@ -1,4 +1,4 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; -public sealed interface JavaBlockStatement permits JavaReturn { +public sealed interface JavaBlockStatement permits JavaExpressionStatement, JavaReturn { } diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpressionStatement.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpressionStatement.java new file mode 100644 index 0000000..2ec771f --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpressionStatement.java @@ -0,0 +1,4 @@ +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +public record JavaExpressionStatement(JavaExpression expression) implements JavaBlockStatement { +} 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 8ad22f9..8966d5e 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 @@ -680,6 +680,15 @@ public class JavaWriterTests { assertThat(string, equalTo("return 42;\nreturn 47;")); } + @Test + public void expressionStatement() throws IOException { + var java = new JavaExpressionStatement(new JavaIntegerLiteral(42)); + + var string = write(writer -> writer.writeBlockStatement(java)); + + assertThat(string, equalTo("42;")); + } + @Test public void returnStatement() throws IOException { var java = new JavaReturn(new JavaIntegerLiteral(42)); -- cgit v1.2.3