X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=Repair%2FRepairCompiler%2FMCC%2FIR%2FUpdateNode.java;h=ee6bdac134c291c4ecd870f71e8324ee7b8e8de8;hb=ffaf9068b5b6b06866bee46a83abb9e3c00b1b85;hp=16388e00eeb3743c96aad3edb9676595c455f1bb;hpb=1786f2e81855da1faf744ee28f40e53628aff9f2;p=repair.git diff --git a/Repair/RepairCompiler/MCC/IR/UpdateNode.java b/Repair/RepairCompiler/MCC/IR/UpdateNode.java index 16388e0..ee6bdac 100755 --- a/Repair/RepairCompiler/MCC/IR/UpdateNode.java +++ b/Repair/RepairCompiler/MCC/IR/UpdateNode.java @@ -1,24 +1,40 @@ package MCC.IR; import java.util.*; +import MCC.State; class UpdateNode { Vector updates; Vector bindings; + Vector invariants; Hashtable binding; + Rule rule; - public UpdateNode() { + public UpdateNode(Rule r) { updates=new Vector(); bindings=new Vector(); + invariants=new Vector(); binding=new Hashtable(); + rule=r; + } + + public Rule getRule() { + return rule; } public String toString() { String st=""; + st+="Bindings:\n"; for(int i=0;i"+rd.getJustSafeSymbol()+"_hash, (int)" + leftvar.getSafeSymbol() + ", (int)" + rightvar.getSafeSymbol() + ");"); + if (usageinvimage) + cr.outputline("SimpleHashremove("+rg.stmodel+"->"+rd.getJustSafeSymbol()+"_hashinv, (int)" + rightvar.getSafeSymbol() + ", (int)" + leftvar.getSafeSymbol() + ");"); + + for(int i=0;i"+sd.getJustSafeSymbol()+"_hash, (int)" + leftvar.getSafeSymbol() + ", (int)" + leftvar.getSafeSymbol() + ");"); + + for(int i=0;i"+rd.getJustSafeSymbol()+"_hash, (int)" + leftvar.getSafeSymbol() + ", (int)" + rightvar.getSafeSymbol() + ");"); + if (usageinvimage) + cr.outputline("SimpleHashadd("+rg.stmodel+"->"+rd.getJustSafeSymbol()+"_hashinv, (int)" + rightvar.getSafeSymbol() + ", (int)" + leftvar.getSafeSymbol() + ");"); + + UpdateNode un=mun.getUpdate(0); + String name=(String)rg.updatenames.get(un); + cr.outputline(name+"(this,"+rg.stmodel+","+rg.strepairtable+","+leftvar.getSafeSymbol()+","+rightvar.getSafeSymbol()+");"); + } else { + SetDescriptor sd=(SetDescriptor)d; + cr.outputline("SimpleHashadd("+rg.stmodel+"->"+sd.getJustSafeSymbol()+"_hash, (int)" + leftvar.getSafeSymbol() + ", (int)" + leftvar.getSafeSymbol() + ");"); + + UpdateNode un=mun.getUpdate(0); + /* Update for rule rule r */ + String name=(String)rg.updatenames.get(un); + cr.outputline(name+"(this,"+rg.stmodel+","+rg.strepairtable+","+leftvar.getSafeSymbol()+");"); + } + } + } + + public void generate(CodeWriter cr, boolean removal, boolean modify, String slot0, String slot1, String slot2, RepairGenerator rg) { + if (!removal&&!modify) + generate_bindings(cr, slot0,slot1); + for(int i=0;i=0;i--) { + Expr e=(Expr)dotvector.get(i); + if (e instanceof CastExpr) { + newexpr.td=e.td; + newexpr=new CastExpr(((CastExpr)e).getType(),newexpr); + } else if (e instanceof DotExpr) { + DotExpr de=(DotExpr)e; + if (de.getField() instanceof ArrayDescriptor) { + DotExpr de2=new DotExpr(newexpr,de.field,new IntegerLiteralExpr(0)); + de2.fd=de.fd; + de2.fieldtype=de.fieldtype; + de2.td=de.td; + OpExpr offset=new OpExpr(Opcode.SUB,rightve,de2); + OpExpr index=new OpExpr(Opcode.DIV,offset,de.fieldtype.getSizeExpr()); + if (u.getRightPos()==apindex) { + index.generate(cr,newright); + return; + } else { + DotExpr de3=new DotExpr(newexpr,de.field,index); + de3.fd=de.fd; + de3.td=de.td; + de3.fieldtype=de.fieldtype; + newexpr=de3; + } + } else { + DotExpr de2=new DotExpr(newexpr,de.field,null); + de2.fd=de.fd; + de2.fieldtype=de.fieldtype; + de2.td=de.td; + newexpr=de2; + } + apindex++; + } else throw new Error(); + } + throw new Error(); + } + + private void generate_bindings(CodeWriter cr, String slot0, String slot1) { + for(int i=0;i1 doesn't exist."); + } + } + } + } }