aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java')
-rw-r--r--src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
new file mode 100644
index 0000000..b38bc73
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/backends/python/PythonCompiler.java
@@ -0,0 +1,34 @@
+package org.zwobble.couscous.backends.python;
+
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.zwobble.couscous.ast.ClassNode;
+
+import static java.util.Arrays.asList;
+import static org.zwobble.couscous.backends.python.PythonCodeGenerator.generateCode;
+import static org.zwobble.couscous.backends.python.PythonSerializer.serialize;
+
+import lombok.SneakyThrows;
+import lombok.val;
+
+public class PythonCompiler {
+ public void compile(List<ClassNode> classes, Path path) {
+ for (val classNode : classes) {
+ compileClass(classNode, pathForClass(classNode, path));
+ }
+ }
+
+ private Path pathForClass(ClassNode classNode, Path path) {
+ return path.resolve(classNode.getName().replace(".", File.separator) + ".py");
+ }
+
+ @SneakyThrows
+ private void compileClass(ClassNode classNode, Path path) {
+ Files.createDirectories(path.getParent());
+ Files.write(path, asList(serialize(generateCode(classNode))));
+
+ }
+}