From 8625d3a2708e6332083a1b780b4f016beacf67d3 Mon Sep 17 00:00:00 2001 From: bd-912 Date: Fri, 19 Apr 2024 23:21:01 -0600 Subject: CFG captures both VBranch paths --- vaporize/library/Kettle.java | 107 +++++++++++++++++++++++++++---------------- 1 file changed, 67 insertions(+), 40 deletions(-) (limited to 'vaporize/library/Kettle.java') 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 vaporm; protected Kettle(ArrayList vapor) { - MinimalLogger.info("Pouring program into kettle..."); - this.vapor = vapor; - this.vaporm = new ArrayList(); + MinimalLogger.info("Pouring program into kettle..."); + this.vapor = vapor; + this.vaporm = new ArrayList(); } 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); } } -- cgit v1.2.3