.assembly 'usingstmt' { } .assembly extern 'mscorlib' { .ver 1:0:5000:0 .publickeytoken = ( b7 7a 5c 56 19 34 e0 89 ) } .class sealed 'P' extends [mscorlib]System.ValueType implements [mscorlib]System.IDisposable { .field public int32 'x' .field public int32 'y' .method hidebysig public virtual final instance void 'Dispose'() { .override [mscorlib]System.IDisposable::'Dispose' ret .maxstack 0 } // end of method P.Dispose .method hidebysig specialname rtspecialname public void .ctor(int32 'x') { ldarg.0 ldarg 1 // x stfld int32 'P'::'x' ldarg.0 ldc.i4 1 stfld int32 'P'::'y' ret .maxstack 2 } // end of constructor P.P } // end of struct P .class 'T' extends [mscorlib]System.Object { .method hidebysig static public void 'Main'() { .entrypoint .locals init ([0]value class 'P' 't0') ldloca 0 // a ldc.i4 0 stfld int32 'P'::'x' ldloca 0 // a ldc.i4 1 stfld int32 'P'::'y' br $2 $1: .locals init ([1]value class 'P' 'x') .locals init ([2]value class 'P' 't2') ldloca 2 // t2 initobj value class 'P' ldloc 2 // t2 stloc 1 // x .locals init ([3]value class 'P' 'y') ldloc 1 // x stloc 3 // y .try { ldloca 1 // x ldfld int32 'P'::'x' ldloca 3 // y ldfld int32 'P'::'x' bne.un $6 leave $3 $6: $7: leave $8 leave $5 } finally { ldloca 3 // y callvirt instance void 'P'::'Dispose'() ldloca 1 // x callvirt instance void 'P'::'Dispose'() endfinally } // end .try $5: $4: $2: ldc.i4 1 brtrue $1 $3: $8: .locals init ([4]value class 'P' 't4') ldloc 0 // a stloc 4 // t4 .try { leave $10 } finally { ldloca 4 // t4 callvirt instance void 'P'::'Dispose'() endfinally } // end .try $10: $9: ret .maxstack 2 } // end of method T.Main .method hidebysig specialname rtspecialname public void .ctor() { ldarg.0 call instance void [mscorlib]System.Object::.ctor() ret .maxstack 1 } // end of constructor T.T } // end of class T