X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fobjects.cs;h=ef796986cd5419e570167885a1b9220f2b6eace6;hb=HEAD;hp=e3ce97974cc38505135deb1009c489f450bcc3fb;hpb=7c8c564937c73efa1bcaeda398511602adf1bb3a;p=mono.git diff --git a/mono/mini/objects.cs b/mono/mini/objects.cs index e3ce97974cc..ef796986cd5 100644 --- a/mono/mini/objects.cs +++ b/mono/mini/objects.cs @@ -639,6 +639,7 @@ class Tests { public static int test_0_vector_array_cast () { Array arr1 = Array.CreateInstance (typeof (int), new int[] {1}, new int[] {0}); Array arr2 = Array.CreateInstance (typeof (int), new int[] {1}, new int[] {10}); + Array arr5 = Array.CreateInstance (typeof (string), new int[] {1}, new int[] {10}); if (arr1.GetType () != typeof (int[])) return 1; @@ -659,6 +660,9 @@ class Tests { if (arr2 is int[]) return 4; + var as_object_arr = arr5 as object []; + if (as_object_arr != null) + return 5; int [,] [] arr3 = new int [1, 1] []; object o = arr3; @@ -874,6 +878,49 @@ class Tests { return 2; } + class InstanceDelegateTest { + public int a; + + public int return_field () { + return a; + } + } + + public static int test_2_instance_delegate_with_field () { + InstanceDelegateTest t = new InstanceDelegateTest () { a = 1337 }; + GetIntDel del = new GetIntDel (t.return_field); + int v = del (); + if (v != 1337) + return 0; + return 2; + } + + interface IFaceVirtualDel { + int return_field (); + } + + struct VtypeVirtualDelStruct : IFaceVirtualDel { + public int f; + public int return_field_nonvirt () { + return f; + } + public int return_field () { + return f; + } + } + + public static int test_42_vtype_delegate () { + var s = new VtypeVirtualDelStruct () { f = 42 }; + Func f = s.return_field_nonvirt; + return f (); + } + + public static int test_42_vtype_virtual_delegate () { + IFaceVirtualDel s = new VtypeVirtualDelStruct () { f = 42 }; + Func f = s.return_field; + return f (); + } + public static int test_1_store_decimal () { decimal[,] a = {{1}}; @@ -988,6 +1035,19 @@ class Tests { return 0; } + static Nullable s_nullb; + static AStruct s_struct1; + + /* test if VES uses correct sizes for value type write to static field */ + public static int test_0_static_nullable_bool () { + s_struct1 = new AStruct (0x1337dead); + s_nullb = true; + /* make sure that the write to s_nullb didn't smash the value after it */ + if (s_struct1.i != 0x1337dead) + return 2; + return 0; + } + public static int test_71_long_shift_right () { ulong value = 38654838087; int x = 0; @@ -1739,6 +1799,35 @@ ncells ) { public static int test_142_byte_enum_arg_zero_extend () { return enum_arg_zero_extend (ByteEnum2.High); } + + enum Mine { One, Two } + + public static int test_0_enum_gethashcode_opt () { + int sum = 0; + for (int i = 0; i < 1000000; ++i) + sum += Mine.Two.GetHashCode(); + + return 0; + } + + public static int test_0_typedref () { + int i = 5; + System.TypedReference r = __makeref(i); + System.Type t = __reftype(r); + + if (t != typeof (int)) + return 1; + int j = __refvalue(r, int); + if (j != 5) + return 2; + + try { + object o = __refvalue (r, object); + } catch (InvalidCastException) { + } + + return 0; + } } #if __MOBILE__