aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-11 13:08:47 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-11 13:08:47 +0100
commitca311896123cef55820cf04dba15f6599c0351af (patch)
tree07daaa2d0272d0beda9fa5cdafa6430cd9d5a764 /src/main/java
parentaa7ae2695c1ee5b919832b84df401614a7500a27 (diff)
Parser main config
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java5
-rw-r--r--src/main/java/org/shedlang/compiler/config/ProjectConfig.java33
-rw-r--r--src/main/java/org/shedlang/compiler/types/NamespaceName.java10
3 files changed, 48 insertions, 0 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java
index 102d7c6f..24455816 100644
--- a/src/main/java/org/shedlang/compiler/ShedCompiler.java
+++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java
@@ -1,5 +1,6 @@
package org.shedlang.compiler;
+import org.shedlang.compiler.config.ProjectConfig;
import org.shedlang.compiler.parser.Parser;
import org.shedlang.compiler.sources.Sources;
import org.shedlang.compiler.stackir.InstructionSerializer;
@@ -27,6 +28,10 @@ import static org.shedlang.compiler.parser.Tokeniser.tokenise;
public class ShedCompiler {
public void compile(Path projectRoot) throws IOException {
+ var config = ProjectConfig.read(projectRoot);
+
+ System.out.println("main: " + config.main());
+
var sourceRoot = projectRoot.resolve("src");
var sourceFilePaths = collectSourceFilePaths(sourceRoot);
diff --git a/src/main/java/org/shedlang/compiler/config/ProjectConfig.java b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java
new file mode 100644
index 00000000..faa12c0b
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/config/ProjectConfig.java
@@ -0,0 +1,33 @@
+package org.shedlang.compiler.config;
+
+import org.shedlang.compiler.types.NamespaceName;
+import org.tomlj.Toml;
+import org.tomlj.TomlTable;
+
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Arrays;
+
+public class ProjectConfig {
+ public static ProjectConfig read(Path projectPath) throws IOException {
+ var result = Toml.parse(projectPath.resolve("shed.toml"));
+ if (result.hasErrors()) {
+ throw result.errors().get(0);
+ }
+
+ return new ProjectConfig(result);
+ }
+
+ private final TomlTable config;
+
+ public ProjectConfig(TomlTable config) {
+ this.config = config;
+ }
+
+ public NamespaceName main() {
+ var string = config.getString("shed.main");
+ // TODO: error checking
+ // TODO: extract namespace name parsing
+ return new NamespaceName(Arrays.asList(string.split("/")));
+ }
+}
diff --git a/src/main/java/org/shedlang/compiler/types/NamespaceName.java b/src/main/java/org/shedlang/compiler/types/NamespaceName.java
new file mode 100644
index 00000000..a064d699
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/types/NamespaceName.java
@@ -0,0 +1,10 @@
+package org.shedlang.compiler.types;
+
+import java.util.List;
+
+public record NamespaceName(List<String> parts) {
+ @Override
+ public String toString() {
+ return String.join("/", parts);
+ }
+}