aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-20 16:33:58 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-20 16:33:58 +0000
commit6b9351154cade24a2cc962dcdced470a57c093bf (patch)
tree1be71d1b4d063b16c970f06f4ca917f46f6ddead /src/main/java
parentc8e2b873949eafcedb9dc131d1bb25eb2b127e40 (diff)
Extract main function name
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/config/ConfigChecker.java18
-rw-r--r--src/main/java/org/shedlang/compiler/config/MainFunction.java8
-rw-r--r--src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java4
3 files changed, 25 insertions, 5 deletions
diff --git a/src/main/java/org/shedlang/compiler/config/ConfigChecker.java b/src/main/java/org/shedlang/compiler/config/ConfigChecker.java
index fe607f83..5ffa074c 100644
--- a/src/main/java/org/shedlang/compiler/config/ConfigChecker.java
+++ b/src/main/java/org/shedlang/compiler/config/ConfigChecker.java
@@ -8,6 +8,8 @@ import org.shedlang.compiler.types.Types;
import java.util.List;
+import static org.shedlang.compiler.config.MainFunction.MAIN_FUNCTION_NAME;
+
public class ConfigChecker {
private ConfigChecker() {
}
@@ -20,10 +22,14 @@ public class ConfigChecker {
static void configCheckBin(BinConfig binConfig, TypeInfos typeInfos) {
var namespaceTypeInfo = typeInfos.namespaceTypeInfo(binConfig.mainNamespace())
- .orElseThrow(() -> new ConfigError("Namespace " + binConfig.mainNamespace() + " not found"));
+ .orElseThrow(() -> new ConfigError(
+ "Namespace " + binConfig.mainNamespace() + " not found"
+ ));
- var mainType = namespaceTypeInfo.fieldType("main")
- .orElseThrow(() -> new ConfigError("Namespace " + binConfig.mainNamespace() + " has no field main"));
+ var mainType = namespaceTypeInfo.fieldType(MAIN_FUNCTION_NAME)
+ .orElseThrow(() -> new ConfigError(
+ "Namespace " + binConfig.mainNamespace() + " has no field " + MAIN_FUNCTION_NAME
+ ));
var expectedMainType = new FunctionType(
List.of(),
@@ -33,7 +39,11 @@ public class ConfigChecker {
);
if (!mainType.equals(expectedMainType)) {
- throw new ConfigError("main function should have type " + expectedMainType.describe() + ", but " + binConfig.mainNamespace() + ".main has type " + mainType.describe());
+ throw new ConfigError(
+ MAIN_FUNCTION_NAME + " function should have type " + expectedMainType.describe() +
+ ", but " + binConfig.mainNamespace() + "." + MAIN_FUNCTION_NAME +
+ " has type " + mainType.describe()
+ );
}
}
}
diff --git a/src/main/java/org/shedlang/compiler/config/MainFunction.java b/src/main/java/org/shedlang/compiler/config/MainFunction.java
new file mode 100644
index 00000000..0a20d1b3
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/config/MainFunction.java
@@ -0,0 +1,8 @@
+package org.shedlang.compiler.config;
+
+public class MainFunction {
+ private MainFunction() {
+ }
+
+ public static final String MAIN_FUNCTION_NAME = "main";
+}
diff --git a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
index d0a04c97..ccacdf8e 100644
--- a/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/patio/PatioCodeGen.java
@@ -16,6 +16,8 @@ import org.shedlang.compiler.types.NamespaceName;
import java.util.*;
import java.util.function.Function;
+import static org.shedlang.compiler.config.MainFunction.MAIN_FUNCTION_NAME;
+
public class PatioCodeGen {
private PatioCodeGen() {}
@@ -66,7 +68,7 @@ public class PatioCodeGen {
mainField,
namespaceValue,
main,
- "main",
+ MAIN_FUNCTION_NAME,
source,
mainContext
);