/// <summary> /// Tries to parse a range node to obtain the corresponding range of constants. /// </summary> /// <param name="range">The range to parse.</param> /// <param name="result">The constant range upon return if successful.</param> /// <param name="error">The error in case of failure.</param> public static bool TryParseRange(IRange range, out IConstantRange result, out IError error) { result = null; IOrderedLanguageConstant LeftExpressionConstant; IOrderedLanguageConstant RightExpressionConstant; if (!LanguageConstant.TryParseExpression((IExpression)range.LeftExpression, out LeftExpressionConstant, out error)) { return(false); } if (!range.RightExpression.IsAssigned) { RightExpressionConstant = LeftExpressionConstant; } else if (!LanguageConstant.TryParseExpression((IExpression)range.RightExpression.Item, out RightExpressionConstant, out error)) { return(false); } if (!LeftExpressionConstant.IsCompatibleWith(RightExpressionConstant)) { error = new ErrorIncompatibleRangeBounds(range); return(false); } result = new ConstantRange(LeftExpressionConstant, RightExpressionConstant); error = null; return(true); }
/// <summary> /// Checks for errors before applying a rule. /// </summary> /// <param name="node">The node instance to check.</param> /// <param name="dataList">Optional data collected during inspection of sources.</param> /// <param name="data">Private data to give to Apply() upon return.</param> /// <returns>True if an error occured.</returns> public override bool CheckConsistency(IRange node, IDictionary <ISourceTemplate, object> dataList, out object data) { data = null; bool Success = true; if (!ConstantRange.TryParseRange(node, out IConstantRange Result, out IError Error)) { AddSourceError(Error); Success = false; }