X-Git-Url: http://plrg.eecs.uci.edu/git/?p=repair.git;a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FIR%2FSumExpr.java;h=c2b30ff3ff42a0fe06fd5c194ae1fed4b05dfe06;hp=310f2412314ad7e1c4c99c19454b8cbf1656546b;hb=73e005ea3b2747a4f3008c3dcdc24c4bbcef3add;hpb=1b99532f42913aa715aefa12e08085c2f82f0803 diff --git a/Repair/RepairCompiler/MCC/IR/SumExpr.java b/Repair/RepairCompiler/MCC/IR/SumExpr.java index 310f241..c2b30ff 100755 --- a/Repair/RepairCompiler/MCC/IR/SumExpr.java +++ b/Repair/RepairCompiler/MCC/IR/SumExpr.java @@ -54,19 +54,40 @@ public class SumExpr extends Expr { } public void generate(CodeWriter writer, VarDescriptor dest) { - writer.outputline("int "+dest.getSafeSymbol()+"=0;"); + writer.addDeclaration("int",dest.getSafeSymbol()); + writer.outputline(dest.getSafeSymbol()+"=0;"); + VarDescriptor itvd=VarDescriptor.makeNew("iterator"); - writer.outputline("struct SimpleIterator "+itvd.getSafeSymbol()+";"); + writer.addDeclaration("struct SimpleIterator",itvd.getSafeSymbol()); writer.outputline("SimpleHashiterator("+sd.getSafeSymbol()+"_hash , &"+itvd.getSafeSymbol()+");"); - writer.outputline("while (hasNext(&"+itvd.getSafeSymbol()+")) {"); - VarDescriptor keyvd=VarDescriptor.makeNew("key"); - writer.outputline("int "+keyvd.getSafeSymbol()+"=next(&"+itvd.getSafeSymbol()+");"); - VarDescriptor tmpvar=VarDescriptor.makeNew("tmp"); - writer.outputline("int "+tmpvar.getSafeSymbol()+";"); - writer.outputline("SimpleHashget("+rd.getSafeSymbol()+"_hash, "+keyvd.getSafeSymbol()+", &"+tmpvar.getSafeSymbol()+");"); - writer.outputline(dest.getSafeSymbol()+"+="+tmpvar.getSafeSymbol()+";"); - writer.outputline("}"); + writer.outputline("while (hasNext(&"+itvd.getSafeSymbol()+"))"); + writer.startblock(); + { + VarDescriptor keyvd=VarDescriptor.makeNew("key"); + writer.addDeclaration("int",keyvd.getSafeSymbol()); + writer.outputline(keyvd.getSafeSymbol()+"=next(&"+itvd.getSafeSymbol()+");"); + VarDescriptor tmpvar=VarDescriptor.makeNew("tmp"); + writer.addDeclaration("int",tmpvar.getSafeSymbol()); + + VarDescriptor newset=VarDescriptor.makeNew("newset"); + writer.addDeclaration("struct SimpleHash *",newset.getSafeSymbol()); + writer.outputline(newset.getSafeSymbol()+"=SimpleHashimageSet("+rd.getSafeSymbol()+"_hash, "+keyvd.getSafeSymbol()+", &"+tmpvar.getSafeSymbol()+");"); + + VarDescriptor itvd2=VarDescriptor.makeNew("iterator"); + writer.addDeclaration("struct SimpleIterator",itvd2.getSafeSymbol()); + writer.outputline("SimpleHashiterator("+newset.getSafeSymbol()+", &"+itvd2.getSafeSymbol()+");"); + + writer.outputline("while (hasNext(&"+itvd2.getSafeSymbol()+"))"); + writer.startblock(); + { + VarDescriptor keyvd2=VarDescriptor.makeNew("keyinner"); + writer.outputline(dest.getSafeSymbol()+"+=next(&"+itvd2.getSafeSymbol()+");"); + writer.endblock(); + } + writer.outputline("freeSimpleHash("+newset.getSafeSymbol()+");"); + writer.endblock(); + } } public void prettyPrint(PrettyPrinter pp) {