blob: 64b015d90423737417ca23f5d7f894db76573b61 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
|
.assembly extern System.Console
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )
.ver 4:0:0:0
}
.assembly extern legacy library mscorlib {}
.assembly ldobj.exe{
}
.class public _ldobj {
.method public static int32 main() {
.entrypoint
.locals (class [mscorlib]System.IO.TextWriter,value class valClass,value class valClass)
.maxstack 2
call class [mscorlib]System.IO.TextWriter [System.Console]System.Console::get_Out()
stloc 0
newobj instance void valClass::.ctor()
stloc 1
newobj instance void valClass::.ctor()
stloc 2
ldloca 1
ldc.i4 0xFAFAFAFA
stfld int32 valClass::Field
ldc.i4 0xDBDBDBDB
stsfld int32 valClass::SField
ldloca 2
ldc.i4 0x00000000
stfld int32 valClass::Field
ldloca 1
ldfld int32 valClass::Field
ldc.i4 0xFAFAFAFA
ceq
brfalse failInit
ldsfld int32 valClass::SField
ldc.i4 0xDBDBDBDB
ceq
brfalse failInit
ldloca 2
ldfld int32 valClass::Field
ldc.i4 0x00000000
ceq
brtrue ldlocaTest
failInit:
ldloc 0
ldstr "one _or both val classes failed initialization."
callvirt instance void [mscorlib]System.IO.TextWriter::WriteLine(class [mscorlib]System.String)
br fail
ldlocaTest:
ldloca 1
ldobj valClass
ldloca 2
call void _ldobj::changeData(value class valClass,value class valClass*)
ldloca 1
ldfld int32 valClass::Field
ldc.i4 0xFAFAFAFA
ceq
brfalse failTest
ldloca 2
ldfld int32 valClass::Field
ldc.i4 0xBBBBBBBB
ceq
brfalse failTest
ldsfld int32 valClass::SField
ldc.i4 0xDDDDDDDD
ceq
brtrue pass
failTest:
ldloc 0
ldstr "failure after initialization."
callvirt instance void [mscorlib]System.IO.TextWriter::WriteLine(class [mscorlib]System.String)
br fail
pass:
ldloc 0
ldstr "_ldobj tests PASS"
callvirt instance void [mscorlib]System.IO.TextWriter::WriteLine(class [mscorlib]System.String)
ldc.i4 100
br end
fail:
ldloc 0
ldstr "!!! FAILURE !!! LDOBJ TEST(S) FAILED !!! FAILURE !!!"
callvirt instance void [mscorlib]System.IO.TextWriter::WriteLine(class [mscorlib]System.String)
ldc.i4 0x0
br end
end:
ret
}
.method public static void changeData(value class valClass,value class valClass*) {
.maxstack 2
ldarga 0
ldc.i4 0xBBBBBBBB
stfld int32 valClass::Field
ldc.i4 0xDDDDDDDD
stsfld int32 valClass::SField
ldarg 1
ldarga 0
cpobj valClass
ret
}
}
.class public value sealed valClass {
.field public int32 Field
.field public static int32 SField
.method public public void .ctor(){
ret
}
}
|