summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java9
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBlockStatement.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpressionStatement.java4
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java9
4 files changed, 23 insertions, 1 deletions
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<JavaTypeRef> 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
@@ -681,6 +681,15 @@ public class JavaWriterTests {
}
@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));