1 package joeq.Compiler.Analysis.IPSSA; 2 import joeq.Class.jq_Method; 3 import joeq.Compiler.Quad.Quad; 4 5 /*** 6 * An SSABinding is an assignment of an SSAValue to to an SSADefinition. 7 * @see SSADefinition 8 * @see joeq.Compiler.Analysis.IPSSA.SSAValue 9 * @see joeq.Compiler.Analysis.IPSSA.SSADefinition 10 * @version $Id: SSABinding.java 1709 2004-04-28 08:46:37Z joewhaley $ 11 * */ 12 public class SSABinding { 13 protected Quad _quad; 14 protected SSADefinition _destination; 15 protected SSAValue _value; 16 17 public SSABinding(Quad quad, SSADefinition def, SSAValue value) { 18 this._quad = quad; 19 this._destination = def; 20 this._value = value; 21 22 value.setDestination(def); 23 } 24 25 public SSABinding(Quad quad, SSALocation loc, SSAValue value, jq_Method method) { 26 this._quad = quad; 27 this._value = value; 28 29 SSADefinition def = SSAProcInfo.Helper.create_ssa_definition(loc, quad, method); 30 this._destination = def; 31 32 if(value != null){ 33 value.setDestination(def); 34 } 35 } 36 37 public void setValue(SSAValue value){ 38 this._value = value; 39 _value.setDestination(_destination); 40 } 41 42 /*** Tests whether the binding has been completed by filling out it RHS */ 43 public boolean isComplete(){ 44 return _value != null; 45 } 46 47 public boolean isValid(){ 48 return 49 (_value == null || _destination == _value.getDestination()) && 50 (_quad == _destination.getQuad()); 51 } 52 53 public SSADefinition getDestination() {return _destination;} 54 public SSAValue getValue() {return _value;} 55 public Quad getQuad() {return _destination.getQuad();} 56 57 public void accept(SSABindingVisitor vis) { 58 vis.visit(this); 59 } 60 61 public String toString(){ 62 return _destination.toString() + " = " + (_value == null ? "<incomplete>" : _value.toString()); 63 } 64 }