Esempio n. 1
0
        private AbstractStackState <VariabilityInfo> HandleLdsfld(ILInstruction ili, AbstractStackState <VariabilityInfo> pre)
        {
            FieldInfo    field      = (FieldInfo)ili.Operand;
            FieldFacts   fieldFacts = FactUniverse.Instance.GetFacts(field);
            EVariability fieldVar   = fieldFacts.IsWritten || fieldFacts.IsSubMutated ?
                                      EVariability.ExternVariable : EVariability.Constant;
            VariabilityInfo newVar = VariabilityInfo.CreateBySingleDef(fieldVar, ili.Index);

            return(pre
                   .Push(newVar)
                   .UniqueSuccessor());
        }
Esempio n. 2
0
        public void VisitFieldRef(FieldRef fieldRef)
        {
            var cfd = fieldRef.FieldDesc as CILFieldDescriptor;

            if (cfd != null)
            {
                FieldFacts facts = FactUniverse.Instance.GetFacts(cfd.Field);
                ConstValue = fieldRef.FieldDesc.ConstantValue;
                Result     = !facts.IsWritten;
            }
            else
            {
                Result = false;
            }
        }
Esempio n. 3
0
        private AbstractStackState <VariabilityInfo> HandleLdfld(ILInstruction ili, AbstractStackState <VariabilityInfo> pre)
        {
            FieldInfo field = (FieldInfo)ili.Operand;
            int       index = Array.IndexOf(_localizedFields, field);

            if (index >= 0)
            {
                return(HandleLdloc(null, pre.Pop(), _localizedFieldsBaseIndex + index));
            }
            else
            {
                FieldFacts   fieldFacts = FactUniverse.Instance.GetFacts(field);
                EVariability fieldVar   = fieldFacts.IsWritten || fieldFacts.IsSubMutated ?
                                          EVariability.ExternVariable : EVariability.Constant;
                VariabilityInfo newVar = VariabilityInfo.CreateBySingleDef(fieldVar, ili.Index);
                return(pre
                       .Pop()
                       .Push(newVar)
                       .UniqueSuccessor());
            }
        }