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