summaryrefslogtreecommitdiff
path: root/src/main
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2026-07-19 17:30:38 +0100
committerMichael Williamson <mike@zwobble.org>2026-07-19 17:30:38 +0100
commit1f005669637f624ac5fdd42cb999558cde6aed33 (patch)
tree2067aacd76f6be9bb092f75a5aa2c5f3a700519e /src/main
parentc4e0e6e62565c9e601ff45a366cf5dd31324c13c (diff)
Add literal patterns to Rust AST
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/RustWriter.java22
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBoolLiteral.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIntegerLiteral.java4
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralExpression.java18
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralPattern.java32
-rw-r--r--src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPattern.java2
6 files changed, 77 insertions, 5 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 9c5361b..c3fa404 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
@@ -432,6 +432,18 @@ public class RustWriter implements AutoCloseable {
};
}
+ private void writeLiteralExpression(RustLiteralExpression literal) throws IOException {
+ switch (literal) {
+ case RustBoolLiteral boolLiteral -> {
+ this.writeBoolLiteral(boolLiteral);
+ }
+
+ case RustIntegerLiteral integerLiteral -> {
+ this.writeIntegerLiteral(integerLiteral);
+ }
+ }
+ }
+
private void writeArrayRepeatExpression(RustArrayRepeatExpression arrayRepeatExpression) throws IOException {
this.writer.write("[");
this.writeTopLevelExpression(arrayRepeatExpression.repeatOperand());
@@ -622,6 +634,10 @@ public class RustWriter implements AutoCloseable {
this.writeIdentifierPattern(identifierPattern);
}
+ case RustLiteralPattern literalPattern -> {
+ this.writeLiteralPattern(literalPattern);
+ }
+
case RustPathPattern pathPattern -> {
this.writePathPattern(pathPattern);
}
@@ -638,6 +654,12 @@ public class RustWriter implements AutoCloseable {
this.writeIdentifier(identifierPattern.variableName());
}
+ private void writeLiteralPattern(
+ RustLiteralPattern literalPattern
+ ) throws IOException {
+ this.writeLiteralExpression(literalPattern.literal());
+ }
+
private void writePathPattern(RustPathPattern pathPattern) throws IOException {
this.writePath(pathPattern.path());
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBoolLiteral.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBoolLiteral.java
index 5e6a90a..88377e2 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBoolLiteral.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustBoolLiteral.java
@@ -5,12 +5,12 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral imports
-public record RustBoolLiteral(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression {
+public record RustBoolLiteral(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression {
public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral.Builder arbitrary() {
return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral.Builder(false);
}
- public record Builder(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder {
+ public record Builder(boolean value) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral build() {
return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral(value);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIntegerLiteral.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIntegerLiteral.java
index eb297b0..3764ecf 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIntegerLiteral.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustIntegerLiteral.java
@@ -5,12 +5,12 @@ package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral imports
-public record RustIntegerLiteral(long value, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> type) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression {
+public record RustIntegerLiteral(long value, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> type) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression {
public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral.Builder arbitrary() {
return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral.Builder(0, java.util.Optional.empty());
}
- public record Builder(long value, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> type) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder {
+ public record Builder(long value, java.util.Optional<org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifier> type) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustExpression.Builder, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression.Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral build() {
return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral(value, type);
}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralExpression.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralExpression.java
new file mode 100644
index 0000000..87335b7
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralExpression.java
@@ -0,0 +1,18 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression imports
+
+public sealed interface RustLiteralExpression permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIntegerLiteral {
+ public interface Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression build();
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralPattern.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralPattern.java
new file mode 100644
index 0000000..556ad59
--- /dev/null
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustLiteralPattern.java
@@ -0,0 +1,32 @@
+// Generated by hobgoblin.
+
+package org.zwobble.hobgoblin.compiler.output.lang.rust.ast;
+
+// Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern imports
+// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern imports
+
+public record RustLiteralPattern(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression literal) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPattern {
+ public static org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder arbitrary() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustBoolLiteral.arbitrary().build());
+ }
+
+ public record Builder(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression literal) implements org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPattern.Builder {
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern build() {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern(literal);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder withLiteral(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression literal) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder(literal);
+ }
+
+ public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder withLiteral(org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralExpression.Builder literal) {
+ return new org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder(literal.build());
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern.Builder body
+ }
+
+ // Custom area start: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern body
+ // Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern body
+}
diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPattern.java b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPattern.java
index b012a9c..c24a1ee 100644
--- a/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPattern.java
+++ b/src/main/java/org/zwobble/hobgoblin/compiler/output/lang/rust/ast/RustPattern.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.RustPattern imports
// Custom area end: org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPattern imports
-public sealed interface RustPattern permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifierPattern, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathPattern, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustWildcardPattern {
+public sealed interface RustPattern permits org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustIdentifierPattern, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustLiteralPattern, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPathPattern, org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustWildcardPattern {
public interface Builder {
public org.zwobble.hobgoblin.compiler.output.lang.rust.ast.RustPattern build();