From f522f1d19f71a8554bc1b7ef660c421f180cfbb7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 20 Jul 2023 16:35:39 +0100 Subject: Add Patio backend --- .../shedlang/compiler/backends/PatioBackend.java | 44 ++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/main/java/org/shedlang/compiler/backends/PatioBackend.java (limited to 'src/main/java/org/shedlang/compiler/backends') diff --git a/src/main/java/org/shedlang/compiler/backends/PatioBackend.java b/src/main/java/org/shedlang/compiler/backends/PatioBackend.java new file mode 100644 index 00000000..0db8579b --- /dev/null +++ b/src/main/java/org/shedlang/compiler/backends/PatioBackend.java @@ -0,0 +1,44 @@ +package org.shedlang.compiler.backends; + +import org.shedlang.compiler.config.ProjectConfig; +import org.shedlang.compiler.patio.PatioCodeGen; +import org.shedlang.compiler.patio.ast.PatioSerializer; +import org.shedlang.compiler.stackir.instructions.Instruction; +import org.shedlang.compiler.typechecker.TypeInfo; +import org.shedlang.compiler.types.NamespaceName; + +import java.nio.file.Path; +import java.util.List; +import java.util.Map; + +public class PatioBackend implements Backend { + public void compile( + ProjectConfig config, + Map> namespaces, + TypeInfo typeInfo, + Path targetDir + ) { + System.out.println("main: " + config.main()); + + for (var namespaceEntry : namespaces.entrySet()) { + var namespaceName = namespaceEntry.getKey(); + var instructions = namespaceEntry.getValue(); + + System.out.println(namespaceName); + + var compilationUnit = PatioCodeGen.generateNamespace(instructions); + + var builder = new StringBuilder(); + PatioSerializer.serializeCompilationUnit(compilationUnit, builder); + var compilationUnitString = builder.toString(); + + System.out.println(compilationUnitString); + System.out.println(); + } + } + + @Override + public String name() { + return "generate-instructions"; + } +} -- cgit v1.2.3