diff options
Diffstat (limited to 'boil/library/BoilSimp.java')
-rw-r--r-- | boil/library/BoilSimp.java | 74 |
1 files changed, 45 insertions, 29 deletions
diff --git a/boil/library/BoilSimp.java b/boil/library/BoilSimp.java index 991319f..b8fee08 100644 --- a/boil/library/BoilSimp.java +++ b/boil/library/BoilSimp.java @@ -204,9 +204,9 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { n.f0.accept(this, symt); String id = n.f1.accept(this, symt); mod += String.format(" %s = HeapAllocZ(32)\n", - this.tf.addNewAlias(symt.getType(id))); // FIXME add proper allocation size + this.tf.alias(symt.getType(id))); // FIXME add proper allocation size mod += String.format(" if0 %s goto :error\n", - this.tf.retrieveAlias(symt.getType(id))); + this.tf.alias(symt.getType(id))); mod += n.f2.accept(this, symt); return mod; } @@ -372,7 +372,7 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { String mod = ""; String id = n.f0.accept(this, symt); - mod += String.format(" [%s] = ", this.tf.retrieveAlias(symt.getType(id))); + mod += String.format(" [%s] = ", this.tf.alias(symt.getType(id))); mod += n.f1.accept(this, symt); mod += n.f2.accept(this, symt); mod += n.f3.accept(this, symt); @@ -508,7 +508,6 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { String oper1 = n.f0.accept(this, symt); mod += n.f1.accept(this, symt); String oper2 = n.f2.accept(this, symt); - TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); mod += String.format("Add(%s %s)", oper1, @@ -524,9 +523,15 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { */ public String visit(MinusExpression n, SymbolTable symt) { String mod = ""; - mod += n.f0.accept(this, symt); + String oper1 = n.f0.accept(this, symt); mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); + String oper2 = n.f2.accept(this, symt); + + mod += String.format("Sub(%s %s)", + oper1, + oper2); + + return mod; } @@ -537,9 +542,15 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { */ public String visit(TimesExpression n, SymbolTable symt) { String mod = ""; - mod += n.f0.accept(this, symt); + String oper1 = n.f0.accept(this, symt); mod += n.f1.accept(this, symt); - mod += n.f2.accept(this, symt); + String oper2 = n.f2.accept(this, symt); + + mod += String.format("Mul(%s %s)", + oper1, + oper2); + + return mod; } @@ -593,35 +604,27 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { .getMethods().indexOf(symt.getMethod(id2)) * 4; mod += String.format(" %s = [%s+%d]\n", - this.tf.addNewAlias(tp1), - this.tf.retrieveAlias(cur), + this.tf.alias(tp1), + this.tf.alias(cur), 0); mod += String.format(" %s = [%s+%d]\n", - this.tf.addNewAlias(tp2), - this.tf.retrieveAlias(tp1), + this.tf.alias(tp2), + this.tf.alias(tp1), mtdIndex); mod += n.f3.accept(this, symt); - String args = n.f4.accept(this, symt); + mod += n.f4.accept(this, symt); mod += n.f5.accept(this, symt); - TypeInstance tp3 = new TypeInstance("tp3", TypeEnum.ERROR); - - if (!args.isEmpty()) - mod += String.format(" %s = %s\n", - this.tf.addNewAlias(tp3), - args); - mod += String.format(" call %s(%s", - this.tf.retrieveAlias(tp2), - this.tf.retrieveAlias(cur)); + this.tf.alias(tp2), + this.tf.alias(cur)); - if (!args.isEmpty()) - mod += String.format(" %s", - this.tf.retrieveAlias(tp3)); - - mod += ")\n"; + mod += String.format("%s)\n", + this.tf.retrieveRecentList(symt.getMethod(id2) + .getArguments() + .size())); return mod; } @@ -632,8 +635,15 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { */ public String visit(ExpressionList n, SymbolTable symt) { String mod = ""; - mod += n.f0.accept(this, symt); + String rhs = n.f0.accept(this, symt); + TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); + + mod += String.format(" %s = %s\n", + this.tf.alias(tp1), + rhs); + mod += n.f1.accept(this, symt); + return mod; } @@ -644,7 +654,13 @@ public class BoilSimp extends GJDepthFirst<String,SymbolTable> { public String visit(ExpressionRest n, SymbolTable symt) { String mod = ""; mod += n.f0.accept(this, symt); - mod += n.f1.accept(this, symt); + String rhs = n.f1.accept(this, symt); + TypeInstance tp1 = new TypeInstance("tp1", TypeEnum.ERROR); + + mod += String.format(" %s = %s\n", + this.tf.alias(tp1), + rhs); + return mod; } |