diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-12-05 19:00:29 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-12-05 19:00:29 +0000 |
| commit | 99f491698ed4954b38ec4226920ca767121fc14a (patch) | |
| tree | 83b031ad894cb5ca272aa4f9be55d9c7215a36e4 /src/main/java | |
| parent | 6a5b28a00b4d210ce5cb0fc3f8389d5d9eff8b52 (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.java | 12 | ||||
| -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.java | 18 |
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, } } |
