summaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java16
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java2
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIteratorLoopExpression.java48
3 files changed, 65 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
index d4228b0..d916311 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java
@@ -347,6 +347,10 @@ public class RustWriter implements AutoCloseable {
this.writeIntegerLiteral(integerLiteral);
}
+ case RustIteratorLoopExpression iteratorLoopExpression -> {
+ this.writeIteratorLoopExpression(iteratorLoopExpression);
+ }
+
case RustPath path -> {
this.writePath(path);
}
@@ -405,6 +409,7 @@ public class RustWriter implements AutoCloseable {
case RustFieldExpression _ -> RustPrecedence.FIELD_EXPRESSIONS;
case RustIfExpression _ -> RustPrecedence.PRIMARY;
case RustIntegerLiteral _ -> RustPrecedence.PRIMARY;
+ case RustIteratorLoopExpression _ -> RustPrecedence.PRIMARY;
case RustPath _ -> RustPrecedence.PATHS;
case RustPrefixExpression _ -> RustPrecedence.PREFIX;
case RustStructExpression _ -> RustPrecedence.PRIMARY;
@@ -517,6 +522,17 @@ public class RustWriter implements AutoCloseable {
}
}
+ private void writeIteratorLoopExpression(
+ RustIteratorLoopExpression iteratorLoopExpression
+ ) throws IOException {
+ this.writer.write("for ");
+ this.writeIdentifier(iteratorLoopExpression.elementName());
+ this.writer.write(" in ");
+ this.writeTopLevelExpression(iteratorLoopExpression.elements());
+ this.writer.write(" ");
+ this.writeBlockExpression(iteratorLoopExpression.body());
+ }
+
private void writePrefixExpression(RustPrefixExpression prefixExpression) throws IOException {
this.writer.write(switch (prefixExpression.operator()) {
case BORROW -> "&";
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
index 95ca9f8..239f972 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustExpression.java
@@ -5,7 +5,7 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression imports
-public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustArrayRepeatExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIfExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPath, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTryPropagationExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustVecRepeatExpression {
+public sealed interface RustExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustArrayRepeatExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBinaryExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustCallExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustFieldExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIfExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPath, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPrefixExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustStructExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTryPropagationExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustTupleExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustVecRepeatExpression {
public interface Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression build();
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIteratorLoopExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIteratorLoopExpression.java
new file mode 100644
index 0000000..0cd1ceb
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIteratorLoopExpression.java
@@ -0,0 +1,48 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression imports
+
+public record RustIteratorLoopExpression(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier elementName, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression elements, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build(), org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.arbitrary().build());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier elementName, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression elements, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression(elementName, elements, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withElementName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier elementName) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName, elements, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withElementName(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier.Builder elementName) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName.build(), elements, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withElements(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression elements) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName, elements, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withElements(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder elements) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName, elements.build(), body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression body) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName, elements, body);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder withBody(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBlockExpression.Builder body) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder(elementName, elements, body.build());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIteratorLoopExpression body
+}