From 34d0e1bb0ed84ca4733811f837ea5847be3cd924 Mon Sep 17 00:00:00 2001 From: Marvin Kaiser Date: Tue, 14 Jan 2020 18:37:34 +0100 Subject: [PATCH] Added cli argument to either generate main method or not --- src/main/java/de/hsrm/compiler/Klang/Klang.java | 7 ++++++- .../de/hsrm/compiler/Klang/visitors/GenASM.java | 13 ++++++++++--- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/hsrm/compiler/Klang/Klang.java b/src/main/java/de/hsrm/compiler/Klang/Klang.java index 19f3268..5696616 100644 --- a/src/main/java/de/hsrm/compiler/Klang/Klang.java +++ b/src/main/java/de/hsrm/compiler/Klang/Klang.java @@ -17,6 +17,7 @@ public class Klang { boolean evaluate = false; boolean prettyPrint = false; boolean compile = true; + String mainName = "main"; List arguments = Arrays.asList(args); if (arguments.contains("-h") || arguments.contains("--help") || arguments.contains("?")) { @@ -29,6 +30,7 @@ public class Klang { System.out.println("--evaluate:\t Evaluates the given source code"); System.out.println("--pretty:\t Pretty print the given source code"); System.out.println("--no-compile:\t Do not compile the source code"); + System.out.println("--no-main:\t Do not generate main function, will be generated as 'start'. Useful for testing"); return; } if (arguments.contains("--evaluate")) { @@ -40,6 +42,9 @@ public class Klang { if (arguments.contains("--no-compile")) { compile = false; } + if (arguments.contains("--no-main")) { + mainName = "start"; + } // create a CharStream that reads from standard input CharStream input = CharStreams.fromStream(System.in); @@ -71,7 +76,7 @@ public class Klang { // System.out.println("\nPrinting the assembler code"); StringWriter wAsm = new StringWriter(); GenASM.ExWriter exAsm = new GenASM.ExWriter(wAsm); - GenASM genasm = new GenASM(exAsm); + GenASM genasm = new GenASM(exAsm, mainName); node.welcome(genasm); System.out.println(wAsm.toString()); } diff --git a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java index eeb48aa..d021f1d 100644 --- a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java +++ b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java @@ -56,13 +56,20 @@ public class GenASM implements Visitor { } public ExWriter ex; + private String mainName; Map env = new HashMap<>(); Set vars; String[] rs = { "%rdi", "%rsi", "%rdx", "%rcx", "%r8", "%r9" }; private int lCount = 0; // Invariante: lCount ist benutzt + public GenASM(ExWriter ex, String mainName) { + this.ex = ex; + this.mainName = mainName; + } + public GenASM(ExWriter ex) { this.ex = ex; + this.mainName = "main"; } @Override @@ -445,9 +452,9 @@ public class GenASM implements Visitor { func.welcome(this); this.ex.write("\n"); } - this.ex.write(".globl start\n"); - this.ex.write(".type start, @function\n"); - this.ex.write("start:\n"); + this.ex.write(".globl " + mainName + "\n"); + this.ex.write(".type " +mainName + ", @function\n"); + this.ex.write(mainName + ":\n"); this.ex.write(" pushq %rbp\n"); this.ex.write(" movq %rsp, %rbp\n"); e.expression.welcome(this);