1 // Licensed to the .NET Foundation under one or more agreements. 2 // The .NET Foundation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 namespace System.Linq.Expressions 6 { 7 internal static class Utils 8 { 9 public static readonly object BoxedFalse = false; 10 public static readonly object BoxedTrue = true; 11 12 public static readonly object BoxedIntM1 = -1; 13 public static readonly object BoxedInt0 = 0; 14 public static readonly object BoxedInt1 = 1; 15 public static readonly object BoxedInt2 = 2; 16 public static readonly object BoxedInt3 = 3; 17 18 public static readonly object BoxedDefaultSByte = default(sbyte); 19 public static readonly object BoxedDefaultChar = default(char); 20 public static readonly object BoxedDefaultInt16 = default(short); 21 public static readonly object BoxedDefaultInt64 = default(long); 22 public static readonly object BoxedDefaultByte = default(byte); 23 public static readonly object BoxedDefaultUInt16 = default(ushort); 24 public static readonly object BoxedDefaultUInt32 = default(uint); 25 public static readonly object BoxedDefaultUInt64 = default(ulong); 26 public static readonly object BoxedDefaultSingle = default(float); 27 public static readonly object BoxedDefaultDouble = default(double); 28 public static readonly object BoxedDefaultDecimal = default(decimal); 29 public static readonly object BoxedDefaultDateTime = default(DateTime); 30 31 private static readonly ConstantExpression s_true = Expression.Constant(BoxedTrue); 32 private static readonly ConstantExpression s_false = Expression.Constant(BoxedFalse); 33 34 private static readonly ConstantExpression s_m1 = Expression.Constant(BoxedIntM1); 35 private static readonly ConstantExpression s_0 = Expression.Constant(BoxedInt0); 36 private static readonly ConstantExpression s_1 = Expression.Constant(BoxedInt1); 37 private static readonly ConstantExpression s_2 = Expression.Constant(BoxedInt2); 38 private static readonly ConstantExpression s_3 = Expression.Constant(BoxedInt3); 39 40 public static readonly DefaultExpression Empty = Expression.Empty(); 41 public static readonly ConstantExpression Null = Expression.Constant(null); 42 43 public static ConstantExpression Constant(bool value) => value ? s_true : s_false; 44 Constant(int value)45 public static ConstantExpression Constant(int value) 46 { 47 switch (value) 48 { 49 case -1: return s_m1; 50 case 0: return s_0; 51 case 1: return s_1; 52 case 2: return s_2; 53 case 3: return s_3; 54 default: return Expression.Constant(value); 55 } 56 } 57 } 58 } 59