diff options
| author | Michael Williamson <mike@zwobble.org> | 2024-03-24 13:45:02 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2024-03-24 13:45:02 +0000 |
| commit | cb44def5d662e9ec15cf1d97d735c6deb129c302 (patch) | |
| tree | 6d42fe8107940123a90b39bd761c947f97ca9d3a /src/main/java | |
| parent | 5741462601505907f25c5b26a2618adf077c05c6 (diff) | |
Add config for profiles
Diffstat (limited to 'src/main/java')
5 files changed, 74 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java b/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java new file mode 100644 index 00000000..bfbd7d4e --- /dev/null +++ b/src/main/java/org/shedlang/compiler/config/GcBumpConfig.java @@ -0,0 +1,4 @@ +package org.shedlang.compiler.config; + +public record GcBumpConfig() implements GcConfig { +} diff --git a/src/main/java/org/shedlang/compiler/config/GcConfig.java b/src/main/java/org/shedlang/compiler/config/GcConfig.java new file mode 100644 index 00000000..6d8ed950 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/config/GcConfig.java @@ -0,0 +1,26 @@ +package org.shedlang.compiler.config; + +import org.tomlj.TomlTable; + +public sealed interface GcConfig permits GcBumpConfig, GcMarkAndSweepConfig { + GcConfig BUMP = new GcBumpConfig(); + + static GcConfig fromToml(TomlTable table) { + var name = table.getString("name"); + + if (name == null) { + throw new IllegalArgumentException("Missing GC name"); + } + + return switch (name) { + case "bump" -> + BUMP; + + case "mark-and-sweep" -> + GcMarkAndSweepConfig.fromToml(table); + + default -> + throw new IllegalArgumentException("Unrecognised GC name: \"%s\"".formatted(name)); + }; + } +} diff --git a/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java b/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java new file mode 100644 index 00000000..695654ea --- /dev/null +++ b/src/main/java/org/shedlang/compiler/config/GcMarkAndSweepConfig.java @@ -0,0 +1,14 @@ +package org.shedlang.compiler.config; + +import org.tomlj.TomlTable; + +import java.util.Optional; + +public record GcMarkAndSweepConfig( + Optional<Long> collectInterval +) implements GcConfig { + public static GcMarkAndSweepConfig fromToml(TomlTable table) { + var collectInterval = Optional.ofNullable(table.getLong("collect-interval")); + return new GcMarkAndSweepConfig(collectInterval); + } +} diff --git a/src/main/java/org/shedlang/compiler/config/ProfileConfig.java b/src/main/java/org/shedlang/compiler/config/ProfileConfig.java new file mode 100644 index 00000000..b8854721 --- /dev/null +++ b/src/main/java/org/shedlang/compiler/config/ProfileConfig.java @@ -0,0 +1,18 @@ +package org.shedlang.compiler.config; + +import org.tomlj.TomlTable; + +import java.util.Optional; + +public record ProfileConfig(String name, Optional<GcConfig> gc) { + public static ProfileConfig fromToml(TomlTable table) { + var name = table.getString("name"); + var gc = Optional.ofNullable(table.getTable("gc")) + .map(GcConfig::fromToml); + + return new ProfileConfig( + name, + gc + ); + } +} diff --git a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java index 5bd4b178..b7453f70 100644 --- a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java +++ b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java @@ -12,7 +12,8 @@ import java.util.stream.IntStream; public record ProjectConfig( Path root, List<BinConfig> bins, - List<ExampleConfig> examples + List<ExampleConfig> examples, + List<ProfileConfig> profiles ) { public static ProjectConfig read(Path projectPath) throws IOException { var tomlParseResult = Toml.parse(projectPath.resolve("shed.toml")); @@ -35,7 +36,8 @@ public record ProjectConfig( return new ProjectConfig( root, binsFromToml(table), - examplesFromToml(table) + examplesFromToml(table), + profilesFromToml(table) ); } @@ -55,6 +57,14 @@ public record ProjectConfig( .toList(); } + public static List<ProfileConfig> profilesFromToml(TomlTable table) { + var profilesArray = table.getArrayOrEmpty(List.of("shed", "profiles")); + + return IntStream.range(0, profilesArray.size()) + .mapToObj(profileIndex -> ProfileConfig.fromToml(profilesArray.getTable(profileIndex))) + .toList(); + } + public Path targetDir() { return root.resolve("target"); } |
