From 578bf1f04b48f48225cfa794a27426cca4f6384a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 31 Jul 2026 10:50:10 +0100 Subject: Support singleton structs --- examples/03-inductive-data-types/hobgoblin.json5 | 19 ------------- .../03-inductive-data-types/output/java/.gitignore | 2 -- .../03-inductive-data-types/output/java/pom.xml | 1 - .../main/java/org/zwobble/example/Arithmetic.java | 17 ----------- .../java/org/zwobble/example/ArithmeticTests.java | 24 ---------------- .../03-inductive-data-types/output/rust/.gitignore | 1 - .../03-inductive-data-types/output/rust/Cargo.lock | 7 ----- .../03-inductive-data-types/output/rust/Cargo.toml | 6 ---- .../output/rust/rust-toolchain.toml | 2 -- .../output/rust/src/arithmetic.rs | 30 -------------------- .../03-inductive-data-types/output/rust/src/lib.rs | 33 ---------------------- .../03-inductive-data-types/src/arithmetic.hob | 13 --------- 12 files changed, 155 deletions(-) delete mode 100644 examples/03-inductive-data-types/hobgoblin.json5 delete mode 100644 examples/03-inductive-data-types/output/java/.gitignore delete mode 120000 examples/03-inductive-data-types/output/java/pom.xml delete mode 100644 examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java delete mode 100644 examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java delete mode 100644 examples/03-inductive-data-types/output/rust/.gitignore delete mode 100644 examples/03-inductive-data-types/output/rust/Cargo.lock delete mode 100644 examples/03-inductive-data-types/output/rust/Cargo.toml delete mode 100644 examples/03-inductive-data-types/output/rust/rust-toolchain.toml delete mode 100644 examples/03-inductive-data-types/output/rust/src/arithmetic.rs delete mode 100644 examples/03-inductive-data-types/output/rust/src/lib.rs delete mode 100644 examples/03-inductive-data-types/src/arithmetic.hob (limited to 'examples/03-inductive-data-types') diff --git a/examples/03-inductive-data-types/hobgoblin.json5 b/examples/03-inductive-data-types/hobgoblin.json5 deleted file mode 100644 index 12713d4..0000000 --- a/examples/03-inductive-data-types/hobgoblin.json5 +++ /dev/null @@ -1,19 +0,0 @@ -{ - outputs: { - langs: { - java: { - packageName: "org.zwobble.example.types", - }, - }, - generators: [ - { - generator: "java-types", - path: "output/java/src/gen/java", - }, - { - generator: "rust-types", - path: "output/rust/src", - }, - ], - }, -} diff --git a/examples/03-inductive-data-types/output/java/.gitignore b/examples/03-inductive-data-types/output/java/.gitignore deleted file mode 100644 index ff511d4..0000000 --- a/examples/03-inductive-data-types/output/java/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/src/gen/ -/target/ diff --git a/examples/03-inductive-data-types/output/java/pom.xml b/examples/03-inductive-data-types/output/java/pom.xml deleted file mode 120000 index 445fa65..0000000 --- a/examples/03-inductive-data-types/output/java/pom.xml +++ /dev/null @@ -1 +0,0 @@ -../../../templates/java-junit/pom.xml \ No newline at end of file diff --git a/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java b/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java deleted file mode 100644 index 08cb75c..0000000 --- a/examples/03-inductive-data-types/output/java/src/main/java/org/zwobble/example/Arithmetic.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.zwobble.example; - -import org.zwobble.example.types.arithmetic.Add; -import org.zwobble.example.types.arithmetic.Const; -import org.zwobble.example.types.arithmetic.Expression; - -public class Arithmetic { - public static int eval(Expression expression) { - return switch (expression) { - case Add(var left, var right) -> - eval(left) + eval(right); - - case Const(var value) -> - value; - }; - } -} diff --git a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java b/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java deleted file mode 100644 index cd4fdd0..0000000 --- a/examples/03-inductive-data-types/output/java/src/test/java/org/zwobble/example/ArithmeticTests.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.zwobble.example; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; -import org.zwobble.example.types.arithmetic.Add; -import org.zwobble.example.types.arithmetic.Const; -import org.zwobble.example.types.arithmetic.Expression; - -public class ArithmeticTests { - @Test - public void eval() { - Expression expression = new Add( - new Add( - new Const(42), - new Const(47) - ), - new Const(52) - ); - - int result = Arithmetic.eval(expression); - - assertEquals(result, 141); - } -} diff --git a/examples/03-inductive-data-types/output/rust/.gitignore b/examples/03-inductive-data-types/output/rust/.gitignore deleted file mode 100644 index ea8c4bf..0000000 --- a/examples/03-inductive-data-types/output/rust/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/target diff --git a/examples/03-inductive-data-types/output/rust/Cargo.lock b/examples/03-inductive-data-types/output/rust/Cargo.lock deleted file mode 100644 index 9dc6e3e..0000000 --- a/examples/03-inductive-data-types/output/rust/Cargo.lock +++ /dev/null @@ -1,7 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 4 - -[[package]] -name = "example" -version = "0.1.0" diff --git a/examples/03-inductive-data-types/output/rust/Cargo.toml b/examples/03-inductive-data-types/output/rust/Cargo.toml deleted file mode 100644 index 5d4c622..0000000 --- a/examples/03-inductive-data-types/output/rust/Cargo.toml +++ /dev/null @@ -1,6 +0,0 @@ -[package] -name = "example" -version = "0.1.0" -edition = "2024" - -[dependencies] diff --git a/examples/03-inductive-data-types/output/rust/rust-toolchain.toml b/examples/03-inductive-data-types/output/rust/rust-toolchain.toml deleted file mode 100644 index 4fedb95..0000000 --- a/examples/03-inductive-data-types/output/rust/rust-toolchain.toml +++ /dev/null @@ -1,2 +0,0 @@ -[toolchain] -channel = "1.96" diff --git a/examples/03-inductive-data-types/output/rust/src/arithmetic.rs b/examples/03-inductive-data-types/output/rust/src/arithmetic.rs deleted file mode 100644 index 121c355..0000000 --- a/examples/03-inductive-data-types/output/rust/src/arithmetic.rs +++ /dev/null @@ -1,30 +0,0 @@ -// Generated by hobgoblin. - -#[derive(Debug, Hash, PartialEq)] -pub enum Expression { - Add(::std::boxed::Box::), - Const(crate::arithmetic::Const), -} - -impl ::std::convert::From:: for crate::arithmetic::Expression { - fn from(value: crate::arithmetic::Add) -> Self { - Self::Add(::std::boxed::Box::new(value)) - } -} - -impl ::std::convert::From:: for crate::arithmetic::Expression { - fn from(value: crate::arithmetic::Const) -> Self { - Self::Const(value) - } -} - -#[derive(Debug, Hash, PartialEq)] -pub struct Add { - pub left: crate::arithmetic::Expression, - pub right: crate::arithmetic::Expression, -} - -#[derive(Debug, Hash, PartialEq)] -pub struct Const { - pub value: ::core::primitive::i32, -} diff --git a/examples/03-inductive-data-types/output/rust/src/lib.rs b/examples/03-inductive-data-types/output/rust/src/lib.rs deleted file mode 100644 index 3265e69..0000000 --- a/examples/03-inductive-data-types/output/rust/src/lib.rs +++ /dev/null @@ -1,33 +0,0 @@ -mod arithmetic; - -use arithmetic::{Const, Expression}; - -fn eval(expression: &Expression) -> i32 { - match expression { - Expression::Add(add) => - eval(&add.left) + eval(&add.right), - - Expression::Const(Const { value }) => - *value, - } -} - -#[cfg(test)] -mod test { - use super::arithmetic::{Add, Const, Expression}; - - #[test] - fn eval() { - let expression: Expression = Add { - left: Add { - left: Const { value: 42 }.into(), - right: Const { value: 47 }.into(), - }.into(), - right: Const { value: 52 }.into(), - }.into(); - - let result = super::eval(&expression); - - assert_eq!(result, 141); - } -} diff --git a/examples/03-inductive-data-types/src/arithmetic.hob b/examples/03-inductive-data-types/src/arithmetic.hob deleted file mode 100644 index b1ef6e5..0000000 --- a/examples/03-inductive-data-types/src/arithmetic.hob +++ /dev/null @@ -1,13 +0,0 @@ -sum Expression { - variant Add box; - variant Const; -} - -struct Add { - field left: Expression; - field right: Expression; -} - -struct Const { - field value: Int32; -} -- cgit v1.2.3