aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-24 20:25:27 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-24 20:25:27 +0000
commit6dfbc56f7d0c52c5d5b15c38b375fb857609b6e4 (patch)
treec41a2484abc118fd1c6c8f9cafc3bc553c75f729 /src/main/java
parent33b25bfd3fbd214864126d88e0e52e0c4c2fcb1d (diff)
Update Patio text backend to use common code for Patio backends
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java71
1 files changed, 53 insertions, 18 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java
index a68f9303..9a34d6e5 100644
--- a/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java
@@ -1,12 +1,13 @@
package org.shedlang.compiler.backends;
+import org.shedlang.compiler.backends.paths.PartialTargetPath;
import org.shedlang.compiler.backends.paths.TargetDir;
import org.shedlang.compiler.config.ProjectConfig;
-import org.shedlang.compiler.shidtopatio.ShidToPatio;
-import org.shedlang.compiler.shidtopatio.ShidToPatioContext;
+import org.shedlang.compiler.patio.PatioCompilationUnit;
import org.shedlang.compiler.patio.PatioSerializer;
import org.shedlang.compiler.shid.ShidNamespace;
import org.shedlang.compiler.typechecker.TypeInfos;
+import org.shedlang.compiler.types.NamespaceName;
import java.io.IOException;
import java.nio.file.Files;
@@ -18,35 +19,69 @@ public class PatioTextBackend implements Backend {
private PatioTextBackend() {
}
+ @Override
+ public String targetName() {
+ return "patio-text";
+ }
+
public void compile(
ProjectConfig config,
List<ShidNamespace> namespaces,
TypeInfos typeInfos,
TargetDir targetDir
- ) throws IOException {
- var context = ShidToPatioContext.forTypeInfos(typeInfos);
+ ) throws IOException, InterruptedException {
+ PatioBackends.compile(
+ config,
+ namespaces,
+ typeInfos,
+ new PatioToText(targetDir)
+ );
+ }
+
+ private static class PatioToText implements PatioBackends.PatioToTarget {
+
+ private final TargetDir targetDir;
+
+ public PatioToText(TargetDir targetDir) {
+ this.targetDir = targetDir;
+ }
- for (var namespace : namespaces) {
- var compilationUnitResult = ShidToPatio.generateNamespace(
- namespace,
- context
+ @Override
+ public PatioBackends.PatioToTarget namespace(
+ NamespaceName namespaceName,
+ PatioCompilationUnit patioCompilationUnit
+ ) throws IOException, InterruptedException {
+ serializeToDisk(
+ targetDir.namespace(namespaceName),
+ patioCompilationUnit
);
- var compilationUnit = compilationUnitResult.value();
- context = compilationUnitResult.context();
+ return this;
+ }
+
+ @Override
+ public void bin(
+ String binName,
+ PatioCompilationUnit patioCompilationUnit,
+ String mainFunctionName
+ ) throws IOException, InterruptedException {
+ serializeToDisk(
+ targetDir.bin(binName),
+ patioCompilationUnit
+ );
+ }
+
+ private void serializeToDisk(
+ PartialTargetPath partialTargetPath,
+ PatioCompilationUnit patioCompilationUnit
+ ) throws IOException {
var builder = new StringBuilder();
- PatioSerializer.serializeCompilationUnit(compilationUnit, builder);
+ PatioSerializer.serializeCompilationUnit(patioCompilationUnit, builder);
var compilationUnitString = builder.toString();
- var path = targetDir.namespace(namespace.namespaceName())
- .withExtension(".patio-text");
+ var path = partialTargetPath.withExtension(".patio-text");
Files.createDirectories(path.getParent());
Files.writeString(path, compilationUnitString);
}
}
-
- @Override
- public String targetName() {
- return "patio-text";
- }
}