|
2 | 2 | using System.Collections.Concurrent;
|
3 | 3 | using System.Collections.Generic;
|
4 | 4 | using System.Diagnostics;
|
| 5 | +using System.Linq.Dynamic.Core.Util; |
5 | 6 | using System.Linq.Dynamic.Core.Validation;
|
6 | 7 | using System.Reflection;
|
7 | 8 | using System.Reflection.Emit;
|
@@ -223,33 +224,37 @@ public static Type CreateType([NotNull] IList<DynamicProperty> properties, bool
|
223 | 224 |
|
224 | 225 | for (int i = 0; i < names.Length; i++)
|
225 | 226 | {
|
226 |
| - Type equalityComparerT = EqualityComparer.MakeGenericType(generics[i].AsType()); |
227 |
| - |
228 |
| - // Equals() |
229 |
| - MethodInfo equalityComparerTDefault = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerDefault); |
230 |
| - MethodInfo equalityComparerTEquals = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerEquals); |
231 |
| - |
232 |
| - // Illegal one-byte branch at position: 9. Requested branch was: 143. |
233 |
| - // So replace OpCodes.Brfalse_S to OpCodes.Brfalse |
234 |
| - ilgeneratorEquals.Emit(OpCodes.Brfalse, equalsLabel); |
235 |
| - ilgeneratorEquals.Emit(OpCodes.Call, equalityComparerTDefault); |
236 |
| - ilgeneratorEquals.Emit(OpCodes.Ldarg_0); |
237 |
| - ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]); |
238 |
| - ilgeneratorEquals.Emit(OpCodes.Ldloc_0); |
239 |
| - ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]); |
240 |
| - ilgeneratorEquals.Emit(OpCodes.Callvirt, equalityComparerTEquals); |
241 |
| - |
242 |
| - // GetHashCode(); |
243 |
| - MethodInfo equalityComparerTGetHashCode = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerGetHashCode); |
244 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0); |
245 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, -1521134295); |
246 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0); |
247 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Mul); |
248 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Call, equalityComparerTDefault); |
249 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Ldarg_0); |
250 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Ldfld, fields[i]); |
251 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Callvirt, equalityComparerTGetHashCode); |
252 |
| - ilgeneratorGetHashCode.Emit(OpCodes.Add); |
| 227 | + // https://github.com/zzzprojects/System.Linq.Dynamic.Core/issues/516 |
| 228 | + if (!RuntimeInformationUtils.IsBlazorWASM) |
| 229 | + { |
| 230 | + Type equalityComparerT = EqualityComparer.MakeGenericType(generics[i].AsType()); |
| 231 | + |
| 232 | + // Equals() |
| 233 | + MethodInfo equalityComparerTDefault = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerDefault); |
| 234 | + MethodInfo equalityComparerTEquals = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerEquals); |
| 235 | + |
| 236 | + // Illegal one-byte branch at position: 9. Requested branch was: 143. |
| 237 | + // So replace OpCodes.Brfalse_S to OpCodes.Brfalse |
| 238 | + ilgeneratorEquals.Emit(OpCodes.Brfalse, equalsLabel); |
| 239 | + ilgeneratorEquals.Emit(OpCodes.Call, equalityComparerTDefault); |
| 240 | + ilgeneratorEquals.Emit(OpCodes.Ldarg_0); |
| 241 | + ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]); |
| 242 | + ilgeneratorEquals.Emit(OpCodes.Ldloc_0); |
| 243 | + ilgeneratorEquals.Emit(OpCodes.Ldfld, fields[i]); |
| 244 | + ilgeneratorEquals.Emit(OpCodes.Callvirt, equalityComparerTEquals); |
| 245 | + |
| 246 | + // GetHashCode(); |
| 247 | + MethodInfo equalityComparerTGetHashCode = TypeBuilder.GetMethod(equalityComparerT, EqualityComparerGetHashCode); |
| 248 | + ilgeneratorGetHashCode.Emit(OpCodes.Stloc_0); |
| 249 | + ilgeneratorGetHashCode.Emit(OpCodes.Ldc_I4, -1521134295); |
| 250 | + ilgeneratorGetHashCode.Emit(OpCodes.Ldloc_0); |
| 251 | + ilgeneratorGetHashCode.Emit(OpCodes.Mul); |
| 252 | + ilgeneratorGetHashCode.Emit(OpCodes.Call, equalityComparerTDefault); |
| 253 | + ilgeneratorGetHashCode.Emit(OpCodes.Ldarg_0); |
| 254 | + ilgeneratorGetHashCode.Emit(OpCodes.Ldfld, fields[i]); |
| 255 | + ilgeneratorGetHashCode.Emit(OpCodes.Callvirt, equalityComparerTGetHashCode); |
| 256 | + ilgeneratorGetHashCode.Emit(OpCodes.Add); |
| 257 | + } |
253 | 258 |
|
254 | 259 | // ToString();
|
255 | 260 | ilgeneratorToString.Emit(OpCodes.Ldloc_0);
|
|
0 commit comments