Exemple #1
0
 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);
 }
Exemple #2
0
 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;
 }
 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;
 }
		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;
		}