aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-12-05 19:00:29 +0000
committerMichael Williamson <mike@zwobble.org>2023-12-05 19:00:29 +0000
commit99f491698ed4954b38ec4226920ca767121fc14a (patch)
tree83b031ad894cb5ca272aa4f9be55d9c7215a36e4 /src/main/java
parent6a5b28a00b4d210ce5cb0fc3f8389d5d9eff8b52 (diff)
Convert Patio and Shid backends to behave as normal backends
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/Backends.java12
-rw-r--r--src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java (renamed from src/main/java/org/shedlang/compiler/backends/PatioBackend.java)21
-rw-r--r--src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java (renamed from src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java)22
-rw-r--r--src/main/java/org/shedlang/compiler/cli/ShedCli.java18
4 files changed, 36 insertions, 37 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/Backends.java b/src/main/java/org/shedlang/compiler/backends/Backends.java
index 7f64e392..6c596c6c 100644
--- a/src/main/java/org/shedlang/compiler/backends/Backends.java
+++ b/src/main/java/org/shedlang/compiler/backends/Backends.java
@@ -5,7 +5,6 @@ import org.shedlang.compiler.backends.llvm.LlvmBackend;
import org.shedlang.compiler.backends.wasm.WasmBackend;
import org.shedlang.compiler.util.PCollectors;
-import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Stream;
@@ -15,9 +14,14 @@ public class Backends {
}
private static final OrderedPMap<String, Backend> BACKENDS =
- Stream.of(LlvmBackend.INSTANCE, WasmBackend.INSTANCE)
- .map(backend -> Map.entry(backend.targetName(), backend))
- .collect(PCollectors.toOrderedPMap());
+ Stream.of(
+ LlvmBackend.INSTANCE,
+ PatioTextBackend.INSTANCE,
+ ShidTextBackend.INSTANCE,
+ WasmBackend.INSTANCE
+ )
+ .map(backend -> Map.entry(backend.targetName(), backend))
+ .collect(PCollectors.toOrderedPMap());
public static Set<String> targetNames() {
return BACKENDS.keySet();
diff --git a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java
index 24c034b9..8a52eae7 100644
--- a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/PatioTextBackend.java
@@ -7,21 +7,26 @@ import org.shedlang.compiler.patio.ast.PatioSerializer;
import org.shedlang.compiler.shid.ShidNamespace;
import org.shedlang.compiler.typechecker.TypeInfos;
+import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-public class PatioBackend implements Backend {
+public class PatioTextBackend implements Backend {
+ public static final PatioTextBackend INSTANCE = new PatioTextBackend();
+
+ private PatioTextBackend() {
+ }
+
public void compile(
ProjectConfig config,
List<ShidNamespace> namespaces,
TypeInfos typeInfos,
Path targetDir
- ) {
+ ) throws IOException {
var context = PatioCodeGenContext.forTypeInfos(typeInfos);
for (var namespace : namespaces) {
- System.out.println(namespace.namespaceName());
-
var compilationUnit = PatioCodeGen.generateNamespace(
namespace,
context
@@ -31,13 +36,15 @@ public class PatioBackend implements Backend {
PatioSerializer.serializeCompilationUnit(compilationUnit, builder);
var compilationUnitString = builder.toString();
- System.out.println(compilationUnitString);
- System.out.println();
+ var path = targetDir.resolve("namespaces")
+ .resolve(String.join("_", namespace.namespaceName().parts()) + ".patio-text");
+ Files.createDirectories(path.getParent());
+ Files.writeString(path, compilationUnitString);
}
}
@Override
public String targetName() {
- return "patio";
+ return "patio-text";
}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java
index 4e80c8ae..3a6962b0 100644
--- a/src/main/java/org/shedlang/compiler/backends/GenerateInstructionsBackend.java
+++ b/src/main/java/org/shedlang/compiler/backends/ShidTextBackend.java
@@ -5,33 +5,39 @@ import org.shedlang.compiler.shid.ShidSerializer;
import org.shedlang.compiler.shid.ShidNamespace;
import org.shedlang.compiler.typechecker.TypeInfos;
+import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
-public class GenerateInstructionsBackend implements Backend {
+public class ShidTextBackend implements Backend {
+ public static final ShidTextBackend INSTANCE = new ShidTextBackend();
+
+ private ShidTextBackend() {
+ }
+
public void compile(
ProjectConfig config,
List<ShidNamespace> namespaces,
TypeInfos typeInfos,
Path targetDir
- ) {
+ ) throws IOException {
for (var namespace : namespaces) {
- var namespaceName = namespace.namespaceName();
var instructions = namespace.instructions();
- System.out.println(namespaceName);
-
var builder = new StringBuilder();
ShidSerializer.serializeInstructions(instructions, builder);
var instructionsString = builder.toString();
- System.out.println(instructionsString);
- System.out.println();
+ var path = targetDir.resolve("namespaces")
+ .resolve(String.join("_", namespace.namespaceName().parts()) + ".shid-text");
+ Files.createDirectories(path.getParent());
+ Files.writeString(path, instructionsString);
}
}
@Override
public String targetName() {
- return "generate-instructions";
+ return "shid-text";
}
}
diff --git a/src/main/java/org/shedlang/compiler/cli/ShedCli.java b/src/main/java/org/shedlang/compiler/cli/ShedCli.java
index abe457c3..ef643c75 100644
--- a/src/main/java/org/shedlang/compiler/cli/ShedCli.java
+++ b/src/main/java/org/shedlang/compiler/cli/ShedCli.java
@@ -5,8 +5,6 @@ import net.sourceforge.argparse4j.inf.ArgumentParserException;
import net.sourceforge.argparse4j.inf.Namespace;
import org.shedlang.compiler.ShedCompiler;
import org.shedlang.compiler.backends.Backends;
-import org.shedlang.compiler.backends.GenerateInstructionsBackend;
-import org.shedlang.compiler.backends.PatioBackend;
import org.shedlang.compiler.errors.CompilerError;
import java.io.IOException;
@@ -33,12 +31,6 @@ public class ShedCli {
case COMPILE -> {
compiler.compile(sourcePath, Backends.backendForTarget(args.getString("target")));
}
- case GENERATE_INSTRUCTIONS -> {
- compiler.compile(sourcePath, new GenerateInstructionsBackend());
- }
- case PATIO -> {
- compiler.compile(sourcePath, new PatioBackend());
- }
}
}
@@ -53,14 +45,6 @@ public class ShedCli {
compileSubParser.addArgument("source").required(true);
compileSubParser.addArgument("--target").choices(Backends.targetNames()).required(true);
- var generateInstructionsSubParser = subparsers.addParser("generate-instructions");
- generateInstructionsSubParser.setDefault("command", Command.GENERATE_INSTRUCTIONS);
- generateInstructionsSubParser.addArgument("source").required(true);
-
- var patioSubParser = subparsers.addParser("patio");
- patioSubParser.setDefault("command", Command.PATIO);
- patioSubParser.addArgument("source").required(true);
-
try {
return parser.parseArgs(args);
} catch (ArgumentParserException e) {
@@ -72,7 +56,5 @@ public class ShedCli {
private enum Command {
COMPILE,
- GENERATE_INSTRUCTIONS,
- PATIO,
}
}