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 + "]");
        }
Exemple #2
0
            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]));
            }