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