diff options
Diffstat (limited to 'vaporize/library/Kettle.java')
-rw-r--r-- | vaporize/library/Kettle.java | 107 |
1 files changed, 67 insertions, 40 deletions
diff --git a/vaporize/library/Kettle.java b/vaporize/library/Kettle.java index 5baf69e..e413907 100644 --- a/vaporize/library/Kettle.java +++ b/vaporize/library/Kettle.java @@ -18,69 +18,96 @@ class Kettle { ArrayList<String> vaporm; protected Kettle(ArrayList<String> vapor) { - MinimalLogger.info("Pouring program into kettle..."); - this.vapor = vapor; - this.vaporm = new ArrayList<String>(); + MinimalLogger.info("Pouring program into kettle..."); + this.vapor = vapor; + this.vaporm = new ArrayList<String>(); } protected String get(Node n) { - /** - * Given the source position of a Node, returns the original line. - */ - return this.vapor.get(this.indexOf(n)); + /** + * Given the source position of a Node, returns the original line. + */ + return this.vapor.get(this.indexOf(n)); } protected void replaceFunctionDeclare(VFunction prev, int in, - int out, int local) { - /** - * Replaces a function declaraction in the program - * with the vapor equivalent. - */ - String next = String.format("func %s [in %d, out %d, local %d]", - this.parseFuncName(prev), - in, - out, - local); - - MinimalLogger.info(String.format("Replacing function declaraction %s with %s", - this.get(prev), - next)); - - this.set(prev, next); + int out, int local) { + /** + * Replaces a function declaraction in the program + * with the vapor equivalent. + */ + String next = String.format("func %s [in %d, out %d, local %d]", + this.parseFuncName(prev), + in, + out, + local); + + MinimalLogger.info(String.format("Replacing function declaraction %s with %s", + this.get(prev), + next)); + + this.set(prev, next); } protected String parseFuncName(VFunction func) { - /** - * Helper for replaceFunctionDeclare - * "func A_foo(this t.1)" -> "A_foo" - */ - String str = this.get(func); - int openParenIndex = str.indexOf('('); - return str.substring(5, openParenIndex).trim(); + /** + * Helper for replaceFunctionDeclare + * "func A_foo(this t.1)" -> "A_foo" + */ + String str = this.get(func); + int openParenIndex = str.indexOf('('); + return str.substring(5, openParenIndex).trim(); } protected String spill() { - return null; + return null; } protected String backup() { - return null; + return null; } protected String dump() { - return String.join("\n", this.vapor); + return String.join("\n", this.vapor); } - private int indexOf(Node n) { - return n.sourcePos.line-1; + /** + * Needed because VBranch doesn't seem to + * keep track of this... + */ + protected int findLabelIndex(VBranch n) { + int index = -1; + // is this guarenteed? + String search = n.target.toString().substring(1); + String comp; + for (int i = 0; i < this.vapor.size(); ++i) { + if (!this.vapor.get(i).isEmpty()) { + comp = this.vapor.get(i).trim(); + if (comp.substring(0, comp.length()-1) + .equals(search)) { + index = i; + break; + } + } + } + + if (index == -1) { + MinimalLogger.severe(String.format("findLabelIndex could not compute label for %s!", + this.get(n).trim())); + } + return index; + } + + protected int indexOf(Node n) { + return n.sourcePos.line-1; } private void set(Node n, String s) { - /** - * Sets the position of Node n in the original - * file to String s. - */ - this.vapor.set(this.indexOf(n), s); + /** + * Sets the position of Node n in the original + * file to String s. + */ + this.vapor.set(this.indexOf(n), s); } } |