示例#1
0
 public ActionSet(ComprehensionData comprData)
 {
     Contract.Requires(comprData != null);
     AST             = Factory.Instance.ToAST(comprData.Node);
     Index           = comprData.Owner.Index;
     myComprData     = comprData;
     TypeEnvironment = comprData.Owner.TypeEnvironment.AddChild(comprData.Node);
     IsCompiled      = LiftedBool.Unknown;
 }
示例#2
0
        public ActionSet(AST <Node> ast, TermIndex index)
        {
            Contract.Requires(index != null && ast != null);
            Contract.Requires(ast.Node.NodeKind == NodeKind.Rule || ast.Node.NodeKind == NodeKind.ContractItem);
            //// TODO: Accept contract specifications too.

            AST             = ast;
            Index           = index;
            myComprData     = null;
            TypeEnvironment = new TypeEnvironment(ast.Node, index);
            IsCompiled      = LiftedBool.Unknown;
        }
示例#3
0
        internal Action(
            Node head,
            ConstraintSystem body,
            TypeEnvironment typeEnv,
            ComprehensionData comprData = null,
            Node configurationContext   = null)
        {
            Head        = head;
            Body        = body;
            myComprData = comprData;
            this.configurationContext = configurationContext;

            typeEnvironment = typeEnv;
            theUnnSymbol    = body.Index.SymbolTable.GetOpSymbol(ReservedOpKind.TypeUnn);
            theRngSymbol    = body.Index.SymbolTable.GetOpSymbol(ReservedOpKind.Range);
        }
示例#4
0
            /// <summary>
            /// W.R.T. orientations, comprehension variables are simulated as an equality whose LHS can never orient
            /// the variables on the RHS.
            /// </summary>
            public ItemData(Term comprVar, ComprehensionData comprData)
            {
                ComponentId = NoComponentId;
                Item        = comprVar;
                OrderId     = NoOrderId;
                Kind        = ItemKind.Compr;

                Variables = new Set <Term>(Term.Compare, comprData.ReadVars.Keys);
                Variables.Add(comprVar);

                //// A compr var is oriented if its reads are oriented, but a compr var
                //// cannot orient its reads.
                EqData = new OrientationData();
                EqData.LHSVars.Add(comprVar);
                EqData.LHSOriented.Add(comprVar);
                foreach (var v in comprData.ReadVars.Keys)
                {
                    EqData.RHSVars.Add(v);
                }
            }