diff options
Diffstat (limited to 'src/main')
3 files changed, 103 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 52683b5..7b402b7 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 @@ -396,6 +396,10 @@ public class JavaWriter implements AutoCloseable { void writeBlockStatement(JavaBlockStatement statement) throws IOException { switch (statement) { + case JavaBasicForStatement basicForStatement -> { + writeBasicForStatement(basicForStatement); + } + case JavaEnhancedForStatement enhancedForStatement -> { writeEnhancedForStatement(enhancedForStatement); } @@ -414,6 +418,36 @@ public class JavaWriter implements AutoCloseable { } } + private void writeBasicForStatement(JavaBasicForStatement basicForStatement) throws IOException { + this.writer.write("for ("); + + if (basicForStatement.init().isPresent()) { + this.writeLocalVariableDeclaration(basicForStatement.init().get()); + } + + this.writer.write(" "); + + if (basicForStatement.condition().isPresent()) { + this.writeTopLevelExpression(basicForStatement.condition().get()); + } + + this.writer.write("; "); + + if (basicForStatement.update().isPresent()) { + this.writeTopLevelExpression(basicForStatement.update().get()); + } + + this.writer.write(") {"); + this.writer.indent(); + this.writer.newLine(); + + this.writeBlock(basicForStatement.body()); + + this.writer.dedent(); + this.writer.newLine(); + this.writer.write("}"); + } + private void writeEnhancedForStatement(JavaEnhancedForStatement enhancedForStatement) throws IOException { this.writer.write("for ("); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBasicForStatement.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBasicForStatement.java new file mode 100644 index 0000000..fbc6fbb --- /dev/null +++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/java/ast/JavaBasicForStatement.java @@ -0,0 +1,68 @@ +// Generated by hobgoblin. + +package org.zwobble.hobgoblin.compiler.output.lang.java.ast; + +// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement imports +// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement imports + +public record JavaBasicForStatement(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration> init, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> condition, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> update, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement { + public static org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder arbitrary() { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(java.util.Optional.empty(), java.util.Optional.empty(), java.util.Optional.empty(), org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock.arbitrary().build()); + } + + public record Builder(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration> init, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> condition, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> update, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock body) implements org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement.Builder { + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement build() { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement(init, condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withInit(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration> init) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withInit(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration init) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(java.util.Optional.of(init), condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withInit(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration.Builder init) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(java.util.Optional.of(init.build()), condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withCondition(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> condition) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withCondition(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression condition) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, java.util.Optional.of(condition), update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withCondition(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder condition) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, java.util.Optional.of(condition.build()), update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withUpdate(java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression> update) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withUpdate(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression update) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, java.util.Optional.of(update), body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withUpdate(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpression.Builder update) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, java.util.Optional.of(update.build()), body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock body) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, update, body); + } + + public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlock.Builder body) { + return new org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder(init, condition, update, body.build()); + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement.Builder body + } + + // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement body + // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement body +} 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 76098cb..707134c 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 @@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.java.ast; // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement imports // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement imports -public sealed interface JavaBlockStatement permits org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaEnhancedForStatement, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpressionStatement, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaReturn { +public sealed interface JavaBlockStatement permits org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBasicForStatement, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaEnhancedForStatement, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaExpressionStatement, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaLocalVariableDeclaration, org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaReturn { public interface Builder { public org.zwobble.hobgoblin.compiler.output.lang.java.ast.JavaBlockStatement build(); |
