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=4c22d37890439cda08718785fcab64334de19cf0;hb=73e005ea3b2747a4f3008c3dcdc24c4bbcef3add;hpb=5bdc1b8dceb971518a0e836661f01e783aa37d63;ds=sidebyside diff --git a/Repair/RepairCompiler/MCC/IR/SumExpr.java b/Repair/RepairCompiler/MCC/IR/SumExpr.java index 4c22d37..c2b30ff 100755 --- a/Repair/RepairCompiler/MCC/IR/SumExpr.java +++ b/Repair/RepairCompiler/MCC/IR/SumExpr.java @@ -61,15 +61,33 @@ public class SumExpr extends Expr { VarDescriptor itvd=VarDescriptor.makeNew("iterator"); 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.addDeclaration("int",keyvd.getSafeSymbol()); - writer.outputline(keyvd.getSafeSymbol()+"=next(&"+itvd.getSafeSymbol()+");"); - VarDescriptor tmpvar=VarDescriptor.makeNew("tmp"); - writer.addDeclaration("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) {