@@ -835,7 +835,9 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
835
835
case ILOpcode . conv_u2 :
836
836
case ILOpcode . conv_u4 :
837
837
case ILOpcode . conv_u8 :
838
- {
838
+ case ILOpcode . conv_r4 :
839
+ case ILOpcode . conv_r8 :
840
+ {
839
841
StackEntry popped = stack . Pop ( ) ;
840
842
if ( popped . ValueKind . WithNormalizedNativeInt ( context ) == StackValueKind . Int32 )
841
843
{
@@ -874,6 +876,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
874
876
case ILOpcode . conv_u8 :
875
877
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( uint ) val ) ) ;
876
878
break ;
879
+ case ILOpcode . conv_r4 :
880
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
881
+ break ;
882
+ case ILOpcode . conv_r8 :
883
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( ( double ) val ) ) ;
884
+ break ;
877
885
default :
878
886
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
879
887
}
@@ -912,6 +920,12 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
912
920
case ILOpcode . conv_u8 :
913
921
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( val ) ) ;
914
922
break ;
923
+ case ILOpcode . conv_r4 :
924
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
925
+ break ;
926
+ case ILOpcode . conv_r8 :
927
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( ( double ) val ) ) ;
928
+ break ;
915
929
default :
916
930
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
917
931
}
@@ -921,9 +935,36 @@ private Status TryScanMethod(MethodIL methodIL, Value[] parameters, Stack<Method
921
935
double val = popped . Value . AsDouble ( ) ;
922
936
switch ( opcode )
923
937
{
938
+ case ILOpcode . conv_i1 :
939
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( sbyte ) val ) ) ;
940
+ break ;
941
+ case ILOpcode . conv_i2 :
942
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( short ) val ) ) ;
943
+ break ;
944
+ case ILOpcode . conv_i4 :
945
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( int ) val ) ) ;
946
+ break ;
924
947
case ILOpcode . conv_i8 :
925
948
stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( long ) val ) ) ;
926
949
break ;
950
+ case ILOpcode . conv_u1 :
951
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( byte ) val ) ) ;
952
+ break ;
953
+ case ILOpcode . conv_u2 :
954
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( ushort ) val ) ) ;
955
+ break ;
956
+ case ILOpcode . conv_u4 :
957
+ stack . Push ( StackValueKind . Int32 , ValueTypeValue . FromInt32 ( ( int ) val ) ) ;
958
+ break ;
959
+ case ILOpcode . conv_u8 :
960
+ stack . Push ( StackValueKind . Int64 , ValueTypeValue . FromInt64 ( ( long ) val ) ) ;
961
+ break ;
962
+ case ILOpcode . conv_r4 :
963
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromSingle ( ( float ) val ) ) ;
964
+ break ;
965
+ case ILOpcode . conv_r8 :
966
+ stack . Push ( StackValueKind . Float , ValueTypeValue . FromDouble ( val ) ) ;
967
+ break ;
927
968
default :
928
969
return Status . Fail ( methodIL . OwningMethod , opcode ) ;
929
970
}
0 commit comments