diff options
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/hobgoblin.json5 (renamed from examples/05-enum/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/java/.gitignore (renamed from examples/05-enum/output/java/.gitignore) | 0 | ||||
| l--------- | examples/05-inductive-data-types-separate-namespaces/output/java/pom.xml (renamed from examples/05-enum/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java | 14 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/.gitignore (renamed from examples/05-enum/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.lock (renamed from examples/05-enum/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.toml (renamed from examples/05-enum/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml (renamed from examples/05-enum/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs | 17 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs | 6 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs | 2 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/output/rust/src/lib.rs | 15 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/src/data/a.hob | 9 | ||||
| -rw-r--r-- | examples/05-inductive-data-types-separate-namespaces/src/data/b.hob | 5 | ||||
| -rw-r--r-- | examples/06-enum/hobgoblin.json5 (renamed from examples/06-list/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/java/.gitignore (renamed from examples/06-list/output/java/.gitignore) | 0 | ||||
| l--------- | examples/06-enum/output/java/pom.xml (renamed from examples/06-list/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/java/src/main/java/org/zwobble/example/Numbers.java (renamed from examples/05-enum/output/java/src/main/java/org/zwobble/example/Numbers.java) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java (renamed from examples/05-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/.gitignore (renamed from examples/06-list/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/Cargo.lock (renamed from examples/06-list/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/Cargo.toml (renamed from examples/06-list/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/rust-toolchain.toml (renamed from examples/06-list/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/src/lib.rs (renamed from examples/05-enum/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/06-enum/output/rust/src/numbers.rs (renamed from examples/05-enum/output/rust/src/numbers.rs) | 0 | ||||
| -rw-r--r-- | examples/06-enum/src/numbers.hob (renamed from examples/05-enum/src/numbers.hob) | 0 | ||||
| -rw-r--r-- | examples/07-list/hobgoblin.json5 (renamed from examples/11-imports/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/java/.gitignore (renamed from examples/07-native-type/output/java/.gitignore) | 0 | ||||
| l--------- | examples/07-list/output/java/pom.xml (renamed from examples/07-native-type/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/java/src/test/java/org/zwobble/example/PointTests.java (renamed from examples/06-list/output/java/src/test/java/org/zwobble/example/PointTests.java) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/.gitignore (renamed from examples/07-native-type/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/Cargo.lock (renamed from examples/07-native-type/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/Cargo.toml (renamed from examples/07-native-type/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/rust-toolchain.toml (renamed from examples/07-native-type/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/src/lib.rs (renamed from examples/06-list/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/07-list/output/rust/src/point.rs (renamed from examples/06-list/output/rust/src/point.rs) | 0 | ||||
| -rw-r--r-- | examples/07-list/src/point.hob (renamed from examples/06-list/src/point.hob) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/hobgoblin.json5 (renamed from examples/07-native-type/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/java/.gitignore (renamed from examples/08-native-type-custom-config/output/java/.gitignore) | 0 | ||||
| l--------- | examples/08-native-type/output/java/pom.xml (renamed from examples/08-native-type-custom-config/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java (renamed from examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java (renamed from examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java (renamed from examples/07-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/.gitignore (renamed from examples/08-native-type-custom-config/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/Cargo.lock (renamed from examples/08-native-type-custom-config/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/Cargo.toml (renamed from examples/08-native-type-custom-config/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/rust-toolchain.toml (renamed from examples/08-native-type-custom-config/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/src/gen/point.rs (renamed from examples/07-native-type/output/rust/src/gen/point.rs) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/src/lib.rs (renamed from examples/07-native-type/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/output/rust/src/point.rs (renamed from examples/07-native-type/output/rust/src/point.rs) | 0 | ||||
| -rw-r--r-- | examples/08-native-type/src/point.hob (renamed from examples/07-native-type/src/point.hob) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/hobgoblin.json5 (renamed from examples/08-native-type-custom-config/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/java/.gitignore (renamed from examples/09-shared/output/java/.gitignore) | 0 | ||||
| l--------- | examples/09-native-type-custom-config/output/java/pom.xml (renamed from examples/09-shared/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java (renamed from examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java (renamed from examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java (renamed from examples/08-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/.gitignore (renamed from examples/09-shared/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/Cargo.lock (renamed from examples/09-shared/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/Cargo.toml (renamed from examples/09-shared/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/rust-toolchain.toml (renamed from examples/09-shared/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/src/main.rs (renamed from examples/08-native-type-custom-config/output/rust/src/main.rs) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/output/rust/src/point.rs (renamed from examples/08-native-type-custom-config/output/rust/src/point.rs) | 0 | ||||
| -rw-r--r-- | examples/09-native-type-custom-config/src/point.hob (renamed from examples/08-native-type-custom-config/src/point.hob) | 0 | ||||
| -rw-r--r-- | examples/10-shared/hobgoblin.json5 (renamed from examples/09-shared/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/java/.gitignore (renamed from examples/10-custom-code/output/java/.gitignore) | 0 | ||||
| l--------- | examples/10-shared/output/java/pom.xml (renamed from examples/10-custom-code/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/java/src/test/java/org/zwobble/example/PointTests.java (renamed from examples/09-shared/output/java/src/test/java/org/zwobble/example/PointTests.java) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/.gitignore (renamed from examples/10-custom-code/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/Cargo.lock (renamed from examples/10-custom-code/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/Cargo.toml (renamed from examples/10-custom-code/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/rust-toolchain.toml (renamed from examples/10-custom-code/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/src/lib.rs (renamed from examples/09-shared/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/10-shared/output/rust/src/point.rs (renamed from examples/09-shared/output/rust/src/point.rs) | 0 | ||||
| -rw-r--r-- | examples/10-shared/src/point.hob (renamed from examples/09-shared/src/point.hob) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/hobgoblin.json5 (renamed from examples/10-custom-code/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/java/.gitignore (renamed from examples/11-imports/output/java/.gitignore) | 0 | ||||
| l--------- | examples/11-custom-code/output/java/pom.xml (renamed from examples/11-imports/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java (renamed from examples/10-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java (renamed from examples/10-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/.gitignore (renamed from examples/11-imports/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/Cargo.lock (renamed from examples/11-imports/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/Cargo.toml (renamed from examples/11-imports/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/rust-toolchain.toml (renamed from examples/11-imports/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/src/gen/shapes.rs (renamed from examples/10-custom-code/output/rust/src/gen/shapes.rs) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/src/lib.rs (renamed from examples/10-custom-code/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/output/rust/src/shapes.rs (renamed from examples/10-custom-code/output/rust/src/shapes.rs) | 0 | ||||
| -rw-r--r-- | examples/11-custom-code/src/shapes.hob (renamed from examples/10-custom-code/src/shapes.hob) | 0 | ||||
| -rw-r--r-- | examples/12-imports/hobgoblin.json5 | 19 | ||||
| -rw-r--r-- | examples/12-imports/output/java/.gitignore | 2 | ||||
| l--------- | examples/12-imports/output/java/pom.xml (renamed from examples/12-transient-0/output/java/pom.xml) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/java/src/test/java/org/zwobble/example/LineTests.java (renamed from examples/11-imports/output/java/src/test/java/org/zwobble/example/LineTests.java) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/.gitignore | 1 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/Cargo.lock (renamed from examples/12-transient-0/output/rust/Cargo.lock) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/Cargo.toml (renamed from examples/12-transient-0/output/rust/Cargo.toml) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/rust-toolchain.toml (renamed from examples/12-transient-0/output/rust/rust-toolchain.toml) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/src/lib.rs (renamed from examples/11-imports/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/src/line.rs (renamed from examples/11-imports/output/rust/src/line.rs) | 0 | ||||
| -rw-r--r-- | examples/12-imports/output/rust/src/point.rs (renamed from examples/11-imports/output/rust/src/point.rs) | 0 | ||||
| -rw-r--r-- | examples/12-imports/src/line.hob (renamed from examples/11-imports/src/line.hob) | 0 | ||||
| -rw-r--r-- | examples/12-imports/src/point.hob (renamed from examples/11-imports/src/point.hob) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/hobgoblin.json5 (renamed from examples/12-transient-0/hobgoblin.json5) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/java/.gitignore (renamed from examples/12-transient-0/output/java/.gitignore) | 0 | ||||
| l--------- | examples/13-transient-0/output/java/pom.xml | 1 | ||||
| -rw-r--r-- | examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java (renamed from examples/12-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/.gitignore (renamed from examples/12-transient-0/output/rust/.gitignore) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/Cargo.lock | 7 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/Cargo.toml | 6 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/rust-toolchain.toml | 2 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/data.rs (renamed from examples/12-transient-0/output/rust/src/data.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/gen/data.rs (renamed from examples/12-transient-0/output/rust/src/gen/data.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/gen/data/transient_0.rs (renamed from examples/12-transient-0/output/rust/src/gen/data/transient_0.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/gen/transient_0.rs (renamed from examples/12-transient-0/output/rust/src/gen/transient_0.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/lib.rs (renamed from examples/12-transient-0/output/rust/src/lib.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/output/rust/src/transient_0.rs (renamed from examples/12-transient-0/output/rust/src/transient_0.rs) | 0 | ||||
| -rw-r--r-- | examples/13-transient-0/src/data.hob (renamed from examples/12-transient-0/src/data.hob) | 0 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java | 56 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java | 97 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java | 16 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java | 6 |
120 files changed, 178 insertions, 103 deletions
diff --git a/examples/05-enum/hobgoblin.json5 b/examples/05-inductive-data-types-separate-namespaces/hobgoblin.json5 index 12713d4..12713d4 100644 --- a/examples/05-enum/hobgoblin.json5 +++ b/examples/05-inductive-data-types-separate-namespaces/hobgoblin.json5 diff --git a/examples/05-enum/output/java/.gitignore b/examples/05-inductive-data-types-separate-namespaces/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/05-enum/output/java/.gitignore +++ b/examples/05-inductive-data-types-separate-namespaces/output/java/.gitignore diff --git a/examples/05-enum/output/java/pom.xml b/examples/05-inductive-data-types-separate-namespaces/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/05-enum/output/java/pom.xml +++ b/examples/05-inductive-data-types-separate-namespaces/output/java/pom.xml diff --git a/examples/05-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java b/examples/05-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java new file mode 100644 index 0000000..f01bf0a --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/output/java/src/test/java/org/zwobble/example/DataTests.java @@ -0,0 +1,14 @@ +package org.zwobble.example; + +import java.util.Optional; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; +import org.zwobble.example.types.data.a.A1; +import org.zwobble.example.types.data.b.B; + +public class DataTests { + @Test + public void data() { + var data = new A1(Optional.of(new B(Optional.of(new A1(Optional.empty()))))); + } +} diff --git a/examples/05-enum/output/rust/.gitignore b/examples/05-inductive-data-types-separate-namespaces/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/05-enum/output/rust/.gitignore +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/.gitignore diff --git a/examples/05-enum/output/rust/Cargo.lock b/examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/05-enum/output/rust/Cargo.lock +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.lock diff --git a/examples/05-enum/output/rust/Cargo.toml b/examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/05-enum/output/rust/Cargo.toml +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/Cargo.toml diff --git a/examples/05-enum/output/rust/rust-toolchain.toml b/examples/05-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/05-enum/output/rust/rust-toolchain.toml +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/rust-toolchain.toml diff --git a/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs new file mode 100644 index 0000000..3acec99 --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/a.rs @@ -0,0 +1,17 @@ +// Generated by hobgoblin. + +#[derive(Debug, Hash, PartialEq)] +pub enum A { + A1(::std::boxed::Box::<crate::data::a::A1>), +} + +impl ::std::convert::From::<crate::data::a::A1> for crate::data::a::A { + fn from(value: crate::data::a::A1) -> Self { + Self::A1(::std::boxed::Box::new(value)) + } +} + +#[derive(Debug, Hash, PartialEq)] +pub struct A1 { + pub b: ::std::option::Option::<crate::data::b::B>, +} diff --git a/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs new file mode 100644 index 0000000..11dee96 --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/b.rs @@ -0,0 +1,6 @@ +// Generated by hobgoblin. + +#[derive(Debug, Hash, PartialEq)] +pub struct B { + pub a: ::std::option::Option::<crate::data::a::A>, +} diff --git a/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs new file mode 100644 index 0000000..677af14 --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/data/mod.rs @@ -0,0 +1,2 @@ +pub mod a; +pub mod b; diff --git a/examples/05-inductive-data-types-separate-namespaces/output/rust/src/lib.rs b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/lib.rs new file mode 100644 index 0000000..01aaddf --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/output/rust/src/lib.rs @@ -0,0 +1,15 @@ +mod data; + +#[cfg(test)] +mod test { + use super::data::{a::{A, A1}, b::B}; + + #[test] + fn data() { + let data = A::A1(Box::new(A1 { + b: Some(B { + a: Some(A::A1(Box::new(A1 { b: None }))), + }), + })); + } +} diff --git a/examples/05-inductive-data-types-separate-namespaces/src/data/a.hob b/examples/05-inductive-data-types-separate-namespaces/src/data/a.hob new file mode 100644 index 0000000..47f1d3c --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/src/data/a.hob @@ -0,0 +1,9 @@ +import {B} from ./b; + +sum A { + variant A1 box; +} + +struct A1 { + field b: Option[B]; +} diff --git a/examples/05-inductive-data-types-separate-namespaces/src/data/b.hob b/examples/05-inductive-data-types-separate-namespaces/src/data/b.hob new file mode 100644 index 0000000..4d538fc --- /dev/null +++ b/examples/05-inductive-data-types-separate-namespaces/src/data/b.hob @@ -0,0 +1,5 @@ +import {A} from ./a; + +struct B { + field a: Option[A]; +} diff --git a/examples/06-list/hobgoblin.json5 b/examples/06-enum/hobgoblin.json5 index 12713d4..12713d4 100644 --- a/examples/06-list/hobgoblin.json5 +++ b/examples/06-enum/hobgoblin.json5 diff --git a/examples/06-list/output/java/.gitignore b/examples/06-enum/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/06-list/output/java/.gitignore +++ b/examples/06-enum/output/java/.gitignore diff --git a/examples/06-list/output/java/pom.xml b/examples/06-enum/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/06-list/output/java/pom.xml +++ b/examples/06-enum/output/java/pom.xml diff --git a/examples/05-enum/output/java/src/main/java/org/zwobble/example/Numbers.java b/examples/06-enum/output/java/src/main/java/org/zwobble/example/Numbers.java index fc17869..fc17869 100644 --- a/examples/05-enum/output/java/src/main/java/org/zwobble/example/Numbers.java +++ b/examples/06-enum/output/java/src/main/java/org/zwobble/example/Numbers.java diff --git a/examples/05-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java b/examples/06-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java index 141d5d1..141d5d1 100644 --- a/examples/05-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java +++ b/examples/06-enum/output/java/src/test/java/org/zwobble/example/NumbersTests.java diff --git a/examples/06-list/output/rust/.gitignore b/examples/06-enum/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/06-list/output/rust/.gitignore +++ b/examples/06-enum/output/rust/.gitignore diff --git a/examples/06-list/output/rust/Cargo.lock b/examples/06-enum/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/06-list/output/rust/Cargo.lock +++ b/examples/06-enum/output/rust/Cargo.lock diff --git a/examples/06-list/output/rust/Cargo.toml b/examples/06-enum/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/06-list/output/rust/Cargo.toml +++ b/examples/06-enum/output/rust/Cargo.toml diff --git a/examples/06-list/output/rust/rust-toolchain.toml b/examples/06-enum/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/06-list/output/rust/rust-toolchain.toml +++ b/examples/06-enum/output/rust/rust-toolchain.toml diff --git a/examples/05-enum/output/rust/src/lib.rs b/examples/06-enum/output/rust/src/lib.rs index ae0b67c..ae0b67c 100644 --- a/examples/05-enum/output/rust/src/lib.rs +++ b/examples/06-enum/output/rust/src/lib.rs diff --git a/examples/05-enum/output/rust/src/numbers.rs b/examples/06-enum/output/rust/src/numbers.rs index 1c62012..1c62012 100644 --- a/examples/05-enum/output/rust/src/numbers.rs +++ b/examples/06-enum/output/rust/src/numbers.rs diff --git a/examples/05-enum/src/numbers.hob b/examples/06-enum/src/numbers.hob index 125082d..125082d 100644 --- a/examples/05-enum/src/numbers.hob +++ b/examples/06-enum/src/numbers.hob diff --git a/examples/11-imports/hobgoblin.json5 b/examples/07-list/hobgoblin.json5 index 12713d4..12713d4 100644 --- a/examples/11-imports/hobgoblin.json5 +++ b/examples/07-list/hobgoblin.json5 diff --git a/examples/07-native-type/output/java/.gitignore b/examples/07-list/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/07-native-type/output/java/.gitignore +++ b/examples/07-list/output/java/.gitignore diff --git a/examples/07-native-type/output/java/pom.xml b/examples/07-list/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/07-native-type/output/java/pom.xml +++ b/examples/07-list/output/java/pom.xml diff --git a/examples/06-list/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/07-list/output/java/src/test/java/org/zwobble/example/PointTests.java index e1528b5..e1528b5 100644 --- a/examples/06-list/output/java/src/test/java/org/zwobble/example/PointTests.java +++ b/examples/07-list/output/java/src/test/java/org/zwobble/example/PointTests.java diff --git a/examples/07-native-type/output/rust/.gitignore b/examples/07-list/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/07-native-type/output/rust/.gitignore +++ b/examples/07-list/output/rust/.gitignore diff --git a/examples/07-native-type/output/rust/Cargo.lock b/examples/07-list/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/07-native-type/output/rust/Cargo.lock +++ b/examples/07-list/output/rust/Cargo.lock diff --git a/examples/07-native-type/output/rust/Cargo.toml b/examples/07-list/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/07-native-type/output/rust/Cargo.toml +++ b/examples/07-list/output/rust/Cargo.toml diff --git a/examples/07-native-type/output/rust/rust-toolchain.toml b/examples/07-list/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/07-native-type/output/rust/rust-toolchain.toml +++ b/examples/07-list/output/rust/rust-toolchain.toml diff --git a/examples/06-list/output/rust/src/lib.rs b/examples/07-list/output/rust/src/lib.rs index 907ab8b..907ab8b 100644 --- a/examples/06-list/output/rust/src/lib.rs +++ b/examples/07-list/output/rust/src/lib.rs diff --git a/examples/06-list/output/rust/src/point.rs b/examples/07-list/output/rust/src/point.rs index 2625f9f..2625f9f 100644 --- a/examples/06-list/output/rust/src/point.rs +++ b/examples/07-list/output/rust/src/point.rs diff --git a/examples/06-list/src/point.hob b/examples/07-list/src/point.hob index 8dd438c..8dd438c 100644 --- a/examples/06-list/src/point.hob +++ b/examples/07-list/src/point.hob diff --git a/examples/07-native-type/hobgoblin.json5 b/examples/08-native-type/hobgoblin.json5 index a0f60c3..a0f60c3 100644 --- a/examples/07-native-type/hobgoblin.json5 +++ b/examples/08-native-type/hobgoblin.json5 diff --git a/examples/08-native-type-custom-config/output/java/.gitignore b/examples/08-native-type/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/08-native-type-custom-config/output/java/.gitignore +++ b/examples/08-native-type/output/java/.gitignore diff --git a/examples/08-native-type-custom-config/output/java/pom.xml b/examples/08-native-type/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/08-native-type-custom-config/output/java/pom.xml +++ b/examples/08-native-type/output/java/pom.xml diff --git a/examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java index bdb5427..bdb5427 100644 --- a/examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java +++ b/examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java diff --git a/examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java b/examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java index cd26290..cd26290 100644 --- a/examples/07-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java +++ b/examples/08-native-type/output/java/src/main/java/org/zwobble/example/types/point/Point.java diff --git a/examples/07-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/08-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java index 8482673..8482673 100644 --- a/examples/07-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java +++ b/examples/08-native-type/output/java/src/test/java/org/zwobble/example/PointTests.java diff --git a/examples/08-native-type-custom-config/output/rust/.gitignore b/examples/08-native-type/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/08-native-type-custom-config/output/rust/.gitignore +++ b/examples/08-native-type/output/rust/.gitignore diff --git a/examples/08-native-type-custom-config/output/rust/Cargo.lock b/examples/08-native-type/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/08-native-type-custom-config/output/rust/Cargo.lock +++ b/examples/08-native-type/output/rust/Cargo.lock diff --git a/examples/08-native-type-custom-config/output/rust/Cargo.toml b/examples/08-native-type/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/08-native-type-custom-config/output/rust/Cargo.toml +++ b/examples/08-native-type/output/rust/Cargo.toml diff --git a/examples/08-native-type-custom-config/output/rust/rust-toolchain.toml b/examples/08-native-type/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/08-native-type-custom-config/output/rust/rust-toolchain.toml +++ b/examples/08-native-type/output/rust/rust-toolchain.toml diff --git a/examples/07-native-type/output/rust/src/gen/point.rs b/examples/08-native-type/output/rust/src/gen/point.rs index d383b15..d383b15 100644 --- a/examples/07-native-type/output/rust/src/gen/point.rs +++ b/examples/08-native-type/output/rust/src/gen/point.rs diff --git a/examples/07-native-type/output/rust/src/lib.rs b/examples/08-native-type/output/rust/src/lib.rs index 1179cff..1179cff 100644 --- a/examples/07-native-type/output/rust/src/lib.rs +++ b/examples/08-native-type/output/rust/src/lib.rs diff --git a/examples/07-native-type/output/rust/src/point.rs b/examples/08-native-type/output/rust/src/point.rs index c5b73d7..c5b73d7 100644 --- a/examples/07-native-type/output/rust/src/point.rs +++ b/examples/08-native-type/output/rust/src/point.rs diff --git a/examples/07-native-type/src/point.hob b/examples/08-native-type/src/point.hob index 7178dcb..7178dcb 100644 --- a/examples/07-native-type/src/point.hob +++ b/examples/08-native-type/src/point.hob diff --git a/examples/08-native-type-custom-config/hobgoblin.json5 b/examples/09-native-type-custom-config/hobgoblin.json5 index f925903..f925903 100644 --- a/examples/08-native-type-custom-config/hobgoblin.json5 +++ b/examples/09-native-type-custom-config/hobgoblin.json5 diff --git a/examples/09-shared/output/java/.gitignore b/examples/09-native-type-custom-config/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/09-shared/output/java/.gitignore +++ b/examples/09-native-type-custom-config/output/java/.gitignore diff --git a/examples/09-shared/output/java/pom.xml b/examples/09-native-type-custom-config/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/09-shared/output/java/pom.xml +++ b/examples/09-native-type-custom-config/output/java/pom.xml diff --git a/examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java b/examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java index 8862a62..8862a62 100644 --- a/examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java +++ b/examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/Point.java diff --git a/examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java b/examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java index 74ac856..74ac856 100644 --- a/examples/08-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java +++ b/examples/09-native-type-custom-config/output/java/src/main/java/org/zwobble/example/types/point/HobgoblinNativePoint.java diff --git a/examples/08-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/09-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java index ea635ca..ea635ca 100644 --- a/examples/08-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java +++ b/examples/09-native-type-custom-config/output/java/src/test/java/org/zwobble/example/PointTests.java diff --git a/examples/09-shared/output/rust/.gitignore b/examples/09-native-type-custom-config/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/09-shared/output/rust/.gitignore +++ b/examples/09-native-type-custom-config/output/rust/.gitignore diff --git a/examples/09-shared/output/rust/Cargo.lock b/examples/09-native-type-custom-config/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/09-shared/output/rust/Cargo.lock +++ b/examples/09-native-type-custom-config/output/rust/Cargo.lock diff --git a/examples/09-shared/output/rust/Cargo.toml b/examples/09-native-type-custom-config/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/09-shared/output/rust/Cargo.toml +++ b/examples/09-native-type-custom-config/output/rust/Cargo.toml diff --git a/examples/09-shared/output/rust/rust-toolchain.toml b/examples/09-native-type-custom-config/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/09-shared/output/rust/rust-toolchain.toml +++ b/examples/09-native-type-custom-config/output/rust/rust-toolchain.toml diff --git a/examples/08-native-type-custom-config/output/rust/src/main.rs b/examples/09-native-type-custom-config/output/rust/src/main.rs index 10dc437..10dc437 100644 --- a/examples/08-native-type-custom-config/output/rust/src/main.rs +++ b/examples/09-native-type-custom-config/output/rust/src/main.rs diff --git a/examples/08-native-type-custom-config/output/rust/src/point.rs b/examples/09-native-type-custom-config/output/rust/src/point.rs index 6ab4330..6ab4330 100644 --- a/examples/08-native-type-custom-config/output/rust/src/point.rs +++ b/examples/09-native-type-custom-config/output/rust/src/point.rs diff --git a/examples/08-native-type-custom-config/src/point.hob b/examples/09-native-type-custom-config/src/point.hob index 7178dcb..7178dcb 100644 --- a/examples/08-native-type-custom-config/src/point.hob +++ b/examples/09-native-type-custom-config/src/point.hob diff --git a/examples/09-shared/hobgoblin.json5 b/examples/10-shared/hobgoblin.json5 index 19e0f93..19e0f93 100644 --- a/examples/09-shared/hobgoblin.json5 +++ b/examples/10-shared/hobgoblin.json5 diff --git a/examples/10-custom-code/output/java/.gitignore b/examples/10-shared/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/10-custom-code/output/java/.gitignore +++ b/examples/10-shared/output/java/.gitignore diff --git a/examples/10-custom-code/output/java/pom.xml b/examples/10-shared/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/10-custom-code/output/java/pom.xml +++ b/examples/10-shared/output/java/pom.xml diff --git a/examples/09-shared/output/java/src/test/java/org/zwobble/example/PointTests.java b/examples/10-shared/output/java/src/test/java/org/zwobble/example/PointTests.java index b4c140d..b4c140d 100644 --- a/examples/09-shared/output/java/src/test/java/org/zwobble/example/PointTests.java +++ b/examples/10-shared/output/java/src/test/java/org/zwobble/example/PointTests.java diff --git a/examples/10-custom-code/output/rust/.gitignore b/examples/10-shared/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/10-custom-code/output/rust/.gitignore +++ b/examples/10-shared/output/rust/.gitignore diff --git a/examples/10-custom-code/output/rust/Cargo.lock b/examples/10-shared/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/10-custom-code/output/rust/Cargo.lock +++ b/examples/10-shared/output/rust/Cargo.lock diff --git a/examples/10-custom-code/output/rust/Cargo.toml b/examples/10-shared/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/10-custom-code/output/rust/Cargo.toml +++ b/examples/10-shared/output/rust/Cargo.toml diff --git a/examples/10-custom-code/output/rust/rust-toolchain.toml b/examples/10-shared/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/10-custom-code/output/rust/rust-toolchain.toml +++ b/examples/10-shared/output/rust/rust-toolchain.toml diff --git a/examples/09-shared/output/rust/src/lib.rs b/examples/10-shared/output/rust/src/lib.rs index af2c87f..af2c87f 100644 --- a/examples/09-shared/output/rust/src/lib.rs +++ b/examples/10-shared/output/rust/src/lib.rs diff --git a/examples/09-shared/output/rust/src/point.rs b/examples/10-shared/output/rust/src/point.rs index dea7678..dea7678 100644 --- a/examples/09-shared/output/rust/src/point.rs +++ b/examples/10-shared/output/rust/src/point.rs diff --git a/examples/09-shared/src/point.hob b/examples/10-shared/src/point.hob index 7b9a8e6..7b9a8e6 100644 --- a/examples/09-shared/src/point.hob +++ b/examples/10-shared/src/point.hob diff --git a/examples/10-custom-code/hobgoblin.json5 b/examples/11-custom-code/hobgoblin.json5 index 1d08a40..1d08a40 100644 --- a/examples/10-custom-code/hobgoblin.json5 +++ b/examples/11-custom-code/hobgoblin.json5 diff --git a/examples/11-imports/output/java/.gitignore b/examples/11-custom-code/output/java/.gitignore index ff511d4..ff511d4 100644 --- a/examples/11-imports/output/java/.gitignore +++ b/examples/11-custom-code/output/java/.gitignore diff --git a/examples/11-imports/output/java/pom.xml b/examples/11-custom-code/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/11-imports/output/java/pom.xml +++ b/examples/11-custom-code/output/java/pom.xml diff --git a/examples/10-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java b/examples/11-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java index 69a1ab1..69a1ab1 100644 --- a/examples/10-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java +++ b/examples/11-custom-code/output/java/src/main/java/org/zwobble/example/types/shapes/Square.java diff --git a/examples/10-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java b/examples/11-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java index fba8e6c..fba8e6c 100644 --- a/examples/10-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java +++ b/examples/11-custom-code/output/java/src/test/java/org/zwobble/example/ShapesTests.java diff --git a/examples/11-imports/output/rust/.gitignore b/examples/11-custom-code/output/rust/.gitignore index ea8c4bf..ea8c4bf 100644 --- a/examples/11-imports/output/rust/.gitignore +++ b/examples/11-custom-code/output/rust/.gitignore diff --git a/examples/11-imports/output/rust/Cargo.lock b/examples/11-custom-code/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/11-imports/output/rust/Cargo.lock +++ b/examples/11-custom-code/output/rust/Cargo.lock diff --git a/examples/11-imports/output/rust/Cargo.toml b/examples/11-custom-code/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/11-imports/output/rust/Cargo.toml +++ b/examples/11-custom-code/output/rust/Cargo.toml diff --git a/examples/11-imports/output/rust/rust-toolchain.toml b/examples/11-custom-code/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/11-imports/output/rust/rust-toolchain.toml +++ b/examples/11-custom-code/output/rust/rust-toolchain.toml diff --git a/examples/10-custom-code/output/rust/src/gen/shapes.rs b/examples/11-custom-code/output/rust/src/gen/shapes.rs index 815db2a..815db2a 100644 --- a/examples/10-custom-code/output/rust/src/gen/shapes.rs +++ b/examples/11-custom-code/output/rust/src/gen/shapes.rs diff --git a/examples/10-custom-code/output/rust/src/lib.rs b/examples/11-custom-code/output/rust/src/lib.rs index 1825d72..1825d72 100644 --- a/examples/10-custom-code/output/rust/src/lib.rs +++ b/examples/11-custom-code/output/rust/src/lib.rs diff --git a/examples/10-custom-code/output/rust/src/shapes.rs b/examples/11-custom-code/output/rust/src/shapes.rs index f806bbb..f806bbb 100644 --- a/examples/10-custom-code/output/rust/src/shapes.rs +++ b/examples/11-custom-code/output/rust/src/shapes.rs diff --git a/examples/10-custom-code/src/shapes.hob b/examples/11-custom-code/src/shapes.hob index 5dfe833..5dfe833 100644 --- a/examples/10-custom-code/src/shapes.hob +++ b/examples/11-custom-code/src/shapes.hob diff --git a/examples/12-imports/hobgoblin.json5 b/examples/12-imports/hobgoblin.json5 new file mode 100644 index 0000000..12713d4 --- /dev/null +++ b/examples/12-imports/hobgoblin.json5 @@ -0,0 +1,19 @@ +{ + 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/12-imports/output/java/.gitignore b/examples/12-imports/output/java/.gitignore new file mode 100644 index 0000000..ff511d4 --- /dev/null +++ b/examples/12-imports/output/java/.gitignore @@ -0,0 +1,2 @@ +/src/gen/ +/target/ diff --git a/examples/12-transient-0/output/java/pom.xml b/examples/12-imports/output/java/pom.xml index 445fa65..445fa65 120000 --- a/examples/12-transient-0/output/java/pom.xml +++ b/examples/12-imports/output/java/pom.xml diff --git a/examples/11-imports/output/java/src/test/java/org/zwobble/example/LineTests.java b/examples/12-imports/output/java/src/test/java/org/zwobble/example/LineTests.java index c376b19..c376b19 100644 --- a/examples/11-imports/output/java/src/test/java/org/zwobble/example/LineTests.java +++ b/examples/12-imports/output/java/src/test/java/org/zwobble/example/LineTests.java diff --git a/examples/12-imports/output/rust/.gitignore b/examples/12-imports/output/rust/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/examples/12-imports/output/rust/.gitignore @@ -0,0 +1 @@ +/target diff --git a/examples/12-transient-0/output/rust/Cargo.lock b/examples/12-imports/output/rust/Cargo.lock index 9dc6e3e..9dc6e3e 100644 --- a/examples/12-transient-0/output/rust/Cargo.lock +++ b/examples/12-imports/output/rust/Cargo.lock diff --git a/examples/12-transient-0/output/rust/Cargo.toml b/examples/12-imports/output/rust/Cargo.toml index 5d4c622..5d4c622 100644 --- a/examples/12-transient-0/output/rust/Cargo.toml +++ b/examples/12-imports/output/rust/Cargo.toml diff --git a/examples/12-transient-0/output/rust/rust-toolchain.toml b/examples/12-imports/output/rust/rust-toolchain.toml index 4fedb95..4fedb95 100644 --- a/examples/12-transient-0/output/rust/rust-toolchain.toml +++ b/examples/12-imports/output/rust/rust-toolchain.toml diff --git a/examples/11-imports/output/rust/src/lib.rs b/examples/12-imports/output/rust/src/lib.rs index ffbcbf4..ffbcbf4 100644 --- a/examples/11-imports/output/rust/src/lib.rs +++ b/examples/12-imports/output/rust/src/lib.rs diff --git a/examples/11-imports/output/rust/src/line.rs b/examples/12-imports/output/rust/src/line.rs index d383b15..d383b15 100644 --- a/examples/11-imports/output/rust/src/line.rs +++ b/examples/12-imports/output/rust/src/line.rs diff --git a/examples/11-imports/output/rust/src/point.rs b/examples/12-imports/output/rust/src/point.rs index 943331f..943331f 100644 --- a/examples/11-imports/output/rust/src/point.rs +++ b/examples/12-imports/output/rust/src/point.rs diff --git a/examples/11-imports/src/line.hob b/examples/12-imports/src/line.hob index 562d77f..562d77f 100644 --- a/examples/11-imports/src/line.hob +++ b/examples/12-imports/src/line.hob diff --git a/examples/11-imports/src/point.hob b/examples/12-imports/src/point.hob index 87f9953..87f9953 100644 --- a/examples/11-imports/src/point.hob +++ b/examples/12-imports/src/point.hob diff --git a/examples/12-transient-0/hobgoblin.json5 b/examples/13-transient-0/hobgoblin.json5 index 2160c60..2160c60 100644 --- a/examples/12-transient-0/hobgoblin.json5 +++ b/examples/13-transient-0/hobgoblin.json5 diff --git a/examples/12-transient-0/output/java/.gitignore b/examples/13-transient-0/output/java/.gitignore index 2fcf0b8..2fcf0b8 100644 --- a/examples/12-transient-0/output/java/.gitignore +++ b/examples/13-transient-0/output/java/.gitignore diff --git a/examples/13-transient-0/output/java/pom.xml b/examples/13-transient-0/output/java/pom.xml new file mode 120000 index 0000000..445fa65 --- /dev/null +++ b/examples/13-transient-0/output/java/pom.xml @@ -0,0 +1 @@ +../../../templates/java-junit/pom.xml
\ No newline at end of file diff --git a/examples/12-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java index aa3355e..aa3355e 100644 --- a/examples/12-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java +++ b/examples/13-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java diff --git a/examples/12-transient-0/output/rust/.gitignore b/examples/13-transient-0/output/rust/.gitignore index fc03479..fc03479 100644 --- a/examples/12-transient-0/output/rust/.gitignore +++ b/examples/13-transient-0/output/rust/.gitignore diff --git a/examples/13-transient-0/output/rust/Cargo.lock b/examples/13-transient-0/output/rust/Cargo.lock new file mode 100644 index 0000000..9dc6e3e --- /dev/null +++ b/examples/13-transient-0/output/rust/Cargo.lock @@ -0,0 +1,7 @@ +# 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/13-transient-0/output/rust/Cargo.toml b/examples/13-transient-0/output/rust/Cargo.toml new file mode 100644 index 0000000..5d4c622 --- /dev/null +++ b/examples/13-transient-0/output/rust/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "example" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/examples/13-transient-0/output/rust/rust-toolchain.toml b/examples/13-transient-0/output/rust/rust-toolchain.toml new file mode 100644 index 0000000..4fedb95 --- /dev/null +++ b/examples/13-transient-0/output/rust/rust-toolchain.toml @@ -0,0 +1,2 @@ +[toolchain] +channel = "1.96" diff --git a/examples/12-transient-0/output/rust/src/data.rs b/examples/13-transient-0/output/rust/src/data.rs index 7a0c4fa..7a0c4fa 100644 --- a/examples/12-transient-0/output/rust/src/data.rs +++ b/examples/13-transient-0/output/rust/src/data.rs diff --git a/examples/12-transient-0/output/rust/src/gen/data.rs b/examples/13-transient-0/output/rust/src/gen/data.rs index bbaf4e7..bbaf4e7 100644 --- a/examples/12-transient-0/output/rust/src/gen/data.rs +++ b/examples/13-transient-0/output/rust/src/gen/data.rs diff --git a/examples/12-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs index 8bf68cb..8bf68cb 100644 --- a/examples/12-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/13-transient-0/output/rust/src/gen/data/transient_0.rs diff --git a/examples/12-transient-0/output/rust/src/gen/transient_0.rs b/examples/13-transient-0/output/rust/src/gen/transient_0.rs index 6505408..6505408 100644 --- a/examples/12-transient-0/output/rust/src/gen/transient_0.rs +++ b/examples/13-transient-0/output/rust/src/gen/transient_0.rs diff --git a/examples/12-transient-0/output/rust/src/lib.rs b/examples/13-transient-0/output/rust/src/lib.rs index b858f24..b858f24 100644 --- a/examples/12-transient-0/output/rust/src/lib.rs +++ b/examples/13-transient-0/output/rust/src/lib.rs diff --git a/examples/12-transient-0/output/rust/src/transient_0.rs b/examples/13-transient-0/output/rust/src/transient_0.rs index 8b2b800..8b2b800 100644 --- a/examples/12-transient-0/output/rust/src/transient_0.rs +++ b/examples/13-transient-0/output/rust/src/transient_0.rs diff --git a/examples/12-transient-0/src/data.hob b/examples/13-transient-0/src/data.hob index 39a55c9..39a55c9 100644 --- a/examples/12-transient-0/src/data.hob +++ b/examples/13-transient-0/src/data.hob diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java index e4622a0..6f4c65d 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/HobgoblinCompiler.java @@ -1,13 +1,11 @@ package org.zwobble.hobgoblin.compiler; -import org.zwobble.hobgoblin.compiler.ast.typed.TypedNamespaceNode; import org.zwobble.hobgoblin.compiler.ast.untyped.UntypedNamespaceNode; import org.zwobble.hobgoblin.compiler.builtins.NativeTypes; import org.zwobble.hobgoblin.compiler.config.ProjectConfig; import org.zwobble.hobgoblin.compiler.parser.Parser; import org.zwobble.hobgoblin.compiler.typechecker.TypeChecker; import org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerGlobalContext; -import org.zwobble.hobgoblin.compiler.typechecker.errors.UnknownNamespaceError; import org.zwobble.hobgoblin.compiler.types.NamespaceName; import org.zwobble.sourcetext.SourceText; @@ -18,10 +16,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; -import java.util.*; -import java.util.stream.Collectors; - -import static org.zwobble.hobgoblin.compiler.typechecker.NamespaceNameResolution.resolveNamespaceName; +import java.util.ArrayList; +import java.util.List; public class HobgoblinCompiler { public static final String FILE_NAME_EXTENSION = ".hob"; @@ -46,8 +42,6 @@ public class HobgoblinCompiler { untypedNamespaceNodes.add(untypedNamespaceNode); } - var typedNamespaceNodes = new ArrayList<TypedNamespaceNode>(); - var typeCheckerContext = TypeCheckerGlobalContext.initial(); typeCheckerContext.addNativeType(NativeTypes.BOOL); typeCheckerContext.addNativeType(NativeTypes.INT_8); @@ -58,10 +52,7 @@ public class HobgoblinCompiler { typeCheckerContext.addNativeTypeConstructor(NativeTypes.OPTION); typeCheckerContext.addNativeTypeConstructor(NativeTypes.SHARED); - for (var untypedNamespaceNode : sortUntypedNamespaceNodes(untypedNamespaceNodes)) { - var typedNamespaceNode = TypeChecker.typeCheckNamespace(untypedNamespaceNode, typeCheckerContext); - typedNamespaceNodes.add(typedNamespaceNode); - } + var typedNamespaceNodes = TypeChecker.typeCheckNamespaces(untypedNamespaceNodes, typeCheckerContext); var typesInfo = typeCheckerContext.toTypesInfo(); @@ -70,47 +61,6 @@ public class HobgoblinCompiler { } } - private static List<UntypedNamespaceNode> sortUntypedNamespaceNodes(List<UntypedNamespaceNode> namespaceNodes) { - var namespaceNodesByName = namespaceNodes.stream() - .collect(Collectors.toMap(node -> node.namespaceName(), node -> node)); - - var sortedNamespaceNodes = new ArrayList<UntypedNamespaceNode>(); - var handledNamespaceNames = new HashSet<NamespaceName>(); - var pendingNamespaceNodes = new ArrayDeque<>(namespaceNodes); - - while (!pendingNamespaceNodes.isEmpty()) { - var namespaceNode = pendingNamespaceNodes.removeLast(); - // TODO: handle cycles - if (!handledNamespaceNames.contains(namespaceNode.namespaceName())) { - var unhandledDependencies = new ArrayList<UntypedNamespaceNode>(); - for (var importNode : namespaceNode.imports()) { - var importedNamespaceName = resolveNamespaceName( - namespaceNode.namespaceName(), - importNode.ancestorDepth(), - importNode.namespaceName(), - importNode.source() - ); - if (!handledNamespaceNames.contains(importedNamespaceName)) { - unhandledDependencies.add( - Optional.ofNullable(namespaceNodesByName.get(importedNamespaceName)) - .orElseThrow(() -> new UnknownNamespaceError(importedNamespaceName, importNode.source())) - ); - } - } - - if (unhandledDependencies.isEmpty()) { - handledNamespaceNames.add(namespaceNode.namespaceName()); - sortedNamespaceNodes.add(namespaceNode); - } else { - pendingNamespaceNodes.add(namespaceNode); - pendingNamespaceNodes.addAll(unhandledDependencies); - } - } - } - - return sortedNamespaceNodes; - } - static NamespaceName sourceFileNamespaceName(Path sourceDirectory, Path sourceFilePath) { var relativePath = sourceDirectory.relativize(sourceFilePath); diff --git a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java index e8fc633..f448a56 100644 --- a/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/zwobble/hobgoblin/compiler/typechecker/TypeChecker.java @@ -9,6 +9,7 @@ import org.zwobble.hobgoblin.compiler.types.*; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import static org.zwobble.hobgoblin.compiler.typechecker.NamespaceNameResolution.resolveNamespaceName; import static org.zwobble.hobgoblin.compiler.typechecker.TypeCheckerSubtyping.isSubtype; @@ -18,53 +19,69 @@ public class TypeChecker { private TypeChecker() { } - public static TypedNamespaceNode typeCheckNamespace( - UntypedNamespaceNode untyped, + public static List<TypedNamespaceNode> typeCheckNamespaces( + List<UntypedNamespaceNode> untypedNamespaces, TypeCheckerGlobalContext context ) { - var namespaceContext = context.enterNamespace(untyped.namespaceName()); - - for (var untypedImport : untyped.imports()) { - var importedNamespace = resolveNamespaceName( - untyped.namespaceName(), - untypedImport.ancestorDepth(), - untypedImport.namespaceName(), - untypedImport.source() - ); - - var importedNamespaceFields = context.namespaceFields(importedNamespace) - .orElseThrow(() -> new UnknownNamespaceError(importedNamespace, untypedImport.source())); - - for (var importedName : untypedImport.importedNames()) { - var fieldType = importedNamespaceFields.fieldType(importedName) - .orElseThrow(() -> new UnknownNamespaceFieldError( - importedName, - importedNamespace, - untypedImport.source() - )); - namespaceContext.declare(importedName, fieldType, untypedImport.source()); + var namespaceContexts = untypedNamespaces.stream() + .collect(Collectors.toMap( + untypedNamespace -> untypedNamespace.namespaceName(), + untypedNamespace -> context.enterNamespace(untypedNamespace.namespaceName()) + )); + + for (var untypedNamespace : untypedNamespaces) { + var namespaceContext = namespaceContexts.get(untypedNamespace.namespaceName()); + + var fields = new ArrayList<Field>(); + for (var untypedStatement : untypedNamespace.body()) { + var type = declareNamespaceStatement(untypedStatement, namespaceContext); + var field = new Field(untypedStatement.name(), type, untypedStatement.source()); + fields.add(field); } + context.defineNamespace(untypedNamespace.namespaceName(), fields); } - var fields = new ArrayList<Field>(); - for (var untypedStatement : untyped.body()) { - var type = declareNamespaceStatement(untypedStatement, namespaceContext); - var field = new Field(untypedStatement.name(), type, untypedStatement.source()); - fields.add(field); - } - context.defineNamespace(untyped.namespaceName(), fields); + var typedNamespaceNodes = new ArrayList<TypedNamespaceNode>(); + + for (var untypedNamespace : untypedNamespaces) { + var namespaceContext = namespaceContexts.get(untypedNamespace.namespaceName()); + + for (var untypedImport : untypedNamespace.imports()) { + var importedNamespace = resolveNamespaceName( + untypedNamespace.namespaceName(), + untypedImport.ancestorDepth(), + untypedImport.namespaceName(), + untypedImport.source() + ); - var typedBody = new ArrayList<TypedNamespaceStatementNode>(); - for (var untypedStatement : untyped.body()) { - var typedStatement = defineNamespaceStatement(untypedStatement, namespaceContext); - typedBody.add(typedStatement); + var importedNamespaceFields = context.namespaceFields(importedNamespace) + .orElseThrow(() -> new UnknownNamespaceError(importedNamespace, untypedImport.source())); + + for (var importedName : untypedImport.importedNames()) { + var fieldType = importedNamespaceFields.fieldType(importedName) + .orElseThrow(() -> new UnknownNamespaceFieldError( + importedName, + importedNamespace, + untypedImport.source() + )); + namespaceContext.declare(importedName, fieldType, untypedImport.source()); + } + } + + var typedBody = new ArrayList<TypedNamespaceStatementNode>(); + for (var untypedStatement : untypedNamespace.body()) { + var typedStatement = defineNamespaceStatement(untypedStatement, namespaceContext); + typedBody.add(typedStatement); + } + + typedNamespaceNodes.add(new TypedNamespaceNode( + untypedNamespace.namespaceName(), + typedBody, + untypedNamespace.source() + )); } - return new TypedNamespaceNode( - untyped.namespaceName(), - typedBody, - untyped.source() - ); + return typedNamespaceNodes; } static Type declareNamespaceStatement( @@ -311,6 +328,8 @@ public class TypeChecker { Optional<List<Field>> variantTypeFields, TypesInfo typesInfo ) { + // TODO: check that variant and sum are in the same namespace. + for (var sumTypeField : sumTypeFields) { var variantTypeField = variantTypeFields.flatMap( fields -> fields.stream() diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java index b5814a8..95ad671 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerNamespaceTests.java @@ -31,9 +31,9 @@ public class TypeCheckerNamespaceTests { .build(); var context = TypeCheckerContextArb.globalContext(); - var typed = TypeChecker.typeCheckNamespace(untyped, context); + var typed = TypeChecker.typeCheckNamespaces(List.of(untyped), context); - assertThat(typed, instanceOf( + assertThat(typed, containsExactly(instanceOf( TypedNamespaceNode.class, has("body", TypedNamespaceNode::body, isSequence( instanceOf( @@ -45,7 +45,7 @@ public class TypeCheckerNamespaceTests { ) ) )) - )); + ))); assertThat( context.namespaceFields(NamespaceName.of("a", "b")).orElseThrow().fieldType("X").orElseThrow(), isMetaType(new StructType(NamespaceName.of("a", "b"), "X")) @@ -83,9 +83,9 @@ public class TypeCheckerNamespaceTests { NullSource.INSTANCE ))); - var typed = TypeChecker.typeCheckNamespace(untyped, context); + var typed = TypeChecker.typeCheckNamespaces(List.of(untyped), context); - assertThat(typed, instanceOf( + assertThat(typed, containsExactly(instanceOf( TypedNamespaceNode.class, has("body", TypedNamespaceNode::body, isSequence( instanceOf( @@ -97,7 +97,7 @@ public class TypeCheckerNamespaceTests { ) ) )) - )); + ))); assertThat( context.toTypesInfo().fieldsOf(new StructType(NamespaceName.of("a", "b"), "X")), isOptionalOf(isSequence( @@ -121,7 +121,7 @@ public class TypeCheckerNamespaceTests { var error = assertThrows( UnknownNamespaceError.class, - () -> TypeChecker.typeCheckNamespace(untyped, context) + () -> TypeChecker.typeCheckNamespaces(List.of(untyped), context) ); assertThat(error.namespaceName(), equalTo(NamespaceName.of("a"))); @@ -143,7 +143,7 @@ public class TypeCheckerNamespaceTests { var error = assertThrows( UnknownNamespaceFieldError.class, - () -> TypeChecker.typeCheckNamespace(untyped, context) + () -> TypeChecker.typeCheckNamespaces(List.of(untyped), context) ); assertThat(error.fieldName(), equalTo("A")); diff --git a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java index d86fd59..ceb7a9b 100644 --- a/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java +++ b/src/test/java/org/zwobble/hobgoblin/compiler/typechecker/TypeCheckerStructDefinitionTests.java @@ -150,9 +150,9 @@ public class TypeCheckerStructDefinitionTests { var context = TypeCheckerContextArb.globalContext(); context.addNativeType(int32Type); - var typed = TypeChecker.typeCheckNamespace(untyped, context); + var typed = TypeChecker.typeCheckNamespaces(List.of(untyped), context); - assertThat(typed, has( + assertThat(typed, containsExactly(has( "body", TypedNamespaceNode::body, isSequence( @@ -193,6 +193,6 @@ public class TypeCheckerStructDefinitionTests { ) ) ) - )); + ))); } } |
