static Block GetSwitchTarget(IList <Block> targets, Block fallThrough, Value value) { if (!value.IsInt32()) { return(null); } return(CflowUtils.GetSwitchTarget(targets, fallThrough, (Int32Value)value)); }
static bool VerifyValidArg(Value value) { if (value.IsInt32()) { return(((Int32Value)value).AllBitsValid()); } if (value.IsInt64()) { return(((Int64Value)value).AllBitsValid()); } if (value.IsReal8()) { return(((Real8Value)value).IsValid); } 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(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(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; }
static bool VerifyValidArg(Value value) { if (value.IsInt32()) return ((Int32Value)value).AllBitsValid(); if (value.IsInt64()) return ((Int64Value)value).AllBitsValid(); if (value.IsReal8()) return ((Real8Value)value).IsValid; return false; }
static Block GetSwitchTarget(IList<Block> targets, Block fallThrough, Value value) { if (!value.IsInt32()) return null; return CflowUtils.GetSwitchTarget(targets, fallThrough, (Int32Value)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 ((Real8Value)value).ToSingle(); return new UnknownValue(); case ElementType.R8: if (value.IsReal8()) return value; return new UnknownValue(); } return value; }