public static string BvExtractOpName(VCExprNAry node) { Contract.Requires(node != null); Contract.Requires(node.Op is VCExprBvExtractOp); Contract.Ensures(Contract.Result <string>() != null); VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op; return("$bv" + node.Type.BvBits + "_extract" + op.Total + "[" + op.Start + ":" + op.End + "]"); }
public Term VisitBvExtractOp(VCExprNAry node, LineariserOptions options) { Contract.Requires(options != null); Contract.Requires(node != null); VCExprBvExtractOp op = (VCExprBvExtractOp)node.Op; Contract.Assert(op != null); System.Diagnostics.Debug.Assert(0 <= op.Start && op.Start < op.End); List <Term> args = new List <Term>(); foreach (VCExpr e in node) { Contract.Assert(e != null); args.Add(ExprLineariser.Linearise(e, options)); } System.Diagnostics.Debug.Assert(args.Count == 1); return(ExprLineariser.cm.z3.MkBvExtract((uint)op.End - 1, (uint)op.Start, args[0])); }