Skip to content

Commit f525daa

Browse files
committed
optimize EmitDefault
1 parent 489b3f7 commit f525daa

File tree

1 file changed

+27
-24
lines changed

1 file changed

+27
-24
lines changed

src/FastExpressionCompiler/FastExpressionCompiler.cs

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2668,35 +2668,38 @@ private static bool TryEmitCoalesceOperator(BinaryExpression expr, IReadOnlyList
26682668

26692669
private static void EmitDefault(Type type, ILGenerator il)
26702670
{
2671-
if (!type.GetTypeInfo().IsValueType)
2671+
if (type.IsClass)
26722672
{
26732673
il.Demit(OpCodes.Ldnull);
2674+
return;
26742675
}
2675-
else if (
2676-
type == typeof(bool) ||
2677-
type == typeof(byte) ||
2678-
type == typeof(char) ||
2679-
type == typeof(sbyte) ||
2680-
type == typeof(int) ||
2681-
type == typeof(uint) ||
2682-
type == typeof(short) ||
2683-
type == typeof(ushort))
2684-
{
2685-
il.Demit(OpCodes.Ldc_I4_0);
2686-
}
2687-
else if (
2688-
type == typeof(long) ||
2689-
type == typeof(ulong))
2676+
switch (Type.GetTypeCode(type))
26902677
{
2691-
il.Demit(OpCodes.Ldc_I4_0);
2692-
il.Demit(OpCodes.Conv_I8);
2678+
case TypeCode.Boolean:
2679+
case TypeCode.Char:
2680+
case TypeCode.Byte:
2681+
case TypeCode.SByte:
2682+
case TypeCode.Int16:
2683+
case TypeCode.UInt16:
2684+
case TypeCode.Int32:
2685+
case TypeCode.UInt32:
2686+
il.Demit(OpCodes.Ldc_I4_0);
2687+
break;
2688+
case TypeCode.Int64:
2689+
case TypeCode.UInt64:
2690+
il.Demit(OpCodes.Ldc_I4_0);
2691+
il.Demit(OpCodes.Conv_I8);
2692+
break;
2693+
case TypeCode.Single:
2694+
il.Demit(OpCodes.Ldc_R4, default(float));
2695+
break;
2696+
case TypeCode.Double:
2697+
il.Demit(OpCodes.Ldc_R8, default(double));
2698+
break;
2699+
default:
2700+
EmitLoadLocalVariable(il, InitValueTypeVariable(il, type));
2701+
break;
26932702
}
2694-
else if (type == typeof(float))
2695-
il.Demit(OpCodes.Ldc_R4, default(float));
2696-
else if (type == typeof(double))
2697-
il.Demit(OpCodes.Ldc_R8, default(double));
2698-
else
2699-
EmitLoadLocalVariable(il, InitValueTypeVariable(il, type));
27002703
}
27012704

27022705
#if LIGHT_EXPRESSION

0 commit comments

Comments
 (0)