public bool AddConstant(ulong value) { if (Status == VariableStatusType.OverDefined) { return(false); } if (constants != null) { if (constants.Contains(value)) { return(false); } } else { constants = new List <ulong>(2); AppendConstant(value); Status = VariableStatusType.SingleConstant; return(true); } if (constants.Count > MAXCONSTANTS) { Status = VariableStatusType.OverDefined; constants = null; return(true); } AppendConstant(value); Status = VariableStatusType.MultipleConstants; return(true); }
public VariableState(Operand operand) { Operand = operand; IsVirtualRegister = operand.IsVirtualRegister; IsReferenceType = operand.IsReferenceType; ConstantsContainZero = false; if (IsVirtualRegister) { Status = VariableStatusType.Unknown; IsVirtualRegister = true; } else if (operand.IsUnresolvedConstant) { IsOverDefined = true; } else if (operand.IsConstant && operand.IsInteger) { AddConstant(operand.ConstantUnsigned64); } else if (operand.IsNull) { AddConstant(0); } else { IsOverDefined = true; } if (!IsReferenceType || !IsVirtualRegister) { ReferenceStatus = ReferenceStatusType.OverDefined; } else { ReferenceStatus = ReferenceStatusType.Unknown; } }