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()); }
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; } }
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()); } }