Dear Team,
I found a bug in entities code generation. this bug prevents me from compiling assembly.
package: com.unity.entities
File: SystemInfoGeneration.cs
Class: StaticTypeRegistryPostProcessor
Method: InjectLoadFromCustomArgument
Original code
case MetadataType.Boolean:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (bool) caValue ? 1 : 0)); break;
case MetadataType.Byte:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (byte) caValue)); break;
case MetadataType.Char:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (char) caValue)); break;
case MetadataType.Double:
instructions.Add(Instruction.Create(OpCodes.Ldc_R8, (double) caValue)); break;
case MetadataType.Single:
instructions.Add(Instruction.Create(OpCodes.Ldc_R4, (float) caValue)); break;
case MetadataType.UInt16:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(ushort) caValue)); break;
case MetadataType.Int16:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(short) caValue)); break;
case MetadataType.UInt32:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(uint) caValue)); break;
case MetadataType.Int32:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int) caValue)); break;
case MetadataType.UInt64:
instructions.Add(Instruction.Create(OpCodes.Ldc_I8, (long)(ulong) caValue)); break;
case MetadataType.Int64:
instructions.Add(Instruction.Create(OpCodes.Ldc_I8, (long) caValue)); break;
case MetadataType.SByte:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (sbyte) caValue)); break;
case MetadataType.String:
instructions.Add(Instruction.Create(OpCodes.Ldstr, (string) caValue)); break;
case MetadataType.Class:
but Ldc_I4 rvalue should be loaded as int (4 bytes), not byte or any other type.
So proper could should look like:
case MetadataType.Boolean:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (bool) caValue ? 1 : 0)); break;
case MetadataType.Byte:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(byte) caValue)); break;
case MetadataType.Char:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(char) caValue)); break;
case MetadataType.Double:
instructions.Add(Instruction.Create(OpCodes.Ldc_R8, (double) caValue)); break;
case MetadataType.Single:
instructions.Add(Instruction.Create(OpCodes.Ldc_R4, (float) caValue)); break;
case MetadataType.UInt16:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(ushort) caValue)); break;
case MetadataType.Int16:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(short) caValue)); break;
case MetadataType.UInt32:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int)(uint) caValue)); break;
case MetadataType.Int32:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4, (int) caValue)); break;
case MetadataType.UInt64:
instructions.Add(Instruction.Create(OpCodes.Ldc_I8, (long)(ulong) caValue)); break;
case MetadataType.Int64:
instructions.Add(Instruction.Create(OpCodes.Ldc_I8, (long) caValue)); break;
case MetadataType.SByte:
instructions.Add(Instruction.Create(OpCodes.Ldc_I4_S, (sbyte) caValue)); break;
case MetadataType.String:
instructions.Add(Instruction.Create(OpCodes.Ldstr, (string) caValue)); break;
This prevents me from utilizing some of Roslyn code generators.
Could you fix this ASAP?
Thanks!