bool fixLoadInstruction(Block block, int index, Value value) { if (value.isInt32()) { var intValue = (Int32Value)value; if (!intValue.allBitsValid()) { return(false); } block.Instructions[index] = new Instr(Instruction.CreateLdcI4(intValue.value)); return(true); } else if (value.isInt64()) { var intValue = (Int64Value)value; if (!intValue.allBitsValid()) { return(false); } block.Instructions[index] = new Instr(OpCodes.Ldc_I8.ToInstruction(intValue.value)); return(true); } return(false); }
bool fixLoadInstruction(Block block, int index, Value value) { if (value.isInt32()) { var intValue = (Int32Value)value; if (!intValue.allBitsValid()) return false; block.Instructions[index] = new Instr(DotNetUtils.createLdci4(intValue.value)); return true; } else if (value.isInt64()) { var intValue = (Int64Value)value; if (!intValue.allBitsValid()) return false; block.Instructions[index] = new Instr(Instruction.Create(OpCodes.Ldc_I8, intValue.value)); return true; } return false; }
static Value truncateValue(Value value, TypeReference typeReference) { if (typeReference == null) { return(value); } switch (typeReference.EType) { case ElementType.Boolean: if (value.isInt32()) { return(((Int32Value)value).toBoolean()); } return(Int32Value.createUnknownBool()); case ElementType.I1: if (value.isInt32()) { return(((Int32Value)value).toInt8()); } return(Int32Value.createUnknown()); case ElementType.U1: if (value.isInt32()) { return(((Int32Value)value).toUInt8()); } return(Int32Value.createUnknownUInt8()); case ElementType.I2: if (value.isInt32()) { return(((Int32Value)value).toInt16()); } return(Int32Value.createUnknown()); case ElementType.U2: if (value.isInt32()) { return(((Int32Value)value).toUInt16()); } return(Int32Value.createUnknownUInt16()); case ElementType.I4: case ElementType.U4: if (value.isInt32()) { return(value); } return(Int32Value.createUnknown()); case ElementType.I8: case ElementType.U8: if (value.isInt64()) { return(value); } return(Int64Value.createUnknown()); } return(value); }
Value truncateValue(Value value, TypeReference typeReference) { if (typeReference == null) { return(value); } if (protectedStackValues.ContainsKey(value)) { return(value); } switch (typeReference.EType) { case ElementType.Boolean: if (value.isInt32()) { return(((Int32Value)value).toBoolean()); } return(Int32Value.createUnknownBool()); case ElementType.I1: if (value.isInt32()) { return(((Int32Value)value).toInt8()); } return(Int32Value.createUnknown()); case ElementType.U1: if (value.isInt32()) { return(((Int32Value)value).toUInt8()); } return(Int32Value.createUnknownUInt8()); case ElementType.I2: if (value.isInt32()) { return(((Int32Value)value).toInt16()); } return(Int32Value.createUnknown()); case ElementType.U2: if (value.isInt32()) { return(((Int32Value)value).toUInt16()); } return(Int32Value.createUnknownUInt16()); case ElementType.I4: case ElementType.U4: if (value.isInt32()) { return(value); } return(Int32Value.createUnknown()); case ElementType.I8: case ElementType.U8: if (value.isInt64()) { return(value); } return(Int64Value.createUnknown()); case ElementType.R4: if (value.isReal8()) { return(new Real8Value((float)((Real8Value)value).value)); } return(new UnknownValue()); case ElementType.R8: if (value.isReal8()) { return(value); } return(new UnknownValue()); } return(value); }
static Value truncateValue(Value value, TypeReference typeReference) { if (typeReference == null) return value; switch (typeReference.EType) { case ElementType.Boolean: if (value.isInt32()) return ((Int32Value)value).toBoolean(); return Int32Value.createUnknownBool(); case ElementType.I1: if (value.isInt32()) return ((Int32Value)value).toInt8(); return Int32Value.createUnknown(); case ElementType.U1: if (value.isInt32()) return ((Int32Value)value).toUInt8(); return Int32Value.createUnknownUInt8(); case ElementType.I2: if (value.isInt32()) return ((Int32Value)value).toInt16(); return Int32Value.createUnknown(); case ElementType.U2: if (value.isInt32()) return ((Int32Value)value).toUInt16(); return Int32Value.createUnknownUInt16(); case ElementType.I4: case ElementType.U4: if (value.isInt32()) return value; return Int32Value.createUnknown(); case ElementType.I8: case ElementType.U8: if (value.isInt64()) return value; return Int64Value.createUnknown(); } return value; }
static Value truncateValue(Value value, TypeReference typeReference) { if (typeReference == null) return value; if (DotNetUtils.isAssembly(typeReference.Scope, "mscorlib")) { switch (typeReference.FullName) { case "System.Boolean": if (value.isInt32()) return ((Int32Value)value).toBoolean(); return Int32Value.createUnknownBool(); case "System.SByte": if (value.isInt32()) return ((Int32Value)value).toInt8(); return Int32Value.createUnknown(); case "System.Byte": if (value.isInt32()) return ((Int32Value)value).toUInt8(); return Int32Value.createUnknownUInt8(); case "System.Int16": if (value.isInt32()) return ((Int32Value)value).toInt16(); return Int32Value.createUnknown(); case "System.UInt16": if (value.isInt32()) return ((Int32Value)value).toUInt16(); return Int32Value.createUnknownUInt16(); case "System.Int32": case "System.UInt32": if (value.isInt32()) return value; return Int32Value.createUnknown(); case "System.Int64": case "System.UInt64": if (value.isInt64()) return value; return Int64Value.createUnknown(); } } return value; }
Value truncateValue(Value value, TypeSig type) { if (type == null) return value; if (protectedStackValues.ContainsKey(value)) return value; switch (type.ElementType) { case ElementType.Boolean: if (value.isInt32()) return ((Int32Value)value).toBoolean(); return Int32Value.createUnknownBool(); case ElementType.I1: if (value.isInt32()) return ((Int32Value)value).toInt8(); return Int32Value.createUnknown(); case ElementType.U1: if (value.isInt32()) return ((Int32Value)value).toUInt8(); return Int32Value.createUnknownUInt8(); case ElementType.I2: if (value.isInt32()) return ((Int32Value)value).toInt16(); return Int32Value.createUnknown(); case ElementType.U2: if (value.isInt32()) return ((Int32Value)value).toUInt16(); return Int32Value.createUnknownUInt16(); case ElementType.I4: case ElementType.U4: if (value.isInt32()) return value; return Int32Value.createUnknown(); case ElementType.I8: case ElementType.U8: if (value.isInt64()) return value; return Int64Value.createUnknown(); case ElementType.R4: if (value.isReal8()) return new Real8Value((float)((Real8Value)value).value); return new UnknownValue(); case ElementType.R8: if (value.isReal8()) return value; return new UnknownValue(); } return value; }