summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriter.java10
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaAssignment.java7
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java2
-rw-r--r--src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/JavaWriterTests.java12
4 files changed, 30 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 a7a3775..8fbdacc 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
@@ -37,6 +37,12 @@ public class JavaWriter implements AutoCloseable {
this.writer.close();
}
+ private void writeAssignment(JavaAssignment assignment) throws IOException {
+ this.writeExpression(assignment.left());
+ this.writer.write(" = ");
+ this.writeExpression(assignment.right());
+ }
+
public void writeCompilationUnit(JavaCompilationUnit compilationUnit) throws IOException {
this.writer.writeHeader();
this.writer.write("package ");
@@ -173,6 +179,10 @@ public class JavaWriter implements AutoCloseable {
void writeExpression(JavaExpression expression) throws IOException {
switch (expression) {
+ case JavaAssignment assignment -> {
+ writeAssignment(assignment);
+ }
+
case JavaIntegerLiteral integerLiteral -> {
writeIntegerLiteral(integerLiteral);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaAssignment.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaAssignment.java
new file mode 100644
index 0000000..b53e192
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaAssignment.java
@@ -0,0 +1,7 @@
+package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
+
+public record JavaAssignment(
+ JavaExpression left,
+ JavaExpression right
+) implements JavaExpression {
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
index 8bd706f..195441b 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaExpression.java
@@ -1,4 +1,4 @@
package org.zwobble.hobgoblin.compiler.output.lang.java.ast;
-public sealed interface JavaExpression permits JavaIntegerLiteral, JavaMethodCall, JavaNewExpression, JavaNullLiteral, JavaRef, JavaStaticFieldAccess, JavaStaticMethodCall, JavaStringLiteral {
+public sealed interface JavaExpression permits JavaAssignment, JavaIntegerLiteral, JavaMethodCall, JavaNewExpression, JavaNullLiteral, JavaRef, JavaStaticFieldAccess, JavaStaticMethodCall, JavaStringLiteral {
}
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 8966d5e..14feaaa 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
@@ -726,6 +726,18 @@ public class JavaWriterTests {
}
@Test
+ public void assignment() throws IOException {
+ var java = new JavaAssignment(
+ new JavaRef("x"),
+ new JavaIntegerLiteral(42)
+ );
+
+ var string = write(writer -> writer.writeExpression(java));
+
+ assertThat(string, equalTo("x = 42"));
+ }
+
+ @Test
public void staticFieldAccess() throws IOException {
var java = new JavaStaticFieldAccess(
JavaTypeRef.topLevel(List.of("one"), "Two"),