diff options
12 files changed, 105 insertions, 7 deletions
diff --git a/hobgoblin/src/output/lang/java/ast.hob b/hobgoblin/src/output/lang/java/ast.hob index 46b5c53..5e289ff 100644 --- a/hobgoblin/src/output/lang/java/ast.hob +++ b/hobgoblin/src/output/lang/java/ast.hob @@ -154,6 +154,7 @@ struct JavaReturn { sum JavaExpression { variant JavaAssignment; + variant JavaBooleanLiteral; variant JavaFieldAccess; variant JavaIntegerLiteral; variant JavaMethodCall; @@ -171,6 +172,10 @@ struct JavaAssignment { field right: JavaExpression; } +struct JavaBooleanLiteral { + field value: Bool; +} + struct JavaFieldAccess { field receiver: JavaExpression; field fieldName: JavaIdentifier; 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 4f39c78..be48e42 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 @@ -45,6 +45,10 @@ public class JavaWriter implements AutoCloseable { this.writeExpression(assignment.right()); } + private void writeBooleanLiteral(JavaBooleanLiteral booleanLiteral) throws IOException { + this.writer.write(booleanLiteral.value() ? "true" : "false"); + } + public void writeCompilationUnit(JavaCompilationUnit compilationUnit) throws IOException { this.writer.writeHeader(); this.writer.write("package "); @@ -226,6 +230,10 @@ public class JavaWriter implements AutoCloseable { writeAssignment(assignment); } + case JavaBooleanLiteral booleanLiteral -> { + writeBooleanLiteral(booleanLiteral); + } + case JavaFieldAccess fieldAccess -> { writeFieldAccess(fieldAccess); } 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 index 9ed2991..d9ca0c1 100644 --- 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 @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaAssignment(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression left, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression right) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaAssignment.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaAssignment.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaAssignment.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression left, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression right) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteral.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteral.java new file mode 100644 index 0000000..377ea3b --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteral.java @@ -0,0 +1,28 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral imports + +public record JavaBooleanLiteral(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression { + public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder arbitrary() { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder(false); + } + + public record Builder(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder { + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral build() { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral(value); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder withValue(boolean value) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder(value); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.Builder body + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral body +} 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 5e819d7..00a491e 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 @@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression imports -public sealed interface JavaExpression permits org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaAssignment, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaFieldAccess, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodCall, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodRef, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaNewExpression, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaNullLiteral, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaRef, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticFieldAccess, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStringLiteral { +public sealed interface JavaExpression permits org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaAssignment, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaFieldAccess, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodCall, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodRef, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaNewExpression, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaNullLiteral, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaRef, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticFieldAccess, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStaticMethodCall, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaStringLiteral { public interface Builder { public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression build(); 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 index 690a2d9..a471bc1 100644 --- 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 @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaExpressionStatement(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression expression) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpressionStatement.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpressionStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpressionStatement.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression expression) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java index bc87152..65d242c 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaFieldAccess.java @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaFieldAccess(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression receiver, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier fieldName) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaFieldAccess.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaFieldAccess.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaFieldAccess.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression receiver, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier fieldName) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java index dbf7eea..0993172 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaLocalVariableDeclaration.java @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaLocalVariableDeclaration(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier name, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression initializer) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodCall.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodCall.java index 1905ee3..bef1cce 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodCall.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaMethodCall.java @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaMethodCall(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression receiver, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier methodName, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> args) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodCall.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodCall.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), java.util.List.of()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaMethodCall.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier.arbitrary().build(), java.util.List.of()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression receiver, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIdentifier methodName, java.util.List<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> args) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder { diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaReturn.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaReturn.java index 35bc894..3220ca1 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaReturn.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaReturn.java @@ -7,7 +7,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; public record JavaReturn(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaReturn.Builder arbitrary() { - return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaReturn.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaIntegerLiteral.arbitrary().build()); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaReturn.Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.arbitrary().build()); } public record Builder(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression value) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { 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 3967c2b..aa0dc96 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 @@ -791,6 +791,24 @@ public class JavaWriterTests { } @Test + public void falseLiteral() throws IOException { + var java = new JavaBooleanLiteral(false); + + var string = write(writer -> writer.writeExpression(java)); + + assertThat(string, equalTo("false")); + } + + @Test + public void trueLiteral() throws IOException { + var java = new JavaBooleanLiteral(true); + + var string = write(writer -> writer.writeExpression(java)); + + assertThat(string, equalTo("true")); + } + + @Test public void integerLiteral() throws IOException { var java = new JavaIntegerLiteral(42); diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteralMatcher.java b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteralMatcher.java new file mode 100644 index 0000000..56308d4 --- /dev/null +++ b/src/test/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBooleanLiteralMatcher.java @@ -0,0 +1,39 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher imports + +public class JavaBooleanLiteralMatcher implements org.zwobble.precisely.Matcher<java.lang.Object> { + public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher isJavaBooleanLiteral() { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher(java.util.List.of()); + } + + private final java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral>> submatchers; + + private JavaBooleanLiteralMatcher(java.util.List<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral>> submatchers) { + this.submatchers = submatchers; + } + + public org.zwobble.precisely.MatchResult match(java.lang.Object actual) { + return this.toMatcher().match(actual); + } + + public org.zwobble.precisely.TextTree describe() { + return this.toMatcher().describe(); + } + + private org.zwobble.precisely.Matcher<java.lang.Object> toMatcher() { + return org.zwobble.precisely.Matchers.instanceOf(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral.class, this.submatchers); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher withValue(org.zwobble.precisely.Matcher<? super Boolean> value) { + var submatchers = new java.util.ArrayList<org.zwobble.precisely.Matcher<? super org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral>>(this.submatchers); + submatchers.add(org.zwobble.precisely.Matchers.has("value", org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteral::value, value)); + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher(submatchers); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBooleanLiteralMatcher body +} |
