public bool Create() { int arrayIndex; Value array; object value; while (true) { var instr = method.Body.Instructions[index]; switch (instr.OpCode.Code) { case Code.Ret: return(true); case Code.Newarr: var arrayType = (ITypeDefOrRef)instr.Operand; int arrayCount = ((Int32Value)emulator.Pop()).Value; if (arrayType.FullName == "System.Char") { emulator.Push(new UserValue(new char[arrayCount])); } else { emulator.Push(new UnknownValue()); } break; case Code.Call: case Code.Callvirt: if (!DoCall(instr)) { return(false); } break; case Code.Ldelem_U1: arrayIndex = ((Int32Value)emulator.Pop()).Value; array = (Value)emulator.Pop(); if (array is UserValue) { emulator.Push(new Int32Value(((byte[])((UserValue)array).obj)[arrayIndex])); } else { emulator.Push(Int32Value.CreateUnknownUInt8()); } break; case Code.Stelem_I1: value = emulator.Pop(); arrayIndex = ((Int32Value)emulator.Pop()).Value; array = (Value)emulator.Pop(); if (array is UserValue) { ((byte[])((UserValue)array).obj)[arrayIndex] = (byte)((Int32Value)value).Value; } break; case Code.Stelem_I2: value = emulator.Pop(); arrayIndex = ((Int32Value)emulator.Pop()).Value; array = (Value)emulator.Pop(); if (array is UserValue) { ((char[])((UserValue)array).obj)[arrayIndex] = (char)((Int32Value)value).Value; } break; case Code.Ldelem_Ref: arrayIndex = ((Int32Value)emulator.Pop()).Value; array = (Value)emulator.Pop(); var userValue = array as UserValue; if (userValue != null && userValue.obj is string[]) { emulator.Push(new StringValue(((string[])userValue.obj)[arrayIndex])); } else { emulator.Push(new UnknownValue()); } break; case Code.Ldsfld: emulator.Push(new UserValue((IField)instr.Operand)); break; default: emulator.Emulate(instr); break; } index++; } }
public static Int32Value Conv_Ovf_U1_Un(Real8Value a) { return(Int32Value.CreateUnknownUInt8()); }
public static Int32Value Conv_Ovf_U1_Un(Real8Value a) => Int32Value.CreateUnknownUInt8();