public override bool IsConstant(object value) { if (value == null) { return(false); } switch (NodeType) { case AstNodeType.AndAlso: if (value.Equals(true)) { return(_left.IsConstant(true) && _right.IsConstant(true)); } if (value.Equals(false)) { // if left isn't a constant it has to be evaluated return(_left.IsConstant(false)); } break; case AstNodeType.OrElse: if (value.Equals(true)) { return(_left.IsConstant(true)); } if (value.Equals(false)) { return(_left.IsConstant(false) && _right.IsConstant(false)); } break; } return(false); }
internal WriteStatement(Variable var, Expression value) : base(AstNodeType.WriteStatement, SourceSpan.None) { _value = value; _variable = var; if (!value.IsConstant(null)) { _variable.AssumedValue = _variable.AssumedValue == null?GetReference(value) : null; } }
internal WriteStatement(Variable var, Expression value) : base(AstNodeType.WriteStatement, SourceSpan.None) { _value = value; _variable = var; if (!value.IsConstant(null)) { _variable.AssumedValue = _variable.AssumedValue == null ? GetReference(value) : null; } }
internal BoundAssignment(Variable /*!*/ variable, Expression /*!*/ value) : base(AstNodeType.BoundAssignment) { _variable = variable; _value = value; if (value.IsConstant(null)) { #warning See if this is problematic, gets invoked by pfds tests //Debugger.Break(); } _variable.AssumedValue = _variable.AssumedValue == null?GetReference(value) : null; }
internal BoundAssignment(Variable /*!*/ variable, Expression /*!*/ value) : base(AstNodeType.BoundAssignment) { _variable = variable; _value = value; if (value.IsConstant(null)) { #warning See if this is problematic, gets invoked by pfds tests //Debugger.Break(); } _variable.AssumedValue = _variable.AssumedValue == null ? GetReference(value) : null; }