summaryrefslogtreecommitdiff
path: root/condense/Utilities.java
diff options
context:
space:
mode:
Diffstat (limited to 'condense/Utilities.java')
-rw-r--r--condense/Utilities.java40
1 files changed, 40 insertions, 0 deletions
diff --git a/condense/Utilities.java b/condense/Utilities.java
new file mode 100644
index 0000000..9c052fc
--- /dev/null
+++ b/condense/Utilities.java
@@ -0,0 +1,40 @@
+package condense;
+
+import java.util.*;
+
+public class Utilities {
+
+
+ public static int computeStackFrameSize(String declare) {
+ MinimalLogger.info(String.format("Computing frame stack size for %s...",
+ declare));
+ declare = extractNumeric(declare);
+ // assume that the LAST three digits are
+ // in, out, local
+ String[] sizes = declare.split(SPACE)[:-3];
+ int ret = this.stackFrameFormula(Integer.parseInt(sizes[1]),
+ Integer.parseInt(sizes[2]));
+ MinimalLogger.info(String.format("Stack size is (%s + %s + 2) * 4 = %d",
+ sizes[1],
+ sizes[2],
+ ret));
+ return ret;
+ }
+
+ private static int stackFrameFormula(int out, int local) {
+ return (out + local + 2) * 4;
+ }
+
+ private static int extractNumeric(String str) {
+ str = str.replaceAll("[^\\d] & quot;, "
+ ");
+ str = str.trim();
+ str = str.replaceAll(" + ", "
+ ");
+ if (str.equals(" "))
+ return "
+ -1 & quot;
+ ;
+ return str;
+ }
+}