private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable <EdmError> discoveredErrors) { if (!type.IsIntegral()) { discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) }; return(false); } switch (type.PrimitiveKind()) { case EdmPrimitiveTypeKind.Int64: return(TryAssertIntegerConstantInRange(expression, Int64.MinValue, Int64.MaxValue, out discoveredErrors)); case EdmPrimitiveTypeKind.Int32: return(TryAssertIntegerConstantInRange(expression, Int32.MinValue, Int32.MaxValue, out discoveredErrors)); case EdmPrimitiveTypeKind.Int16: return(TryAssertIntegerConstantInRange(expression, Int16.MinValue, Int16.MaxValue, out discoveredErrors)); case EdmPrimitiveTypeKind.Byte: return(TryAssertIntegerConstantInRange(expression, Byte.MinValue, Byte.MaxValue, out discoveredErrors)); case EdmPrimitiveTypeKind.SByte: return(TryAssertIntegerConstantInRange(expression, SByte.MinValue, SByte.MaxValue, out discoveredErrors)); default: discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) }; return(false); } }
private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable <EdmError> discoveredErrors) { if (type.IsIntegral()) { EdmPrimitiveTypeKind edmPrimitiveTypeKind = type.PrimitiveKind(); if (edmPrimitiveTypeKind == EdmPrimitiveTypeKind.Byte) { return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)0, (long)0xff, out discoveredErrors)); } else { switch (edmPrimitiveTypeKind) { case EdmPrimitiveTypeKind.Int16: { return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-32768, (long)0x7fff, out discoveredErrors)); } case EdmPrimitiveTypeKind.Int32: { return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-2147483648, (long)0x7fffffff, out discoveredErrors)); } case EdmPrimitiveTypeKind.Int64: { return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, -9223372036854775808L, 0x7fffffffffffffffL, out discoveredErrors)); } case EdmPrimitiveTypeKind.SByte: { return(ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-128, (long)127, out discoveredErrors)); } } EdmError[] edmError = new EdmError[1]; edmError[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType); discoveredErrors = edmError; return(false); } } else { EdmError[] edmErrorArray = new EdmError[1]; edmErrorArray[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType); discoveredErrors = edmErrorArray; return(false); } }
private static bool TryAssertIntegerConstantInRange(IEdmIntegerConstantExpression expression, long min, long max, out IEnumerable <EdmError> discoveredErrors) { if (expression.Value < min || expression.Value > max) { discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.IntegerConstantValueOutOfRange, Edm.Strings.EdmModel_Validator_Semantic_IntegerConstantValueOutOfRange) }; return(false); } discoveredErrors = Enumerable.Empty <EdmError>(); return(true); }
private static bool TryCastIntegerConstantInRange(IEdmIntegerConstantExpression expression, long min, long max, out IEnumerable<EdmError> discoveredErrors) { if (expression.Value < min || expression.Value > max) { discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.IntegerConstantValueOutOfRange, Edm.Strings.EdmModel_Validator_Semantic_IntegerConstantValueOutOfRange) }; return false; } discoveredErrors = Enumerable.Empty<EdmError>(); return true; }
private static bool TryCastIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable<EdmError> discoveredErrors) { if (!type.IsIntegral()) { discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) }; return false; } switch (type.PrimitiveKind()) { case EdmPrimitiveTypeKind.Int64: return TryCastIntegerConstantInRange(expression, Int64.MinValue, Int64.MaxValue, out discoveredErrors); case EdmPrimitiveTypeKind.Int32: return TryCastIntegerConstantInRange(expression, Int32.MinValue, Int32.MaxValue, out discoveredErrors); case EdmPrimitiveTypeKind.Int16: return TryCastIntegerConstantInRange(expression, Int16.MinValue, Int16.MaxValue, out discoveredErrors); case EdmPrimitiveTypeKind.Byte: return TryCastIntegerConstantInRange(expression, Byte.MinValue, Byte.MaxValue, out discoveredErrors); case EdmPrimitiveTypeKind.SByte: return TryCastIntegerConstantInRange(expression, SByte.MinValue, SByte.MaxValue, out discoveredErrors); default: discoveredErrors = new EdmError[] { new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Edm.Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType) }; return false; } }
private static bool TryAssertIntegerConstantAsType(IEdmIntegerConstantExpression expression, IEdmTypeReference type, out IEnumerable<EdmError> discoveredErrors) { if (type.IsIntegral()) { EdmPrimitiveTypeKind edmPrimitiveTypeKind = type.PrimitiveKind(); if (edmPrimitiveTypeKind == EdmPrimitiveTypeKind.Byte) { return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)0, (long)0xff, out discoveredErrors); } else { switch (edmPrimitiveTypeKind) { case EdmPrimitiveTypeKind.Int16: { return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-32768, (long)0x7fff, out discoveredErrors); } case EdmPrimitiveTypeKind.Int32: { return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-2147483648, (long)0x7fffffff, out discoveredErrors); } case EdmPrimitiveTypeKind.Int64: { return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, -9223372036854775808L, 0x7fffffffffffffffL, out discoveredErrors); } case EdmPrimitiveTypeKind.SByte: { return ExpressionTypeChecker.TryAssertIntegerConstantInRange(expression, (long)-128, (long)127, out discoveredErrors); } } EdmError[] edmError = new EdmError[1]; edmError[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType); discoveredErrors = edmError; return false; } } else { EdmError[] edmErrorArray = new EdmError[1]; edmErrorArray[0] = new EdmError(expression.Location(), EdmErrorCode.ExpressionPrimitiveKindNotValidForAssertedType, Strings.EdmModel_Validator_Semantic_ExpressionPrimitiveKindNotValidForAssertedType); discoveredErrors = edmErrorArray; return false; } }