Generate code to compute the sum.
[repair.git] / Repair / RepairCompiler / MCC / IR / SumExpr.java
index 34457c3f8d8100453a96bab712b336764d6e73f1..9a83f8ef2b8f3b6aebb9c5c7ec8ca70c1ece2b9f 100755 (executable)
@@ -54,7 +54,19 @@ public class SumExpr extends Expr {
     }
 
     public void generate(CodeWriter writer, VarDescriptor dest) {
-        throw new Error();
+        writer.outputline("int "+dest.getSafeSymbol()+"=0;");
+
+        VarDescriptor itvd=VarDescriptor.makeNew("iterator");
+        writer.outputline("SimpleIterator "+itvd.getSafeSymbol()+";");
+        writer.outputline(sd.getSafeSymbol()+"_hash->iterator("+itvd.getSafeSymbol()+");");
+        writer.outputline("while ("+itvd.getSafeSymbol()+".hasNext()) {");
+        VarDescriptor keyvd=VarDescriptor.makeNew("key");
+        writer.outputline("int "+keyvd.getSafeSymbol()+"="+itvd.getSafeSymbol()+".next();");
+        VarDescriptor tmpvar=VarDescriptor.makeNew("tmp");
+        writer.outputline("int "+tmpvar.getSafeSymbol()+";");
+        writer.outputline(rd.getSafeSymbol()+ "_hash->get("+keyvd.getSafeSymbol()+","+tmpvar.getSafeSymbol()+");");
+        writer.outputline(dest.getSafeSymbol()+"+="+tmpvar.getSafeSymbol()+";");
+        writer.outputline("}");
     }
 
     public void prettyPrint(PrettyPrinter pp) {