public Result Decode <Data, Result, Visitor> (LabeledSymbol <APC, TSymbolicValue> expr, Visitor visitor, Data data) where Visitor : ISymbolicExpressionVisitor <LabeledSymbol <APC, TSymbolicValue>, LabeledSymbol <APC, TSymbolicValue>, TSymbolicValue, Data, Result> { ExprDomain <TSymbolicValue> ifFound; if (!this.parent.PreStateLookup(expr.ReadAt, out ifFound) || ifFound.IsBottom) { return(visitor.SymbolicConstant(expr, expr.Symbol, data)); } FlatDomain <Expr <TSymbolicValue> > aExpr = ifFound [expr.Symbol]; if (aExpr.IsNormal) { return(aExpr.Concrete.Decode <Data, Result, ExpressionDecoderAdapter <TSymbolicValue, Data, Result, Visitor> > (expr.ReadAt, expr.Symbol, new ExpressionDecoderAdapter <TSymbolicValue, Data, Result, Visitor> (visitor), data)); } TypeNode type; object constant; if (this.parent.ValueLayer.ILDecoder.ContextProvider.ValueContext.IsConstant(expr.ReadAt, expr.Symbol, out type, out constant)) { return(visitor.LoadConst(expr, type, constant, expr.Symbol, data)); } return(visitor.SymbolicConstant(expr, expr.Symbol, data)); }
public string PrintAt(LabeledSymbol <APC, SymbolicValue> expr) { var sb = new StringBuilder(); Recurse(sb, expr); return(sb.ToString()); }
public Dummy Binary(LabeledSymbol <APC, SymbolicValue> pc, BinaryOperator op, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> operand1, LabeledSymbol <APC, SymbolicValue> operand2, StringBuilder data) { data.Append('('); Recurse(data, operand1); data.AppendFormat(" {0} ", op); Recurse(data, operand2); data.Append(')'); return(Dummy.Value); }
private void Recurse(StringBuilder sb, LabeledSymbol <APC, SymbolicValue> expr) { if (expr.Symbol.Equals(default(SymbolicValue))) { sb.Append("<!null!>"); } else { this.context_provider.ExpressionContext.Decode <StringBuilder, Dummy, PrinterImpl <SymbolicValue> > (expr, this, sb); } }
public Dummy Isinst(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> obj, StringBuilder data) { data.AppendFormat("IsInst({0}) ", this.method_driver.MetaDataProvider.FullName(type)); Recurse(data, obj); return(Dummy.Value); }
public Dummy SymbolicConstant(LabeledSymbol <APC, SymbolicValue> pc, SymbolicValue variable, StringBuilder data) { data.Append(variable.ToString()); return(Dummy.Value); }
public Dummy Unary(LabeledSymbol <APC, SymbolicValue> pc, UnaryOperator op, bool unsigned, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> source, StringBuilder data) { data.AppendFormat("{0} ", op.ToString()); Recurse(data, source); return(Dummy.Value); }
public Dummy Sizeof(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, SymbolicValue dest, StringBuilder data) { data.AppendFormat("sizeof({0})", this.method_driver.MetaDataProvider.FullName(type)); return(Dummy.Value); }
public Dummy LoadConst(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, object constant, SymbolicValue dest, StringBuilder data) { data.Append(constant.ToString()); return(Dummy.Value); }
public Dummy LoadNull(LabeledSymbol <APC, SymbolicValue> pc, SymbolicValue dest, StringBuilder polarity) { polarity.Append("NULL"); return(Dummy.Value); }
public FlatDomain <TypeNode> GetType(LabeledSymbol <APC, TSymbolicValue> expr) { return(this.underlying.ValueContext.GetType(expr.ReadAt, expr.Symbol)); }
public TSymbolicValue Unrefine(LabeledSymbol <APC, TSymbolicValue> expression) { return(expression.Symbol); }
public bool IsZero(LabeledSymbol <APC, TSymbolicValue> expression) { return(ValueContext.IsZero(expression.ReadAt, expression.Symbol)); }
public APC GetPC(LabeledSymbol <APC, TSymbolicValue> pc) { return(pc.ReadAt); }