~ubuntu-branches/ubuntu/trusty/monodevelop/trusty-proposed

« back to all changes in this revision

Viewing changes to external/ikvm/openjdk/map.xml

  • Committer: Package Import Robot
  • Author(s): Jo Shields
  • Date: 2013-05-12 09:46:03 UTC
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130512094603-mad323bzcxvmcam0
Tags: upstream-4.0.5+dfsg
ImportĀ upstreamĀ versionĀ 4.0.5+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="utf-8" ?>
 
2
<!--
 
3
  Copyright (C) 2002-2012 Jeroen Frijters
 
4
 
 
5
  This software is provided 'as-is', without any express or implied
 
6
  warranty.  In no event will the authors be held liable for any damages
 
7
  arising from the use of this software.
 
8
 
 
9
  Permission is granted to anyone to use this software for any purpose,
 
10
  including commercial applications, and to alter it and redistribute it
 
11
  freely, subject to the following restrictions:
 
12
 
 
13
  1. The origin of this software must not be misrepresented; you must not
 
14
     claim that you wrote the original software. If you use this software
 
15
     in a product, an acknowledgment in the product documentation would be
 
16
     appreciated but is not required.
 
17
  2. Altered source versions must be plainly marked as such, and must not be
 
18
     misrepresented as being the original software.
 
19
  3. This notice may not be removed or altered from any source distribution.
 
20
 
 
21
  Jeroen Frijters
 
22
  jeroen@frijters.net
 
23
  
 
24
-->
 
25
<root>
 
26
    <assembly>
 
27
        <class name="java.lang.Object" shadows="System.Object" modifiers="public">
 
28
            <attribute type="System.SerializableAttribute" sig="()V" />
 
29
            <constructor sig="()V" modifiers="public" />
 
30
            <method name="notifyAll" sig="()V" modifiers="public final">
 
31
                <body>
 
32
                    <ldarg_0 />
 
33
                    <call type="System.Threading.Monitor" name="PulseAll" sig="(Ljava.lang.Object;)V" />
 
34
                    <ret />
 
35
                </body>
 
36
            </method>
 
37
            <method name="notify" sig="()V" modifiers="public final">
 
38
                <body>
 
39
                    <ldarg_0 />
 
40
                    <call type="System.Threading.Monitor" name="Pulse" sig="(Ljava.lang.Object;)V" />
 
41
                    <ret />
 
42
                </body>
 
43
            </method>
 
44
            <method name="wait" sig="()V" modifiers="public final">
 
45
                <throws class="java.lang.InterruptedException" />
 
46
                <body>
 
47
                    <ldarg_0 />
 
48
                    <ldc_i4_0 />
 
49
                    <conv_i8 />
 
50
                    <call class="java.lang.Thread" name="objectWait" sig="(Ljava.lang.Object;J)V" />
 
51
                    <ret />
 
52
                </body>
 
53
            </method>
 
54
            <method name="wait" sig="(J)V" modifiers="public final">
 
55
                <parameter name="timeout" />
 
56
                <throws class="java.lang.InterruptedException" />
 
57
                <body>
 
58
                    <ldarg_0 />
 
59
                    <ldarg_1 />
 
60
                    <call class="java.lang.Thread" name="objectWait" sig="(Ljava.lang.Object;J)V" />
 
61
                    <ret />
 
62
                </body>
 
63
            </method>
 
64
            <method name="wait" sig="(JI)V" modifiers="public final">
 
65
                <parameter name="timeout" />
 
66
                <parameter name="nanos" />
 
67
                <throws class="java.lang.InterruptedException" />
 
68
                <body>
 
69
                    <ldarg_0 />
 
70
                    <ldarg_1 />
 
71
                    <ldarg_2 />
 
72
                    <call class="java.lang.Thread" name="objectWait" sig="(Ljava.lang.Object;JI)V" />
 
73
                    <ret />
 
74
                </body>
 
75
            </method>
 
76
            <method name="getClass" sig="()Ljava.lang.Class;" modifiers="public final">
 
77
                <attribute type="IKVM.Attributes.SignatureAttribute" sig="(Ljava.lang.String;)V">
 
78
                    <parameter>()Ljava/lang/Class&lt;+Ljava/lang/Object;&gt;;</parameter>
 
79
                </attribute>
 
80
                <body>
 
81
                    <ldarg_0 />
 
82
                    <call class="ikvm.runtime.Util" name="getClassFromObject" sig="(Ljava.lang.Object;)Ljava.lang.Class;" />
 
83
                    <ret />
 
84
                </body>
 
85
            </method>
 
86
            <method name="clone" sig="()Ljava.lang.Object;" modifiers="protected">
 
87
                <throws class="java.lang.CloneNotSupportedException" />
 
88
                <body>
 
89
                    <ldarg_0 />
 
90
                    <isinst class="java.lang.Cloneable" />
 
91
                    <brtrue name="ok" />
 
92
                    <newobj class="java.lang.CloneNotSupportedException" name="&lt;init&gt;" sig="()V" />
 
93
                    <throw />
 
94
                    <label name="ok" />
 
95
                    <ldarg_0 />
 
96
                    <call type="System.Object" name="MemberwiseClone" sig="()Ljava.lang.Object;" />
 
97
                    <ret />
 
98
                </body>
 
99
                <alternateBody>
 
100
                    <ldarg_0 />
 
101
                    <isinst type="System.Array" />
 
102
                    <dup />
 
103
                    <brfalse name="not_array" />
 
104
                    <call type="System.Array" name="Clone" sig="()Ljava.lang.Object;" />
 
105
                    <ret />
 
106
                    <label name="not_array" />
 
107
                    <pop />
 
108
                    <ldarg_0 />
 
109
                    <isinst class="java.lang.Cloneable" />
 
110
                    <brfalse name="not_cloneable" />
 
111
                    <!--
 
112
                     This means we're Cloneable, but not derived from java.lang.Object or java.lang.Throwable.
 
113
                     It also means that we must have been invoked thru reflection (or by code in the java.lang package),
 
114
                     so it is OK to use reflection to call Object.MemberwiseClone().
 
115
                     -->
 
116
                    <ldtoken type="System.Object" />
 
117
                    <call type="System.Type" name="GetTypeFromHandle" sig="(Lcli.System.RuntimeTypeHandle;)Lcli.System.Type;" />
 
118
                    <ldstr value="MemberwiseClone" />
 
119
                    <ldc_i4 value="36" />
 
120
                    <ldnull />
 
121
                    <ldsfld type="System.Type" name="EmptyTypes" sig="[Lcli.SystemType;" />
 
122
                    <ldnull />
 
123
                    <callvirt type="System.Type" name="GetMethod" sig="(Ljava.lang.String;Lcli.System.Reflection.BindingFlags;Lcli.System.Reflection.Binder;[Lcli.System.Type;[Lcli.System.Reflection.ParameterModifier;)Lcli.System.Reflection.MethodInfo;" />
 
124
                    <ldarg_0 />
 
125
                    <ldnull />
 
126
                    <callvirt type="System.Reflection.MethodInfo" name="Invoke" sig="(Ljava.lang.Object;[Ljava.lang.Object;)Ljava.lang.Object;" />
 
127
                    <ret />
 
128
                    <label name="not_cloneable" />
 
129
                    <newobj class="java.lang.CloneNotSupportedException" name="&lt;init&gt;" sig="()V" />
 
130
                    <throw />
 
131
                </alternateBody>
 
132
            </method>
 
133
            <method name="toStringImpl" sig="(Ljava.lang.Object;)Ljava.lang.String;" modifiers="private static">
 
134
                <body>
 
135
                    <ldarg_0 />
 
136
                    <callvirt class="java.lang.Object" name="getClass" sig="()Ljava.lang.Class;" />
 
137
                    <call class="java.lang.Class" name="getName" sig="()Ljava.lang.String;" />
 
138
                    <ldstr value="@" />
 
139
                    <ldarg_0 />
 
140
                    <callvirt class="java.lang.Object" name="hashCode" sig="()I" />
 
141
                    <call class="java.lang.Integer" name="toHexString" sig="(I)Ljava.lang.String;" />
 
142
                    <call type="System.String" name="Concat" sig="(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;" />
 
143
                    <ret />
 
144
                </body>
 
145
            </method>
 
146
            <method name="toString" sig="()Ljava.lang.String;" modifiers="public">
 
147
                <override name="ToString" />
 
148
                <body>
 
149
                    <ldarg_0 />
 
150
                    <call class="java.lang.Object" name="toStringImpl" sig="(Ljava.lang.Object;)Ljava.lang.String;" />
 
151
                    <ret />
 
152
                </body>
 
153
                <alternateBody>
 
154
                    <ldarg_0 />
 
155
                    <isinst type="System.Array" />
 
156
                    <brfalse name="skip" />
 
157
                    <ldarg_0 />
 
158
                    <call class="java.lang.Object" name="toStringImpl" sig="(Ljava.lang.Object;)Ljava.lang.String;" />
 
159
                    <br name="end" />
 
160
                    <label name="skip" />
 
161
                    <ldarg_0 />
 
162
                    <callvirt type="System.Object" name="ToString" sig="()Ljava.lang.String;" />
 
163
                    <label name="end" />
 
164
                    <ret />
 
165
                </alternateBody>
 
166
                <nonvirtualAlternateBody>
 
167
                    <ldarg_0 />
 
168
                    <call class="java.lang.Object" name="toStringImpl" sig="(Ljava.lang.Object;)Ljava.lang.String;" />
 
169
                    <ret />
 
170
                </nonvirtualAlternateBody>
 
171
            </method>
 
172
            <method name="hashCode" sig="()I" modifiers="public">
 
173
                <override name="GetHashCode" />
 
174
                <nonvirtualAlternateBody>
 
175
                    <ldarg_0 />
 
176
                    <call type="System.Runtime.CompilerServices.RuntimeHelpers" name="GetHashCode" sig="(Ljava.lang.Object;)I" />
 
177
                    <ret />
 
178
                </nonvirtualAlternateBody>
 
179
            </method>
 
180
            <method name="equals" sig="(Ljava.lang.Object;)Z" modifiers="public">
 
181
                <parameter name="obj" />
 
182
                <override name="Equals" />
 
183
                <body>
 
184
                    <ldarg_0 />
 
185
                    <ldarg_1 />
 
186
                    <ceq />
 
187
                    <ret />
 
188
                </body>
 
189
                <alternateBody>
 
190
                    <ldarg_0 />
 
191
                    <ldarg_1 />
 
192
                    <callvirt type="System.Object" name="Equals" sig="(Ljava.lang.Object;)Z" />
 
193
                    <ret />
 
194
                </alternateBody>
 
195
                <nonvirtualAlternateBody>
 
196
                    <ldarg_0 />
 
197
                    <ldarg_1 />
 
198
                    <ceq />
 
199
                    <ret />
 
200
                </nonvirtualAlternateBody>
 
201
            </method>
 
202
            <method name="finalize" sig="()V" modifiers="protected">
 
203
                <throws class="java.lang.Throwable" />
 
204
                <!-- NOTE we don't override Finalize, because that would be bad for performance,
 
205
                     instead, the compiler contains a hack to lazily override Finalize when a class
 
206
                     overrides our finalize
 
207
                     TODO consider adding code to constructor (in debug builds) to detect that someone
 
208
                     has overriden our finalize from another .NET language (if no intermediate Java base class
 
209
                     has overriden finalize, the lazy override of Object.Finalize hasn't kicked in and finalize
 
210
                     will never be called)
 
211
                -->
 
212
                <body>
 
213
                    <ldarg_0 />
 
214
                    <call type="System.Object" name="Finalize" sig="()V" />
 
215
                    <ret />
 
216
                </body>
 
217
                <alternateBody>
 
218
                    <!-- if code in the java.lang package explicitly invokes finalize on a non java.lang.Object
 
219
                         derived object we just ignore it -->
 
220
                    <ret />
 
221
                </alternateBody>
 
222
            </method>
 
223
        </class>
 
224
        <class name="java.lang.String" shadows="System.String" modifiers="public final">
 
225
            <implements class="java.io.Serializable" />
 
226
            <implements class="java.lang.Comparable" />
 
227
            <implements class="java.lang.CharSequence" />
 
228
            <attribute type="IKVM.Attributes.SignatureAttribute" sig="(Ljava.lang.String;)V">
 
229
                <parameter>Ljava/lang/Object;Ljava/io/Serializable;Ljava/lang/Comparable&lt;Ljava/lang/String;&gt;;Ljava/lang/CharSequence;</parameter>
 
230
            </attribute>
 
231
            <field name="serialVersionUID" sig="J" modifiers="private static final" constant="-6849794470754667710" />
 
232
            <constructor sig="()V" modifiers="public">
 
233
                <alternateBody>
 
234
                    <ldstr value="" />
 
235
                    <call type="System.String" name="Copy" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
236
                    <ret />
 
237
                </alternateBody>
 
238
            </constructor>
 
239
            <constructor sig="([C)V" modifiers="public">
 
240
                <parameter name="value" />
 
241
                <alternateBody>
 
242
                    <!-- force a NullPointerException if the array is null -->
 
243
                    <ldarg_0 />
 
244
                    <ldlen />
 
245
                    <pop />
 
246
                    <ldarg_0 />
 
247
                    <newobj type="System.String" name=".ctor" sig="([C)V" />
 
248
                    <ret />
 
249
                </alternateBody>
 
250
            </constructor>
 
251
            <constructor sig="([CII)V" modifiers="public">
 
252
                <parameter name="value" />
 
253
                <parameter name="offset" />
 
254
                <parameter name="count" />
 
255
            </constructor>
 
256
            <!-- Package private constructor (that OpenJDK uses to avoid copying the array) -->
 
257
            <constructor sig="([CZ)V" modifiers="">
 
258
                <alternateBody>
 
259
                    <ldarg_0 />
 
260
                    <newobj type="System.String" name=".ctor" sig="([C)V" />
 
261
                    <ret />
 
262
                </alternateBody>
 
263
            </constructor>
 
264
            <!-- Package private constructor, that we redirect to static helper -->
 
265
            <constructor sig="(II[C)V" modifiers="">
 
266
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="(II[C)Ljava.lang.String;" />
 
267
            </constructor>
 
268
            <constructor sig="(Ljava.lang.String;)V" modifiers="public">
 
269
                <parameter name="original" />
 
270
                <redirect class="System.String, mscorlib" name="Copy" type="static" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
271
            </constructor>
 
272
            <constructor sig="(Ljava.lang.StringBuffer;)V" modifiers="public">
 
273
                <parameter name="buffer" />
 
274
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="(Ljava.lang.StringBuffer;)Ljava.lang.String;" />
 
275
            </constructor>
 
276
            <constructor sig="(Ljava.lang.StringBuilder;)V" modifiers="public">
 
277
                <parameter name="builder" />
 
278
                <alternateBody>
 
279
                    <ldarg_0 />
 
280
                    <ldfld class="java.lang.StringBuilder" name="value" sig="[C" />
 
281
                    <ldc_i4_0 />
 
282
                    <ldarg_0 />
 
283
                    <ldfld class="java.lang.StringBuilder" name="count" sig="I" />
 
284
                    <newobj type="System.String" name=".ctor" sig="([CII)V" />
 
285
                    <ret />
 
286
                </alternateBody>
 
287
            </constructor>
 
288
            <constructor sig="([B)V" modifiers="public">
 
289
                <parameter name="bytes" />
 
290
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([B)Ljava.lang.String;" />
 
291
            </constructor>
 
292
            <constructor sig="([BI)V" modifiers="public">
 
293
                <parameter name="ascii" />
 
294
                <parameter name="hibyte" />
 
295
                <attribute type="System.ObsoleteAttribute" sig="()V" />
 
296
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BI)Ljava.lang.String;" />
 
297
            </constructor>
 
298
            <constructor sig="([BII)V" modifiers="public">
 
299
                <parameter name="bytes" />
 
300
                <parameter name="offset" />
 
301
                <parameter name="length" />
 
302
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BII)Ljava.lang.String;" />
 
303
            </constructor>
 
304
            <constructor sig="([BIII)V" modifiers="public">
 
305
                <parameter name="ascii" />
 
306
                <parameter name="hibyte" />
 
307
                <parameter name="offset" />
 
308
                <parameter name="count" />
 
309
                <attribute type="System.ObsoleteAttribute" sig="()V" />
 
310
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BIII)Ljava.lang.String;" />
 
311
            </constructor>
 
312
            <constructor sig="([BLjava.lang.String;)V" modifiers="public">
 
313
                <parameter name="bytes" />
 
314
                <parameter name="charsetName" />
 
315
                <throws class="java.io.UnsupportedEncodingException" />
 
316
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BLjava.lang.String;)Ljava.lang.String;" />
 
317
            </constructor>
 
318
            <constructor sig="([BIILjava.lang.String;)V" modifiers="public">
 
319
                <parameter name="bytes" />
 
320
                <parameter name="offset" />
 
321
                <parameter name="length" />
 
322
                <parameter name="charsetName" />
 
323
                <throws class="java.io.UnsupportedEncodingException" />
 
324
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BIILjava.lang.String;)Ljava.lang.String;" />
 
325
            </constructor>
 
326
            <constructor sig="([III)V" modifiers="public">
 
327
                <parameter name="codePoints" />
 
328
                <parameter name="offset" />
 
329
                <parameter name="count" />
 
330
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([III)Ljava.lang.String;" />
 
331
            </constructor>
 
332
            <constructor sig="([BIILjava.nio.charset.Charset;)V" modifiers="public">
 
333
                <parameter name="bytes" />
 
334
                <parameter name="offset" />
 
335
                <parameter name="length" />
 
336
                <parameter name="charset" />
 
337
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BIILjava.nio.charset.Charset;)Ljava.lang.String;" />
 
338
            </constructor>
 
339
            <constructor sig="([BLjava.nio.charset.Charset;)V" modifiers="public">
 
340
                <parameter name="bytes" />
 
341
                <parameter name="charset" />
 
342
                <redirect class="java.lang.StringHelper" name="NewString" type="static" sig="([BLjava.nio.charset.Charset;)Ljava.lang.String;" />
 
343
            </constructor>
 
344
            <method name="hashCode" sig="()I" modifiers="public">
 
345
                <redirect class="java.lang.StringHelper" name="hashCode" type="static" sig="(Lcli.System.String;)I" />
 
346
            </method>
 
347
            <!-- we have a toString here to make sure that it shows up as a declared method in reflection -->
 
348
            <method name="toString" sig="()Ljava.lang.String;" modifiers="public" />
 
349
            <!-- we have an equals here to make sure that it shows up as a declared method in reflection -->
 
350
            <method name="equals" sig="(Ljava.lang.Object;)Z" modifiers="public">
 
351
                <parameter name="anObject" />
 
352
            </method>
 
353
            <method name="valueOf" sig="(Z)Ljava.lang.String;" modifiers="public static">
 
354
                <parameter name="b" />
 
355
                <redirect class="java.lang.StringHelper" />
 
356
            </method>
 
357
            <method name="valueOf" sig="(I)Ljava.lang.String;" modifiers="public static">
 
358
                <parameter name="i" />
 
359
                <redirect class="java.lang.StringHelper" />
 
360
            </method>
 
361
            <method name="valueOf" sig="(J)Ljava.lang.String;" modifiers="public static">
 
362
                <parameter name="l" />
 
363
                <redirect class="java.lang.StringHelper" />
 
364
            </method>
 
365
            <method name="valueOf" sig="(C)Ljava.lang.String;" modifiers="public static">
 
366
                <parameter name="c" />
 
367
                <body>
 
368
                    <ldarg_0 />
 
369
                    <ldc_i4_1 />
 
370
                    <newobj type="System.String" name=".ctor" sig="(CI)V" />
 
371
                    <ret />
 
372
                </body>
 
373
            </method>
 
374
            <method name="valueOf" sig="(F)Ljava.lang.String;" modifiers="public static">
 
375
                <parameter name="f" />
 
376
                <redirect class="java.lang.StringHelper" />
 
377
            </method>
 
378
            <method name="valueOf" sig="(D)Ljava.lang.String;" modifiers="public static">
 
379
                <parameter name="d" />
 
380
                <redirect class="java.lang.StringHelper" />
 
381
            </method>
 
382
            <method name="valueOf" sig="([C)Ljava.lang.String;" modifiers="public static">
 
383
                <parameter name="data" />
 
384
                <redirect class="java.lang.StringHelper" />
 
385
            </method>
 
386
            <method name="valueOf" sig="([CII)Ljava.lang.String;" modifiers="public static">
 
387
                <parameter name="data" />
 
388
                <parameter name="offset" />
 
389
                <parameter name="count" />
 
390
                <redirect class="java.lang.StringHelper" />
 
391
            </method>
 
392
            <method name="valueOf" sig="(Ljava.lang.Object;)Ljava.lang.String;" modifiers="public static">
 
393
                <parameter name="obj" />
 
394
                <redirect class="java.lang.StringHelper" />
 
395
            </method>
 
396
            <method name="substring" sig="(I)Ljava.lang.String;" modifiers="public">
 
397
                <parameter name="beginIndex" />
 
398
                <redirect name="Substring" />
 
399
            </method>
 
400
            <method name="length" sig="()I" modifiers="public">
 
401
                <redirect name="get_Length" />
 
402
            </method>
 
403
            <method name="charAt" sig="(I)C" modifiers="public" nonullcheck="true">
 
404
                <parameter name="index" />
 
405
                <body>
 
406
                    <ldarg_1 />
 
407
                    <ldarg_0 />
 
408
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
409
                    <bge_un name="throw" />
 
410
                    <ldarg_0 />
 
411
                    <ldarg_1 />
 
412
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
413
                    <ret />
 
414
                    <label name="throw" />
 
415
                    <newobj class="java.lang.StringIndexOutOfBoundsException" name="&lt;init&gt;" sig="()V" />
 
416
                    <throw />
 
417
                </body>
 
418
            </method>
 
419
            <method name="substring" sig="(II)Ljava.lang.String;" modifiers="public">
 
420
                <parameter name="beginIndex" />
 
421
                <parameter name="endIndex" />
 
422
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;II)Ljava.lang.String;" />
 
423
            </method>
 
424
            <method name="indexOf" sig="(I)I" modifiers="public">
 
425
                <parameter name="ch" />
 
426
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;I)I" />
 
427
            </method>
 
428
            <method name="indexOf" sig="(II)I" modifiers="public" nonullcheck="true">
 
429
                <parameter name="ch" />
 
430
                <parameter name="fromIndex" />
 
431
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;II)I" />
 
432
            </method>
 
433
            <method name="indexOf" sig="(Ljava.lang.String;)I" modifiers="public">
 
434
                <parameter name="str" />
 
435
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)I" />
 
436
            </method>
 
437
            <method name="indexOf" sig="(Ljava.lang.String;I)I" modifiers="public">
 
438
                <parameter name="str" />
 
439
                <parameter name="fromIndex" />
 
440
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;I)I" />
 
441
            </method>
 
442
            <!-- These three methods are package private and used by (Abstract)StringBuilder/Buffer -->
 
443
            <method name="getChars" sig="([CI)V" modifiers="">
 
444
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;[CI)V" />
 
445
            </method>
 
446
            <method name="indexOf" sig="([CII[CIII)I" modifiers="static">
 
447
                <redirect class="java.lang.StringHelper" />
 
448
            </method>
 
449
            <method name="lastIndexOf" sig="([CII[CIII)I" modifiers="static">
 
450
                <redirect class="java.lang.StringHelper" />
 
451
            </method>
 
452
            <!-- end of package private methods used by (Abstract)StringBuilder/Buffer -->
 
453
            <method name="lastIndexOf" sig="(I)I" modifiers="public">
 
454
                <parameter name="ch" />
 
455
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;I)I" />
 
456
            </method>
 
457
            <method name="lastIndexOf" sig="(II)I" modifiers="public">
 
458
                <parameter name="ch" />
 
459
                <parameter name="fromIndex" />
 
460
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;II)I" />
 
461
            </method>
 
462
            <method name="lastIndexOf" sig="(Ljava.lang.String;)I" modifiers="public">
 
463
                <parameter name="str" />
 
464
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)I" />
 
465
            </method>
 
466
            <method name="lastIndexOf" sig="(Ljava.lang.String;I)I" modifiers="public">
 
467
                <parameter name="str" />
 
468
                <parameter name="fromIndex" />
 
469
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;I)I" />
 
470
            </method>
 
471
            <method name="toCharArray" sig="()[C" modifiers="public">
 
472
                <redirect name="ToCharArray" />
 
473
            </method>
 
474
            <method name="getChars" sig="(II[CI)V" modifiers="public">
 
475
                <parameter name="srcBegin" />
 
476
                <parameter name="srcEnd" />
 
477
                <parameter name="dst" />
 
478
                <parameter name="dstBegin" />
 
479
                <redirect class="java.lang.StringHelper" type="static" sig="(Lcli.System.String;II[CI)V" />
 
480
            </method>
 
481
            <method name="startsWith" sig="(Ljava.lang.String;)Z" modifiers="public" nonullcheck="true">
 
482
                <parameter name="prefix" />
 
483
                <body>
 
484
                    <!--
 
485
                    if (this.Length >= prefix.Length)
 
486
                    {
 
487
                        for (int i = 0; i < prefix.Length; i++)
 
488
                        {
 
489
                            if (this[i] != prefix[i])
 
490
                            {
 
491
                                    return false;
 
492
                            }
 
493
                        }
 
494
                        return true;
 
495
                    }
 
496
                    return false;
 
497
                    -->
 
498
                    <ldarg_0 />
 
499
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
500
                    <ldarg_1 />
 
501
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
502
                    <blt name="ret_false" />
 
503
                    <ldc_i4_0 />
 
504
                    <stloc name="i" type="System.Int32" />
 
505
                    <br name="start_loop" />
 
506
                    <label name="next" />
 
507
                    <ldarg_0 />
 
508
                    <ldloc name="i" />
 
509
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
510
                    <ldarg_1 />
 
511
                    <ldloc name="i" />
 
512
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
513
                    <bne_un name="ret_false" />
 
514
                    <ldloc name="i" />
 
515
                    <ldc_i4_1 />
 
516
                    <add />
 
517
                    <stloc name="i" type="System.Int32" />
 
518
                    <label name="start_loop" />
 
519
                    <ldloc name="i" />
 
520
                    <ldarg_1 />
 
521
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
522
                    <blt name="next" />
 
523
                    <ldc_i4_1 />
 
524
                    <ret />
 
525
                    <label name="ret_false" />
 
526
                    <ldc_i4_0 />
 
527
                    <ret />
 
528
                </body>
 
529
            </method>
 
530
            <method name="startsWith" sig="(Ljava.lang.String;I)Z" modifiers="public" nonullcheck="true">
 
531
                <parameter name="prefix" />
 
532
                <parameter name="toffset" />
 
533
                <body>
 
534
                    <!--
 
535
                        if (toffset >= 0
 
536
                            && toffset <= this.Length
 
537
                            && this.Length - toffset >= prefix.Length)
 
538
                        {
 
539
                            for (int i = 0; i < prefix.Length; i++)
 
540
                            {
 
541
                                if (this[i + toffset] != prefix[i])
 
542
                                {
 
543
                                        return false;
 
544
                                }
 
545
                            }
 
546
                            return true;
 
547
                        }
 
548
                        return false;
 
549
                    -->
 
550
                    <ldarg_0 />
 
551
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
552
                    <ldarg_2 />
 
553
                    <blt_un name="ret_false" />
 
554
                    <ldarg_0 />
 
555
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
556
                    <ldarg_2 />
 
557
                    <sub />
 
558
                    <ldarg_1 />
 
559
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
560
                    <blt name="ret_false" />
 
561
                    <ldc_i4_0 />
 
562
                    <stloc name="i" type="System.Int32" />
 
563
                    <br name="start_loop" />
 
564
                    <label name="next" />
 
565
                    <ldarg_0 />
 
566
                    <ldloc name="i" />
 
567
                    <ldarg_2 />
 
568
                    <add />
 
569
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
570
                    <ldarg_1 />
 
571
                    <ldloc name="i" />
 
572
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
573
                    <bne_un name="ret_false" />
 
574
                    <ldloc name="i" />
 
575
                    <ldc_i4_1 />
 
576
                    <add />
 
577
                    <stloc name="i" type="System.Int32" />
 
578
                    <label name="start_loop" />
 
579
                    <ldloc name="i" />
 
580
                    <ldarg_1 />
 
581
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
582
                    <blt name="next" />
 
583
                    <ldc_i4_1 />
 
584
                    <ret />
 
585
                    <label name="ret_false" />
 
586
                    <ldc_i4_0 />
 
587
                    <ret />
 
588
                </body>
 
589
            </method>
 
590
            <method name="endsWith" sig="(Ljava.lang.String;)Z" modifiers="public" nonullcheck="true">
 
591
                <parameter name="suffix" />
 
592
                <body>
 
593
                    <!--
 
594
                    int j = this.Length - suffix.Length;
 
595
                    if (j >= 0)
 
596
                    {
 
597
                        for (int i = 0; i < suffix.Length; i++)
 
598
                        {
 
599
                            if (this[j++] != suffix[i])
 
600
                            {
 
601
                                return false;
 
602
                            }
 
603
                        }
 
604
                        return true;
 
605
                    }
 
606
                    return false;
 
607
                    -->
 
608
                    <ldarg_0 />
 
609
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
610
                    <ldarg_1 />
 
611
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
612
                    <sub />
 
613
                    <stloc name="j" type="System.Int32" />
 
614
                    <ldloc name="j" />
 
615
                    <ldc_i4_0 />
 
616
                    <blt name="ret_false" />
 
617
                    <ldc_i4_0 />
 
618
                    <stloc name="i" type="System.Int32" />
 
619
                    <br name="start_loop" />
 
620
                    <label name="next" />
 
621
                    <ldarg_0 />
 
622
                    <ldloc name="j" />
 
623
                    <dup />
 
624
                    <ldc_i4_1 />
 
625
                    <add />
 
626
                    <stloc name="j" type="System.Int32" />
 
627
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
628
                    <ldarg_1 />
 
629
                    <ldloc name="i" />
 
630
                    <callvirt type="System.String" name="get_Chars" sig="(I)C" />
 
631
                    <bne_un name="ret_false" />
 
632
                    <ldloc name="i" />
 
633
                    <ldc_i4_1 />
 
634
                    <add />
 
635
                    <stloc name="i" type="System.Int32" />
 
636
                    <label name="start_loop" />
 
637
                    <ldloc name="i" />
 
638
                    <ldarg_1 />
 
639
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
640
                    <blt name="next" />
 
641
                    <ldc_i4_1 />
 
642
                    <ret />
 
643
                    <label name="ret_false" />
 
644
                    <ldc_i4_0 />
 
645
                    <ret />
 
646
                </body>
 
647
            </method>
 
648
            <method name="toUpperCase" sig="()Ljava.lang.String;" modifiers="public">
 
649
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
650
            </method>
 
651
            <method name="toUpperCase" sig="(Ljava.util.Locale;)Ljava.lang.String;" modifiers="public">
 
652
                <parameter name="locale" />
 
653
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.util.Locale;)Ljava.lang.String;" />
 
654
            </method>
 
655
            <method name="toLowerCase" sig="()Ljava.lang.String;" modifiers="public">
 
656
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
657
            </method>
 
658
            <method name="toLowerCase" sig="(Ljava.util.Locale;)Ljava.lang.String;" modifiers="public">
 
659
                <parameter name="locale" />
 
660
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.util.Locale;)Ljava.lang.String;" />
 
661
            </method>
 
662
            <method name="compareToIgnoreCase" sig="(Ljava.lang.String;)I" modifiers="public">
 
663
                <parameter name="str" />
 
664
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)I" />
 
665
            </method>
 
666
            <method name="equalsIgnoreCase" sig="(Ljava.lang.String;)Z" modifiers="public">
 
667
                <parameter name="anotherString" />
 
668
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)Z" />
 
669
            </method>
 
670
            <method name="intern" sig="()Ljava.lang.String;" modifiers="public">
 
671
                <redirect type="static" name="Intern" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
672
            </method>
 
673
            <method name="compareTo" sig="(Ljava.lang.String;)I" modifiers="public">
 
674
                <parameter name="anotherString" />
 
675
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)I" />
 
676
            </method>
 
677
            <method name="compareTo" sig="(Ljava.lang.Object;)I" modifiers="public ACC_BRIDGE ACC_SYNTHETIC">
 
678
                <parameter name="o" />
 
679
                <body>
 
680
                    <ldarg_0 />
 
681
                    <ldarg_1 />
 
682
                    <castclass type="System.String" />
 
683
                    <call class="java.lang.StringHelper" name="compareTo" sig="(Ljava.lang.String;Ljava.lang.String;)I" />
 
684
                    <ret />
 
685
                </body>
 
686
            </method>
 
687
            <method name="replace" sig="(CC)Ljava.lang.String;" modifiers="public">
 
688
                <parameter name="oldChar" />
 
689
                <parameter name="newChar" />
 
690
                <redirect name="Replace" />
 
691
            </method>
 
692
            <method name="getBytes" sig="()[B" modifiers="public">
 
693
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;)[B" />
 
694
            </method>
 
695
            <method name="getBytes" sig="(Ljava.lang.String;)[B" modifiers="public">
 
696
                <parameter name="charsetName" />
 
697
                <throws class="java.io.UnsupportedEncodingException" />
 
698
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)[B" />
 
699
            </method>
 
700
            <method name="subSequence" sig="(II)Ljava.lang.CharSequence;" modifiers="public">
 
701
                <parameter name="beginIndex" />
 
702
                <parameter name="endIndex" />
 
703
                <redirect class="java.lang.StringHelper" type="static" name="substring" sig="(Lcli.System.String;II)Ljava.lang.String;" />
 
704
            </method>
 
705
            <method name="trim" sig="()Ljava.lang.String;" modifiers="public">
 
706
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
707
            </method>
 
708
            <method name="regionMatches" sig="(ZILjava.lang.String;II)Z" modifiers="public">
 
709
                <parameter name="ignoreCase" />
 
710
                <parameter name="toffset" />
 
711
                <parameter name="other" />
 
712
                <parameter name="ooffset" />
 
713
                <parameter name="len" />
 
714
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;ZILjava.lang.String;II)Z" />
 
715
            </method>
 
716
            <method name="regionMatches" sig="(ILjava.lang.String;II)Z" modifiers="public">
 
717
                <parameter name="toffset" />
 
718
                <parameter name="other" />
 
719
                <parameter name="ooffset" />
 
720
                <parameter name="len" />
 
721
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;ILjava.lang.String;II)Z" />
 
722
            </method>
 
723
            <method name="getBytes" sig="(II[BI)V" modifiers="public">
 
724
                <parameter name="srcBegin" />
 
725
                <parameter name="srcEnd" />
 
726
                <parameter name="dst" />
 
727
                <parameter name="dstBegin" />
 
728
                <attribute type="System.ObsoleteAttribute" sig="()V" />
 
729
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;II[BI)V" />
 
730
            </method>
 
731
            <method name="concat" sig="(Ljava.lang.String;)Ljava.lang.String;" modifiers="public">
 
732
                <parameter name="str" />
 
733
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;" />
 
734
            </method>
 
735
            <method name="contains" sig="(Ljava.lang.CharSequence;)Z" modifiers="public">
 
736
                <parameter name="s" />
 
737
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.CharSequence;)Z" />
 
738
            </method>
 
739
            <method name="codePointAt" sig="(I)I" modifiers="public">
 
740
                <parameter name="index" />
 
741
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;I)I" />
 
742
            </method>
 
743
            <method name="codePointBefore" sig="(I)I" modifiers="public">
 
744
                <parameter name="index" />
 
745
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;I)I" />
 
746
            </method>
 
747
            <method name="codePointCount" sig="(II)I" modifiers="public">
 
748
                <parameter name="beginIndex" />
 
749
                <parameter name="endIndex" />
 
750
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;II)I" />
 
751
            </method>
 
752
            <method name="offsetByCodePoints" sig="(II)I" modifiers="public">
 
753
                <parameter name="index" />
 
754
                <parameter name="codePointOffset" />
 
755
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;II)I" />
 
756
            </method>
 
757
            <method name="contentEquals" sig="(Ljava.lang.CharSequence;)Z" modifiers="public">
 
758
                <parameter name="cs" />
 
759
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.CharSequence;)Z" />
 
760
            </method>
 
761
            <method name="contentEquals" sig="(Ljava.lang.StringBuffer;)Z" modifiers="public">
 
762
                <parameter name="sb" />
 
763
                <body>
 
764
                    <ldarg_0 />
 
765
                    <ldarg_1 />
 
766
                    <callvirt class="java.lang.StringBuffer" name="toString" sig="()Ljava.lang.String;" />
 
767
                    <callvirt type="System.String" name="Equals" sig="(Ljava.lang.String;)Z" />
 
768
                    <ret />
 
769
                </body>
 
770
            </method>
 
771
            <method name="replace" sig="(Ljava.lang.CharSequence;Ljava.lang.CharSequence;)Ljava.lang.String;" modifiers="public">
 
772
                <parameter name="target" />
 
773
                <parameter name="replacement" />
 
774
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.CharSequence;Ljava.lang.CharSequence;)Ljava.lang.String;" />
 
775
            </method>
 
776
            <method name="matches" sig="(Ljava.lang.String;)Z" modifiers="public">
 
777
                <parameter name="regex" />
 
778
                <body>
 
779
                    <ldarg_1 />
 
780
                    <ldarg_0 />
 
781
                    <call class="java.util.regex.Pattern" name="matches" sig="(Ljava.lang.String;Ljava.lang.CharSequence;)Z" />
 
782
                    <ret />
 
783
                </body>
 
784
            </method>
 
785
            <method name="replaceAll" sig="(Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;" modifiers="public">
 
786
                <parameter name="regex" />
 
787
                <parameter name="replacement" />
 
788
                <body>
 
789
                    <ldarg_1 />
 
790
                    <call class="java.util.regex.Pattern" name="compile" sig="(Ljava.lang.String;)Ljava.util.regex.Pattern;" />
 
791
                    <ldarg_0 />
 
792
                    <callvirt class="java.util.regex.Pattern" name="matcher" sig="(Ljava.lang.CharSequence;)Ljava.util.regex.Matcher;" />
 
793
                    <ldarg_2 />
 
794
                    <callvirt class="java.util.regex.Matcher" name="replaceAll" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
795
                    <ret />
 
796
                </body>
 
797
            </method>
 
798
            <method name="replaceFirst" sig="(Ljava.lang.String;Ljava.lang.String;)Ljava.lang.String;" modifiers="public">
 
799
                <parameter name="regex" />
 
800
                <parameter name="replacement" />
 
801
                <body>
 
802
                    <ldarg_1 />
 
803
                    <call class="java.util.regex.Pattern" name="compile" sig="(Ljava.lang.String;)Ljava.util.regex.Pattern;" />
 
804
                    <ldarg_0 />
 
805
                    <callvirt class="java.util.regex.Pattern" name="matcher" sig="(Ljava.lang.CharSequence;)Ljava.util.regex.Matcher;" />
 
806
                    <ldarg_2 />
 
807
                    <callvirt class="java.util.regex.Matcher" name="replaceFirst" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
808
                    <ret />
 
809
                </body>
 
810
            </method>
 
811
            <method name="split" sig="(Ljava.lang.String;)[Ljava.lang.String;" modifiers="public">
 
812
                <parameter name="regex" />
 
813
                <body>
 
814
                    <ldarg_0 />
 
815
                    <ldarg_1 />
 
816
                    <ldc_i4_0 />
 
817
                    <callvirt class="java.lang.String" name="split" sig="(Ljava.lang.String;I)[Ljava.lang.String;" />
 
818
                    <ret />
 
819
                </body>
 
820
            </method>
 
821
            <method name="split" sig="(Ljava.lang.String;I)[Ljava.lang.String;" modifiers="public">
 
822
                <parameter name="regex" />
 
823
                <parameter name="limit" />
 
824
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.lang.String;I)[Ljava.lang.String;" />
 
825
            </method>
 
826
            <method name="copyValueOf" sig="([C)Ljava.lang.String;" modifiers="public static">
 
827
                <parameter name="data" />
 
828
                <body>
 
829
                    <!-- force a NullPointerException if the array is null -->
 
830
                    <ldarg_0 />
 
831
                    <ldlen />
 
832
                    <pop />
 
833
                    <ldarg_0 />
 
834
                    <newobj type="System.String" name=".ctor" sig="([C)V" />
 
835
                    <ret />
 
836
                </body>
 
837
            </method>
 
838
            <method name="copyValueOf" sig="([CII)Ljava.lang.String;" modifiers="public static">
 
839
                <parameter name="data" />
 
840
                <parameter name="offset" />
 
841
                <parameter name="count" />
 
842
                <body>
 
843
                    <ldarg_0 />
 
844
                    <ldarg_1 />
 
845
                    <ldarg_2 />
 
846
                    <newobj type="System.String" name=".ctor" sig="([CII)V" />
 
847
                    <ret />
 
848
                </body>
 
849
            </method>
 
850
            <method name="format" sig="(Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.String;" modifiers="public static">
 
851
                <parameter name="format" />
 
852
                <parameter name="args">
 
853
                    <attribute type="System.ParamArrayAttribute" sig="()V" />
 
854
                </parameter>
 
855
                <redirect class="java.lang.StringHelper" />
 
856
            </method>
 
857
            <method name="format" sig="(Ljava.util.Locale;Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.String;" modifiers="public static">
 
858
                <parameter name="l" />
 
859
                <parameter name="format" />
 
860
                <parameter name="args">
 
861
                    <attribute type="System.ParamArrayAttribute" sig="()V" />
 
862
                </parameter>
 
863
                <redirect class="java.lang.StringHelper" />
 
864
            </method>
 
865
            <method name="isEmpty" sig="()Z" modifiers="public">
 
866
                <body>
 
867
                    <ldarg_0 />
 
868
                    <callvirt type="System.String" name="get_Length" sig="()I" />
 
869
                    <ldc_i4_0 />
 
870
                    <ceq />
 
871
                    <ret />
 
872
                </body>
 
873
            </method>
 
874
            <method name="getBytes" sig="(Ljava.nio.charset.Charset;)[B" modifiers="public">
 
875
                <parameter name="charset" />
 
876
                <redirect class="java.lang.StringHelper" type="static" sig="(Ljava.lang.String;Ljava.nio.charset.Charset;)[B" />
 
877
            </method>
 
878
            <field name="CASE_INSENSITIVE_ORDER" sig="Ljava.util.Comparator;" modifiers="public static final">
 
879
                <attribute type="IKVM.Attributes.SignatureAttribute" sig="(Ljava.lang.String;)V">
 
880
                    <parameter>Ljava/util/Comparator&lt;Ljava/lang/String;&gt;;</parameter>
 
881
                </attribute>
 
882
            </field>
 
883
            <!-- TODO mark this method as BeforeFieldInit (and benchmark to see if that is faster) -->
 
884
            <clinit>
 
885
                <body>
 
886
                    <ldnull />
 
887
                    <newobj class="java.lang.String$CaseInsensitiveComparator" name="&lt;init&gt;" sig="(Ljava.lang.String$1;)V" />
 
888
                    <stsfld class="java.lang.String" name="CASE_INSENSITIVE_ORDER" sig="Ljava.util.Comparator;" />
 
889
                    <ret />
 
890
                </body>
 
891
            </clinit>
 
892
        </class>
 
893
        <class name="java.lang.Throwable" shadows="System.Exception" modifiers="public">
 
894
            <implements class="java.io.Serializable" />
 
895
            <attribute type="System.SerializableAttribute" sig="()V" />
 
896
            <field name="serialVersionUID" sig="J" modifiers="private static final" constant="-3042686055658047285" />
 
897
            <field name="serialPersistentFields" sig="[Ljava.io.ObjectStreamField;" modifiers="private static final" />
 
898
            <field name="suppressFillInStackTrace" sig="Z" modifiers="private static">
 
899
                <attribute type="System.ThreadStaticAttribute" sig="()V" />
 
900
            </field>
 
901
            <field name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" modifiers="static final" />
 
902
            <field name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" modifiers="static final" />
 
903
            <field name="detailMessage" sig="Ljava.lang.String;" />
 
904
            <field name="cause" sig="Ljava.lang.Throwable;" />
 
905
            <field name="original" sig="Ljava.lang.Throwable;" />
 
906
            <field name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
907
            <field name="tracePart1" sig="Lcli.System.Diagnostics.StackTrace;" />
 
908
            <field name="tracePart2" sig="Lcli.System.Diagnostics.StackTrace;" />
 
909
            <field name="suppressedExceptions" sig="Ljava.util.List;" />
 
910
            <clinit>
 
911
                <body>
 
912
                    <call type="IKVM.Internal.ExceptionHelper" name="getPersistentFields" sig="()[Ljava.io.ObjectStreamField;" />
 
913
                    <stsfld class="java.lang.Throwable" name="serialPersistentFields" sig="[Ljava.io.ObjectStreamField;" />
 
914
                    <ldc_i4_0 />
 
915
                    <newarr sig="Ljava.lang.StackTraceElement;" />
 
916
                    <stsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
917
                    <ldc_i4_0 />
 
918
                    <newobj class="java.util.ArrayList" name="&lt;init&gt;" sig="(I)V" />
 
919
                    <call class="java.util.Collections" name="unmodifiableList" sig="(Ljava.util.List;)Ljava.util.List;" />
 
920
                    <stsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
921
                    <ret />
 
922
                </body>
 
923
            </clinit>
 
924
            <method name="__&lt;suppressFillInStackTrace&gt;" sig="()V" modifiers="public static">
 
925
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
926
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
927
                    <parameter>Never</parameter>
 
928
                </attribute>
 
929
                <body>
 
930
                    <ldc_i4_1 />
 
931
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
932
                    <ret />
 
933
                </body>
 
934
            </method>
 
935
            <method name="__mapImpl" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" modifiers="static">
 
936
                <body>
 
937
                    <!-- this emits the conversion code based on the <exceptionMappings /> defined below -->
 
938
                    <exceptionMapping />
 
939
                </body>
 
940
            </method>
 
941
            <method name="__&lt;unmap&gt;" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" modifiers="public static">
 
942
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
943
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
944
                    <parameter>Never</parameter>
 
945
                </attribute>
 
946
                <body>
 
947
                    <ldarg_0 />
 
948
                    <call type="IKVM.Internal.ExceptionHelper" name="UnmapException" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" />
 
949
                    <ret />
 
950
                </body>
 
951
            </method>
 
952
            <method name="__&lt;fixate&gt;" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" modifiers="public static">
 
953
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
954
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
955
                    <parameter>Never</parameter>
 
956
                </attribute>
 
957
                <body>
 
958
                    <ldarg_0 />
 
959
                    <call type="IKVM.Internal.ExceptionHelper" name="FixateException" sig="(Ljava.lang.Throwable;)V" />
 
960
                    <ldarg_0 />
 
961
                    <ret />
 
962
                </body>
 
963
            </method>
 
964
            <method name="readObject" sig="(Ljava.io.ObjectInputStream;)V" modifiers="private">
 
965
                <throws class="java.io.IOException" />
 
966
                <throws class="java.lang.ClassNotFoundException" />
 
967
                <body>
 
968
                    <ldarg_0 />
 
969
                    <ldarg_1 />
 
970
                    <call type="IKVM.Internal.ExceptionHelper" name="readObject" sig="(Ljava.lang.Throwable;Ljava.io.ObjectInputStream;)V" />
 
971
                    <ret />
 
972
                </body>
 
973
            </method>
 
974
            <method name="writeObject" sig="(Ljava.io.ObjectOutputStream;)V" modifiers="private">
 
975
                <throws class="java.io.IOException" />
 
976
                <body>
 
977
                    <ldarg_0 />
 
978
                    <ldarg_1 />
 
979
                    <call type="IKVM.Internal.ExceptionHelper" name="writeObject" sig="(Ljava.lang.Throwable;Ljava.io.ObjectOutputStream;)V" />
 
980
                    <ret />
 
981
                </body>
 
982
            </method>
 
983
            <constructor sig="()V" modifiers="public">
 
984
                <body>
 
985
                    <!-- Start field initialization -->
 
986
                    <ldarg_0 />
 
987
                    <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
988
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
989
                    <ldarg_0 />
 
990
                    <ldsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
991
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
992
                    <!-- End field initialization -->
 
993
                    <ldarg_0 />
 
994
                    <ldstr value="" />
 
995
                    <call type="System.Exception" name=".ctor" sig="(Ljava.lang.String;)V" />
 
996
                    <ldarg_0 />
 
997
                    <ldarg_0 />
 
998
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
999
                    <!-- Start fillInStackTrace call -->
 
1000
                    <ldsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1001
                    <ldc_i4_0 />
 
1002
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1003
                    <brtrue name="skipFillInStackTrace" />
 
1004
                    <ldarg_0 />
 
1005
                    <callvirt class="java.lang.Throwable" name="fillInStackTrace" sig="()Ljava.lang.Throwable;" />
 
1006
                    <pop />
 
1007
                    <label name="skipFillInStackTrace" />
 
1008
                    <!-- End fillInStackTrace call -->
 
1009
                    <ret />
 
1010
                </body>
 
1011
            </constructor>
 
1012
            <constructor sig="(Ljava.lang.String;)V" modifiers="public">
 
1013
                <parameter name="message" />
 
1014
                <body>
 
1015
                    <!-- Start field initialization -->
 
1016
                    <ldarg_0 />
 
1017
                    <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
1018
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1019
                    <ldarg_0 />
 
1020
                    <ldsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
1021
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
1022
                    <!-- End field initialization -->
 
1023
                    <ldarg_0 />
 
1024
                    <ldarg_1 />
 
1025
                    <call type="IKVM.Internal.ExceptionHelper" name="FilterMessage" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
1026
                    <call type="System.Exception" name=".ctor" sig="(Ljava.lang.String;)V" />
 
1027
                    <ldarg_0 />
 
1028
                    <ldarg_0 />
 
1029
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1030
                    <!-- Start fillInStackTrace call -->
 
1031
                    <ldsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1032
                    <ldc_i4_0 />
 
1033
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1034
                    <brtrue name="skipFillInStackTrace" />
 
1035
                    <ldarg_0 />
 
1036
                    <callvirt class="java.lang.Throwable" name="fillInStackTrace" sig="()Ljava.lang.Throwable;" />
 
1037
                    <pop />
 
1038
                    <label name="skipFillInStackTrace" />
 
1039
                    <!-- End fillInStackTrace call -->
 
1040
                    <ldarg_0 />
 
1041
                    <ldarg_1 />
 
1042
                    <stfld class="java.lang.Throwable" name="detailMessage" sig="Ljava.lang.String;" />
 
1043
                    <ret />
 
1044
                </body>
 
1045
            </constructor>
 
1046
            <constructor sig="(Ljava.lang.String;Ljava.lang.Throwable;)V" modifiers="public">
 
1047
                <parameter name="message" />
 
1048
                <parameter name="cause" />
 
1049
                <body>
 
1050
                    <!-- Start field initialization -->
 
1051
                    <ldarg_0 />
 
1052
                    <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
1053
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1054
                    <ldarg_0 />
 
1055
                    <ldsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
1056
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
1057
                    <!-- End field initialization -->
 
1058
                    <ldarg_0 />
 
1059
                    <ldarg_1 />
 
1060
                    <call type="IKVM.Internal.ExceptionHelper" name="FilterMessage" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
1061
                    <ldarg_2 />
 
1062
                    <call type="System.Exception" name=".ctor" sig="(Ljava.lang.String;Ljava.lang.Throwable;)V" />
 
1063
                    <ldarg_0 />
 
1064
                    <ldarg_0 />
 
1065
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1066
                    <!-- Start fillInStackTrace call -->
 
1067
                    <ldsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1068
                    <ldc_i4_0 />
 
1069
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1070
                    <brtrue name="skipFillInStackTrace" />
 
1071
                    <ldarg_0 />
 
1072
                    <callvirt class="java.lang.Throwable" name="fillInStackTrace" sig="()Ljava.lang.Throwable;" />
 
1073
                    <pop />
 
1074
                    <label name="skipFillInStackTrace" />
 
1075
                    <!-- End fillInStackTrace call -->
 
1076
                    <ldarg_0 />
 
1077
                    <ldarg_1 />
 
1078
                    <stfld class="java.lang.Throwable" name="detailMessage" sig="Ljava.lang.String;" />
 
1079
                    <ldarg_0 />
 
1080
                    <ldarg_2 />
 
1081
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1082
                    <ret />
 
1083
                </body>
 
1084
            </constructor>
 
1085
            <constructor sig="(Ljava.lang.Throwable;)V" modifiers="public">
 
1086
                <parameter name="cause" />
 
1087
                <body>
 
1088
                    <!-- Start field initialization -->
 
1089
                    <ldarg_0 />
 
1090
                    <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
1091
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1092
                    <ldarg_0 />
 
1093
                    <ldsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
1094
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
1095
                    <!-- End field initialization -->
 
1096
                    <ldarg_0 />
 
1097
                    <ldarg_1 />
 
1098
                    <call type="IKVM.Internal.ExceptionHelper" name="GetMessageFromCause" sig="(Ljava.lang.Throwable;)Ljava.lang.String;" />
 
1099
                    <ldarg_1 />
 
1100
                    <call type="System.Exception" name=".ctor" sig="(Ljava.lang.String;Ljava.lang.Throwable;)V" />
 
1101
                    <ldarg_0 />
 
1102
                    <ldarg_0 />
 
1103
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1104
                    <!-- Start fillInStackTrace call -->
 
1105
                    <ldsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1106
                    <ldc_i4_0 />
 
1107
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1108
                    <brtrue name="skipFillInStackTrace" />
 
1109
                    <ldarg_0 />
 
1110
                    <callvirt class="java.lang.Throwable" name="fillInStackTrace" sig="()Ljava.lang.Throwable;" />
 
1111
                    <pop />
 
1112
                    <label name="skipFillInStackTrace" />
 
1113
                    <!-- End fillInStackTrace call -->
 
1114
                    <ldarg_1 />
 
1115
                    <brfalse name="no_cause" />
 
1116
                    <ldarg_0 />
 
1117
                    <ldarg_1 />
 
1118
                    <callvirt class="java.lang.Throwable" name="toString" sig="()Ljava.lang.String;" />
 
1119
                    <stfld class="java.lang.Throwable" name="detailMessage" sig="Ljava.lang.String;" />
 
1120
                    <label name="no_cause" />
 
1121
                    <ldarg_0 />
 
1122
                    <ldarg_1 />
 
1123
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1124
                    <ret />
 
1125
                </body>
 
1126
            </constructor>
 
1127
            <constructor sig="(Ljava.lang.String;Ljava.lang.Throwable;ZZ)V" modifiers="protected">
 
1128
                <parameter name="message" />
 
1129
                <parameter name="cause" />
 
1130
                <parameter name="enableSuppression" />
 
1131
                <parameter name="writableStackTrace" />
 
1132
                <body>
 
1133
                    <!-- Start field initialization -->
 
1134
                    <ldarg_0 />
 
1135
                    <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
1136
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1137
                    <ldarg_0 />
 
1138
                    <ldsfld class="java.lang.Throwable" name="SUPPRESSED_SENTINEL" sig="Ljava.util.List;" />
 
1139
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
1140
                    <!-- End field initialization -->
 
1141
                    <ldarg_0 />
 
1142
                    <ldarg_1 />
 
1143
                    <call type="IKVM.Internal.ExceptionHelper" name="FilterMessage" sig="(Ljava.lang.String;)Ljava.lang.String;" />
 
1144
                    <ldarg_2 />
 
1145
                    <call type="System.Exception" name=".ctor" sig="(Ljava.lang.String;Ljava.lang.Throwable;)V" />
 
1146
                    <ldarg_s argNum="4" />
 
1147
                    <brfalse name="else" />
 
1148
                    <!-- Start fillInStackTrace call -->
 
1149
                    <ldsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1150
                    <ldc_i4_0 />
 
1151
                    <stsfld class="java.lang.Throwable" name="suppressFillInStackTrace" sig="Z" />
 
1152
                    <brtrue name="skipFillInStackTrace" />
 
1153
                    <ldarg_0 />
 
1154
                    <callvirt class="java.lang.Throwable" name="fillInStackTrace" sig="()Ljava.lang.Throwable;" />
 
1155
                    <pop />
 
1156
                    <label name="skipFillInStackTrace" />
 
1157
                    <!-- End fillInStackTrace call -->
 
1158
                    <br name="endif" />
 
1159
                    <label name="else" />
 
1160
                    <ldarg_0 />
 
1161
                    <ldnull />
 
1162
                    <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1163
                    <label name="endif" />
 
1164
                    <ldarg_0 />
 
1165
                    <ldarg_1 />
 
1166
                    <stfld class="java.lang.Throwable" name="detailMessage" sig="Ljava.lang.String;" />
 
1167
                    <ldarg_0 />
 
1168
                    <ldarg_2 />
 
1169
                    <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1170
                    <ldarg_3 />
 
1171
                    <brtrue name="end" />
 
1172
                    <ldarg_0 />
 
1173
                    <ldnull />
 
1174
                    <stfld class="java.lang.Throwable" name="suppressedExceptions" sig="Ljava.util.List;" />
 
1175
                    <label name="end" />
 
1176
                    <ret />
 
1177
                </body>
 
1178
            </constructor>
 
1179
            <method name="printStackTrace" sig="()V" modifiers="public">
 
1180
                <redirect class="java.lang.ThrowableHelper" sig="(Ljava.lang.Throwable;)V" type="static" />
 
1181
            </method>
 
1182
            <method name="printStackTrace" sig="(Ljava.io.PrintStream;)V" modifiers="public">
 
1183
                <parameter name="s" />
 
1184
                <redirect class="java.lang.ThrowableHelper" sig="(Ljava.lang.Throwable;Ljava.io.PrintStream;)V" type="static" />
 
1185
            </method>
 
1186
            <method name="printStackTrace" sig="(Ljava.io.PrintWriter;)V" modifiers="public">
 
1187
                <parameter name="s" />
 
1188
                <redirect class="java.lang.ThrowableHelper" sig="(Ljava.lang.Throwable;Ljava.io.PrintWriter;)V" type="static" />
 
1189
            </method>
 
1190
            <method name="getMessage" sig="()Ljava.lang.String;" modifiers="public">
 
1191
                <body>
 
1192
                    <ldarg_0 />
 
1193
                    <ldfld class="java.lang.Throwable" name="detailMessage" sig="Ljava.lang.String;" />
 
1194
                    <ret />
 
1195
                </body>
 
1196
                <alternateBody>
 
1197
                    <ldarg_0 />
 
1198
                    <callvirt class="cli.System.Exception" name="get_Message" sig="()Ljava.lang.String;" />
 
1199
                    <ret />
 
1200
                </alternateBody>
 
1201
            </method>
 
1202
            <method name="getLocalizedMessage" sig="()Ljava.lang.String;" modifiers="public">
 
1203
                <redirect class="cli.IKVM.Internal.ExceptionHelper" sig="(Ljava.lang.Throwable;)Ljava.lang.String;" type="static" />
 
1204
            </method>
 
1205
            <method name="fillInStackTrace" sig="()Ljava.lang.Throwable;" modifiers="public">
 
1206
                <body>
 
1207
                    <ldarg_0 />
 
1208
                    <call type="System.Threading.Monitor" name="Enter" sig="(Ljava.lang.Object;)V" />
 
1209
                    <exceptionBlock>
 
1210
                        <try>
 
1211
                            <ldarg_0 />
 
1212
                            <ldfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1213
                            <brfalse name="leave" />
 
1214
                            <!--
 
1215
                            stackTrace = UNASSIGNED_STACK;
 
1216
                            tracePart1 = null;
 
1217
                            tracePart2 = new cli.System.Diagnostics.StackTrace(true);
 
1218
                            -->
 
1219
                            <ldarg_0 />
 
1220
                            <ldsfld class="java.lang.Throwable" name="UNASSIGNED_STACK" sig="[Ljava.lang.StackTraceElement;" />
 
1221
                            <stfld class="java.lang.Throwable" name="stackTrace" sig="[Ljava.lang.StackTraceElement;" />
 
1222
                            <ldarg_0 />
 
1223
                            <ldnull />
 
1224
                            <stfld class="java.lang.Throwable" name="tracePart1" sig="Lcli.System.Diagnostics.StackTrace;" />
 
1225
                            <ldarg_0 />
 
1226
                            <ldc_i4_1 />
 
1227
                            <newobj type="System.Diagnostics.StackTrace" name=".ctor" sig="(Z)V" />
 
1228
                            <stfld class="java.lang.Throwable" name="tracePart2" sig="Lcli.System.Diagnostics.StackTrace;" />
 
1229
                            <label name="leave" />
 
1230
                            <leave name="end" />
 
1231
                        </try>
 
1232
                        <finally>
 
1233
                            <ldarg_0 />
 
1234
                            <call type="System.Threading.Monitor" name="Exit" sig="(Ljava.lang.Object;)V" />
 
1235
                            <endfinally />
 
1236
                        </finally>
 
1237
                    </exceptionBlock>
 
1238
                    <label name="end" />
 
1239
                    <ldarg_0 />
 
1240
                    <ret />
 
1241
                </body>
 
1242
                <alternateBody>
 
1243
                    <ldarg_0 />
 
1244
                    <call type="IKVM.Internal.ExceptionHelper" name="fillInStackTrace" sig="(Ljava.lang.Throwable;)V" />
 
1245
                    <ldarg_0 />
 
1246
                    <ret />
 
1247
                </alternateBody>
 
1248
            </method>
 
1249
            <method name="initCause" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" modifiers="public">
 
1250
                <parameter name="cause" />
 
1251
                <body>
 
1252
                    <ldarg_0 />
 
1253
                    <call type="System.Threading.Monitor" name="Enter" sig="(Ljava.lang.Object;)V" />
 
1254
                    <exceptionBlock>
 
1255
                        <try>
 
1256
                            <ldarg_0 />
 
1257
                            <ldarg_0 />
 
1258
                            <ldfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1259
                            <ldarg_1 />
 
1260
                            <call type="IKVM.Internal.ExceptionHelper" name="checkInitCause" sig="(Ljava.lang.Throwable;Ljava.lang.Throwable;Ljava.lang.Throwable;)V" />
 
1261
                            <ldarg_0 />
 
1262
                            <ldarg_1 />
 
1263
                            <stfld class="java.lang.Throwable" name="cause" sig="Ljava.lang.Throwable;" />
 
1264
                            <leave name="end" />
 
1265
                        </try>
 
1266
                        <finally>
 
1267
                            <ldarg_0 />
 
1268
                            <call type="System.Threading.Monitor" name="Exit" sig="(Ljava.lang.Object;)V" />
 
1269
                            <endfinally />
 
1270
                        </finally>
 
1271
                    </exceptionBlock>
 
1272
                    <label name="end" />
 
1273
                    <ldarg_0 />
 
1274
                    <ret />
 
1275
                </body>
 
1276
                <alternateBody>
 
1277
                    <!-- non-Java exception cannot have its cause changed, so we call checkInitCause in a way that will always throw -->
 
1278
                    <ldarg_0 />
 
1279
                    <ldnull />
 
1280
                    <ldnull />
 
1281
                    <call type="IKVM.Internal.ExceptionHelper" name="checkInitCause" sig="(Ljava.lang.Throwable;Ljava.lang.Throwable;Ljava.lang.Throwable;)V" />
 
1282
                    <ldarg_0 />
 
1283
                    <ret />
 
1284
                </alternateBody>
 
1285
            </method>
 
1286
            <method name="getCause" sig="()Ljava.lang.Throwable;" modifiers="public">
 
1287
                <body>
 
1288
                    <ldarg_0 />
 
1289
                    <call type="IKVM.Internal.ExceptionHelper" name="getCause" sig="(Ljava.lang.Throwable;)Ljava.lang.Throwable;" />
 
1290
                    <ret />
 
1291
                </body>
 
1292
                <alternateBody>
 
1293
                    <ldarg_0 />
 
1294
                    <call class="cli.System.Exception" name="get_InnerException" sig="()Ljava.lang.Throwable;" />
 
1295
                    <ret />
 
1296
                </alternateBody>
 
1297
            </method>
 
1298
            <method name="getStackTrace" sig="()[Ljava.lang.StackTraceElement;" modifiers="public">
 
1299
                <body>
 
1300
                    <ldarg_0 />
 
1301
                    <call type="IKVM.Internal.ExceptionHelper" name="getOurStackTrace" sig="(Ljava.lang.Throwable;)[Ljava.lang.StackTraceElement;" />
 
1302
                    <callvirt type="System.Array" name="Clone" sig="()Ljava.lang.Object;" />
 
1303
                    <castclass class="[Ljava.lang.StackTraceElement;" />
 
1304
                    <ret />
 
1305
                </body>
 
1306
            </method>
 
1307
            <method name="getOurStackTrace" sig="()[Ljava.lang.StackTraceElement;" modifiers="private">
 
1308
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="getOurStackTrace" sig="(Ljava.lang.Throwable;)[Ljava.lang.StackTraceElement;" />
 
1309
            </method>
 
1310
            <method name="setStackTrace" sig="([Ljava.lang.StackTraceElement;)V" modifiers="public">
 
1311
                <parameter name="stackTrace" />
 
1312
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="setStackTrace" sig="(Ljava.lang.Throwable;[Ljava.lang.StackTraceElement;)V" />
 
1313
            </method>
 
1314
            <method name="toString" sig="()Ljava.lang.String;" modifiers="public">
 
1315
                <redirect class="cli.IKVM.Internal.ExceptionHelper" sig="(Ljava.lang.Throwable;)Ljava.lang.String;" type="static" />
 
1316
            </method>
 
1317
            <method name="GetObjectData" sig="(Lcli.System.Runtime.Serialization.SerializationInfo;Lcli.System.Runtime.Serialization.StreamingContext;)V" modifiers="public">
 
1318
                <attribute type="System.Security.Permissions.SecurityPermissionAttribute" sig="(Lcli.System.Security.Permissions.SecurityAction;)V">
 
1319
                    <parameter>Demand</parameter>
 
1320
                    <property name="SerializationFormatter" sig="Z">true</property>
 
1321
                </attribute>
 
1322
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
1323
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1324
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
1325
                    <parameter>Never</parameter>
 
1326
                </attribute>
 
1327
                <body>
 
1328
                    <ldarg_0 />
 
1329
                    <ldarg_1 />
 
1330
                    <ldarg_2 />
 
1331
                    <call type="System.Exception" name="GetObjectData" sig="(Lcli.System.Runtime.Serialization.SerializationInfo;Lcli.System.Runtime.Serialization.StreamingContext;)V" />
 
1332
                    <ldarg_0 />
 
1333
                    <ldarg_1 />
 
1334
                    <call class="ikvm.internal.Serialization" name="writeObject" sig="(Ljava.lang.Object;Lcli.System.Runtime.Serialization.SerializationInfo;)V" />
 
1335
                    <ret />
 
1336
                </body>
 
1337
            </method>
 
1338
            <constructor sig="(Lcli.System.Runtime.Serialization.SerializationInfo;Lcli.System.Runtime.Serialization.StreamingContext;)V" modifiers="protected">
 
1339
                <attribute type="System.Security.Permissions.SecurityPermissionAttribute" sig="(Lcli.System.Security.Permissions.SecurityAction;)V">
 
1340
                    <parameter>Demand</parameter>
 
1341
                    <property name="SerializationFormatter" sig="Z">true</property>
 
1342
                </attribute>
 
1343
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1344
                <body>
 
1345
                    <ldarg_0 />
 
1346
                    <ldarg_1 />
 
1347
                    <ldarg_2 />
 
1348
                    <call type="System.Exception" name=".ctor" sig="(Lcli.System.Runtime.Serialization.SerializationInfo;Lcli.System.Runtime.Serialization.StreamingContext;)V" />
 
1349
                    <ldarg_0 />
 
1350
                    <ldarg_1 />
 
1351
                    <call class="ikvm.internal.Serialization" name="readObject" sig="(Ljava.lang.Object;Lcli.System.Runtime.Serialization.SerializationInfo;)V" />
 
1352
                    <ret />
 
1353
                </body>
 
1354
            </constructor>
 
1355
            <method name="addSuppressed" sig="(Ljava.lang.Throwable;)V" modifiers="public final">
 
1356
                <parameter name="exception" />
 
1357
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="addSuppressed" sig="(Ljava.lang.Throwable;Ljava.lang.Throwable;)V" />
 
1358
            </method>
 
1359
            <method name="getSuppressed" sig="()[Ljava.lang.Throwable;" modifiers="public final">
 
1360
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="getSuppressed" sig="(Ljava.lang.Throwable;)[Ljava.lang.Throwable;" />
 
1361
            </method>
 
1362
            <method name="getStackTraceDepth" sig="()I" modifiers="">
 
1363
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="getStackTraceDepth" sig="(Ljava.lang.Throwable;)I" />
 
1364
            </method>
 
1365
            <method name="getStackTraceElement" sig="(I)Ljava.lang.StackTraceElement;" modifiers="">
 
1366
                <redirect class="cli.IKVM.Internal.ExceptionHelper" name="getStackTraceElement" sig="(Ljava.lang.Throwable;I)Ljava.lang.StackTraceElement;" />
 
1367
            </method>
 
1368
        </class>
 
1369
        <class name="java.lang.ThrowableHelper">
 
1370
            <method name="getOurStackTrace" sig="(Ljava.lang.Throwable;)[Ljava.lang.StackTraceElement;">
 
1371
                <body>
 
1372
                    <ldarg_0 />
 
1373
                    <call type="IKVM.Internal.ExceptionHelper" name="getOurStackTrace" sig="(Ljava.lang.Throwable;)[Ljava.lang.StackTraceElement;" />
 
1374
                    <ret />
 
1375
                </body>
 
1376
            </method>
 
1377
        </class>
 
1378
        <class name="java.lang.Comparable" shadows="System.IComparable" modifiers="public abstract interface">
 
1379
            <attribute type="IKVM.Attributes.SignatureAttribute" sig="(Ljava.lang.String;)V">
 
1380
                <parameter>&lt;T:Ljava/lang/Object;&gt;Ljava/lang/Object;</parameter>
 
1381
            </attribute>
 
1382
            <method name="compareTo" sig="(Ljava.lang.Object;)I" modifiers="public abstract">
 
1383
                <attribute type="IKVM.Attributes.SignatureAttribute" sig="(Ljava.lang.String;)V">
 
1384
                    <parameter>(TT;)I</parameter>
 
1385
                </attribute>
 
1386
                <parameter name="o" />
 
1387
                <override name="CompareTo" />
 
1388
            </method>
 
1389
        </class>
 
1390
        <class name="java.lang.AutoCloseable" shadows="System.IDisposable" modifiers="public abstract interface">
 
1391
            <method name="close" sig="()V" modifiers="public abstract">
 
1392
                <throws class="java.lang.Exception" />
 
1393
                <override name="Dispose" />
 
1394
            </method>
 
1395
        </class>
 
1396
        <!-- Here we are adding/replacing methods to existing classes -->
 
1397
        <class name="java.lang.Class">
 
1398
            <implements class="cli.System.Runtime.Serialization.ISerializable" />
 
1399
            <field name="typeWrapper" sig="Lcli.IKVM.Internal.TypeWrapper;" modifiers="">
 
1400
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1401
            </field>
 
1402
        </class>
 
1403
        <class name="java.lang.ClassLoader">
 
1404
            <field name="wrapper" sig="Lcli.IKVM.Internal.ClassLoaderWrapper;" modifiers="">
 
1405
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1406
            </field>
 
1407
            <constructor sig="(Z)V">
 
1408
                <body>
 
1409
                    <ldarg_0 />
 
1410
                    <call class="java.lang.Object" name="&lt;init&gt;" sig="()V" />
 
1411
                    <ret />
 
1412
                </body>
 
1413
            </constructor>
 
1414
            <method name="getBootstrapResource" sig="(Ljava.lang.String;)Ljava.net.URL;">
 
1415
                <body>
 
1416
                    <ldarg_0 />
 
1417
                    <call class="java.lang.LangHelper" name="getBootstrapResource" sig="(Ljava.lang.String;)Ljava.net.URL;" />
 
1418
                    <ret />
 
1419
                </body>
 
1420
            </method>
 
1421
            <method name="getBootstrapResources" sig="(Ljava.lang.String;)Ljava.util.Enumeration;">
 
1422
                <body>
 
1423
                    <ldarg_0 />
 
1424
                    <call class="java.lang.LangHelper" name="getBootstrapResources" sig="(Ljava.lang.String;)Ljava.util.Enumeration;" />
 
1425
                    <ret />
 
1426
                </body>
 
1427
            </method>
 
1428
        </class>
 
1429
        <class name="java.lang.Enum">
 
1430
            <implements class="cli.System.Runtime.Serialization.ISerializable" />
 
1431
        </class>
 
1432
        <class name="java.lang.Thread">
 
1433
            <field name="parkLock" sig="Ljava.lang.Object;" modifiers="" />
 
1434
            <field name="parkState" sig="I" modifiers="" />
 
1435
            <constructor sig="(Ljava.lang.Void;)V">
 
1436
                <body>
 
1437
                    <ldarg_0 />
 
1438
                    <call class="java.lang.Object" name="&lt;init&gt;" sig="()V" />
 
1439
                    <ret />
 
1440
                </body>
 
1441
            </constructor>
 
1442
            <method name="isCCLOverridden" sig="(Ljava.lang.Thread;)Z">
 
1443
                <body>
 
1444
                    <ldftn class="java.lang.Thread" name="getContextClassLoader" sig="()Ljava.lang.ClassLoader;" />
 
1445
                    <ldarg_0 />
 
1446
                    <ldvirtftn class="java.lang.Thread" name="getContextClassLoader" sig="()Ljava.lang.ClassLoader;" />
 
1447
                    <ceq />
 
1448
                    <ldftn class="java.lang.Thread" name="setContextClassLoader" sig="(Ljava.lang.ClassLoader;)V" />
 
1449
                    <ldarg_0 />
 
1450
                    <ldvirtftn class="java.lang.Thread" name="setContextClassLoader" sig="(Ljava.lang.ClassLoader;)V" />
 
1451
                    <ceq />
 
1452
                    <and />
 
1453
                    <ldc_i4_0 />
 
1454
                    <ceq />
 
1455
                    <ret />
 
1456
                </body>
 
1457
            </method>
 
1458
        </class>
 
1459
        <class name="java.lang.ThreadGroup">
 
1460
            <method name="createRootGroup" sig="()Ljava.lang.ThreadGroup;" modifiers="static">
 
1461
                <body>
 
1462
                    <newobj class="java.lang.ThreadGroup" name="&lt;init&gt;" sig="()V" />
 
1463
                    <ret />
 
1464
                </body>
 
1465
            </method>
 
1466
        </class>
 
1467
        <class name="java.lang.reflect.Constructor">
 
1468
            <method name="_slot" sig="()I">
 
1469
                <body>
 
1470
                    <ldarg_0 />
 
1471
                    <ldfld class="java.lang.reflect.Constructor" name="slot" sig="I" />
 
1472
                    <ret />
 
1473
                </body>
 
1474
            </method>
 
1475
        </class>
 
1476
        <class name="java.lang.reflect.Field">
 
1477
            <method name="_slot" sig="()I">
 
1478
                <body>
 
1479
                    <ldarg_0 />
 
1480
                    <ldfld class="java.lang.reflect.Field" name="slot" sig="I" />
 
1481
                    <ret />
 
1482
                </body>
 
1483
            </method>
 
1484
        </class>
 
1485
        <class name="java.lang.reflect.Method">
 
1486
            <method name="_slot" sig="()I">
 
1487
                <body>
 
1488
                    <ldarg_0 />
 
1489
                    <ldfld class="java.lang.reflect.Method" name="slot" sig="I" />
 
1490
                    <ret />
 
1491
                </body>
 
1492
            </method>
 
1493
        </class>
 
1494
        <class name="java.net.Inet6Address">
 
1495
            <method name="_set" sig="(ILjava.net.NetworkInterface;)V" modifiers="">
 
1496
                <body>
 
1497
                    <ldarg_0 />
 
1498
                    <ldarg_1 />
 
1499
                    <stfld class="java.net.Inet6Address" name="scope_id" sig="I" />
 
1500
                    <ldarg_0 />
 
1501
                    <ldc_i4_1 />
 
1502
                    <stfld class="java.net.Inet6Address" name="scope_id_set" sig="Z" />
 
1503
                    <ldarg_0 />
 
1504
                    <ldarg_2 />
 
1505
                    <stfld class="java.net.Inet6Address" name="scope_ifname" sig="Ljava.net.NetworkInterface;" />
 
1506
                    <ret />
 
1507
                </body>
 
1508
            </method>
 
1509
        </class>
 
1510
        <class name="java.net.InterfaceAddress">
 
1511
            <method name="_set" sig="(Ljava.net.InetAddress;Ljava.net.Inet4Address;S)V" modifiers="">
 
1512
                <body>
 
1513
                    <ldarg_0 />
 
1514
                    <ldarg_1 />
 
1515
                    <stfld class="java.net.InterfaceAddress" name="address" sig="Ljava.net.InetAddress;" />
 
1516
                    <ldarg_0 />
 
1517
                    <ldarg_2 />
 
1518
                    <stfld class="java.net.InterfaceAddress" name="broadcast" sig="Ljava.net.Inet4Address;" />
 
1519
                    <ldarg_0 />
 
1520
                    <ldarg_3 />
 
1521
                    <stfld class="java.net.InterfaceAddress" name="maskLength" sig="S" />
 
1522
                    <ret />
 
1523
                </body>
 
1524
            </method>
 
1525
        </class>
 
1526
        <class name="java.net.NetworkInterface">
 
1527
            <method name="_set1" sig="(Ljava.lang.String;Ljava.lang.String;I)V" modifiers="">
 
1528
                <body>
 
1529
                    <ldarg_0 />
 
1530
                    <ldarg_1 />
 
1531
                    <stfld class="java.net.NetworkInterface" name="name" sig="Ljava.lang.String;" />
 
1532
                    <ldarg_0 />
 
1533
                    <ldarg_2 />
 
1534
                    <stfld class="java.net.NetworkInterface" name="displayName" sig="Ljava.lang.String;" />
 
1535
                    <ldarg_0 />
 
1536
                    <ldarg_3 />
 
1537
                    <stfld class="java.net.NetworkInterface" name="index" sig="I" />
 
1538
                    <ret />
 
1539
                </body>
 
1540
            </method>
 
1541
            <method name="_set2" sig="([Ljava.net.InetAddress;[Ljava.net.InterfaceAddress;[Ljava.net.NetworkInterface;)V" modifiers="">
 
1542
                <body>
 
1543
                    <ldarg_0 />
 
1544
                    <ldarg_1 />
 
1545
                    <stfld class="java.net.NetworkInterface" name="addrs" sig="[Ljava.net.InetAddress;" />
 
1546
                    <ldarg_0 />
 
1547
                    <ldarg_2 />
 
1548
                    <stfld class="java.net.NetworkInterface" name="bindings" sig="[Ljava.net.InterfaceAddress;" />
 
1549
                    <ldarg_0 />
 
1550
                    <ldarg_3 />
 
1551
                    <stfld class="java.net.NetworkInterface" name="childs" sig="[Ljava.net.NetworkInterface;" />
 
1552
                    <ret />
 
1553
                </body>
 
1554
            </method>
 
1555
        </class>
 
1556
        <class name="java.security.AccessControlContext">
 
1557
            <method name="_privilegedContext" sig="(Ljava.security.AccessControlContext;)V" modifiers="">
 
1558
                <body>
 
1559
                    <ldarg_0 />
 
1560
                    <ldarg_1 />
 
1561
                    <stfld class="java.security.AccessControlContext" name="privilegedContext" sig="Ljava.security.AccessControlContext;" />
 
1562
                    <ret />
 
1563
                </body>
 
1564
            </method>
 
1565
        </class>
 
1566
        <class name="java.util.AbstractCollection">
 
1567
            <!-- We're adding an Add(object) method to allow collection initializers and Xml (soap) serialization to magically work -->
 
1568
            <!-- NOTE Modifiers.Final and MethodAttributes.NewSlot is recognized by AotTypeWrapper.MapModifiers() as a magic combination that generates a non-virtual method -->
 
1569
            <method name="Add" sig="(Ljava.lang.Object;)V" modifiers="public final" attributes="NewSlot">
 
1570
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1571
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
1572
                    <parameter>Never</parameter>
 
1573
                </attribute>
 
1574
                <body>
 
1575
                    <ldarg_0 />
 
1576
                    <ldarg_1 />
 
1577
                    <callvirt class="java.util.AbstractCollection" name="add" sig="(Ljava.lang.Object;)Z" />
 
1578
                    <pop />
 
1579
                    <ret />
 
1580
                </body>
 
1581
            </method>
 
1582
        </class>
 
1583
        <class name="java.util.AbstractMap">
 
1584
            <!-- NOTE the compiler will not magically make all Maps enumerable, so we manually implement IEnumerable here -->
 
1585
            <implements class="cli.System.Collections.IEnumerable" />
 
1586
            <method name="System.Collections.IEnumerable.GetEnumerator" sig="()Lcli.System.Collections.IEnumerator;" modifiers="private" attributes="NewSlot Virtual Final">
 
1587
                <override class="cli.System.Collections.IEnumerable" name="GetEnumerator" />
 
1588
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1589
                <body>
 
1590
                    <ldarg_0 />
 
1591
                    <newobj class="ikvm.lang.MapEnumerator" name="&lt;init&gt;" sig="(Ljava.util.Map;)V" />
 
1592
                    <ret />
 
1593
                </body>
 
1594
            </method>
 
1595
            <!-- We're adding an Add(object,object) method to allow collection initializers to magically work -->
 
1596
            <!-- NOTE Modifiers.Final and MethodAttributes.NewSlot is recognized by AotTypeWrapper.MapModifiers() as a magic combination that generates a non-virtual method -->
 
1597
            <method name="Add" sig="(Ljava.lang.Object;Ljava.lang.Object;)V" modifiers="public final" attributes="NewSlot">
 
1598
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
1599
                <attribute type="System.ComponentModel.EditorBrowsableAttribute" sig="(Lcli.System.ComponentModel.EditorBrowsableState;)V">
 
1600
                    <parameter>Never</parameter>
 
1601
                </attribute>
 
1602
                <body>
 
1603
                    <ldarg_0 />
 
1604
                    <ldarg_1 />
 
1605
                    <ldarg_2 />
 
1606
                    <callvirt class="java.util.AbstractMap" name="put" sig="(Ljava.lang.Object;Ljava.lang.Object;)Ljava.lang.Object;" />
 
1607
                    <pop />
 
1608
                    <ret />
 
1609
                </body>
 
1610
            </method>
 
1611
        </class>
 
1612
        <class name="java.util.concurrent.locks.AbstractQueuedSynchronizer">
 
1613
            <method name="compareAndSetState" sig="(II)Z">
 
1614
                <body>
 
1615
                    <ldarg_0 />
 
1616
                    <ldflda class="java.util.concurrent.locks.AbstractQueuedSynchronizer" name="state" sig="I" />
 
1617
                    <ldarg_2 />
 
1618
                    <ldarg_1 />
 
1619
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
1620
                    <ldarg_1 />
 
1621
                    <ceq />
 
1622
                    <ret />
 
1623
                </body>
 
1624
            </method>
 
1625
            <method name="compareAndSetWaitStatus" sig="(Ljava.util.concurrent.locks.AbstractQueuedSynchronizer$Node;II)Z">
 
1626
                <body>
 
1627
                    <ldarg_0 />
 
1628
                    <ldflda class="java.util.concurrent.locks.AbstractQueuedSynchronizer$Node" name="waitStatus" sig="I" />
 
1629
                    <ldarg_2 />
 
1630
                    <ldarg_1 />
 
1631
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
1632
                    <ldarg_1 />
 
1633
                    <ceq />
 
1634
                    <ret />
 
1635
                </body>
 
1636
            </method>
 
1637
        </class>
 
1638
        <class name="java.util.concurrent.locks.LockSupport">
 
1639
            <method name="cmpxchgParkState" sig="(Ljava.lang.Thread;II)I">
 
1640
                <body>
 
1641
                    <ldarg_0 />
 
1642
                    <ldflda class="java.lang.Thread" name="parkState" sig="I" />
 
1643
                    <ldarg_1 />
 
1644
                    <ldarg_2 />
 
1645
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
1646
                    <ret />
 
1647
                </body>
 
1648
            </method>
 
1649
            <method name="getBlocker" sig="(Ljava.lang.Thread;)Ljava.lang.Object;">
 
1650
                <body>
 
1651
                    <ldarg_0 />
 
1652
                    <volatile />
 
1653
                    <ldfld class="java.lang.Thread" name="parkBlocker" sig="Ljava.lang.Object;" />
 
1654
                    <ret />
 
1655
                </body>
 
1656
            </method>
 
1657
            <method name="setBlocker" sig="(Ljava.lang.Thread;Ljava.lang.Object;)V">
 
1658
                <body>
 
1659
                    <ldarg_0 />
 
1660
                    <ldarg_1 />
 
1661
                    <volatile />
 
1662
                    <stfld class="java.lang.Thread" name="parkBlocker" sig="Ljava.lang.Object;" />
 
1663
                    <call type="System.Threading.Thread" name="MemoryBarrier" sig="" />
 
1664
                    <ret />
 
1665
                </body>
 
1666
            </method>
 
1667
            <method name="getParkLock" sig="(Ljava.lang.Thread;)Ljava.lang.Object;">
 
1668
                <body>
 
1669
                    <ldarg_0 />
 
1670
                    <volatile />
 
1671
                    <ldfld class="java.lang.Thread" name="parkLock" sig="Ljava.lang.Object;" />
 
1672
                    <ret />
 
1673
                </body>
 
1674
            </method>
 
1675
            <method name="setParkLock" sig="(Ljava.lang.Thread;Ljava.lang.Object;)V">
 
1676
                <body>
 
1677
                    <ldarg_0 />
 
1678
                    <ldarg_1 />
 
1679
                    <volatile />
 
1680
                    <stfld class="java.lang.Thread" name="parkLock" sig="Ljava.lang.Object;" />
 
1681
                    <call type="System.Threading.Thread" name="MemoryBarrier" sig="" />
 
1682
                    <ret />
 
1683
                </body>
 
1684
            </method>
 
1685
        </class>
 
1686
        <class name="java.lang.Package">
 
1687
            <method name="getSystemPackage" sig="(Ljava.lang.String;)Ljava.lang.Package;" modifiers="static">
 
1688
                <body>
 
1689
                    <ldsfld class="java.lang.Package" name="pkgs" sig="Ljava.util.Map;" />
 
1690
                    <ldarg_0 />
 
1691
                    <call class="java.lang.LangHelper" name="getSystemPackage" sig="(Ljava.util.Map;Ljava.lang.String;)Ljava.lang.Package;" />
 
1692
                    <ret />
 
1693
                </body>
 
1694
            </method>
 
1695
            <method name="getSystemPackages" sig="()[Ljava.lang.Package;" modifiers="static">
 
1696
                <body>
 
1697
                    <ldsfld class="java.lang.Package" name="pkgs" sig="Ljava.util.Map;" />
 
1698
                    <call class="java.lang.LangHelper" name="getSystemPackages" sig="(Ljava.util.Map;)[Ljava.lang.Package;" />
 
1699
                    <ret />
 
1700
                </body>
 
1701
            </method>
 
1702
        </class>
 
1703
        <!-- This is where the "native" helper methods start -->
 
1704
        <class name="ikvm.lang.CIL">
 
1705
            <method name="unbox_byte" sig="(Ljava.lang.Object;)B">
 
1706
                <body>
 
1707
                    <ldarg_0 />
 
1708
                    <unbox type="System.Byte" />
 
1709
                    <ldind_i1 />
 
1710
                    <ret />
 
1711
                </body>
 
1712
            </method>
 
1713
            <method name="unbox_boolean" sig="(Ljava.lang.Object;)Z">
 
1714
                <body>
 
1715
                    <ldarg_0 />
 
1716
                    <unbox type="System.Boolean" />
 
1717
                    <ldind_i1 />
 
1718
                    <ret />
 
1719
                </body>
 
1720
            </method>
 
1721
            <method name="unbox_short" sig="(Ljava.lang.Object;)S">
 
1722
                <body>
 
1723
                    <ldarg_0 />
 
1724
                    <unbox type="System.Int16" />
 
1725
                    <ldind_i2 />
 
1726
                    <ret />
 
1727
                </body>
 
1728
            </method>
 
1729
            <method name="unbox_char" sig="(Ljava.lang.Object;)C">
 
1730
                <body>
 
1731
                    <ldarg_0 />
 
1732
                    <unbox type="System.Char" />
 
1733
                    <ldind_i2 />
 
1734
                    <ret />
 
1735
                </body>
 
1736
            </method>
 
1737
            <method name="unbox_int" sig="(Ljava.lang.Object;)I">
 
1738
                <body>
 
1739
                    <ldarg_0 />
 
1740
                    <unbox type="System.Int32" />
 
1741
                    <ldind_i4 />
 
1742
                    <ret />
 
1743
                </body>
 
1744
            </method>
 
1745
            <method name="unbox_float" sig="(Ljava.lang.Object;)F">
 
1746
                <body>
 
1747
                    <ldarg_0 />
 
1748
                    <unbox type="System.Single" />
 
1749
                    <ldind_r4 />
 
1750
                    <ret />
 
1751
                </body>
 
1752
            </method>
 
1753
            <method name="unbox_long" sig="(Ljava.lang.Object;)J">
 
1754
                <body>
 
1755
                    <ldarg_0 />
 
1756
                    <unbox type="System.Int64" />
 
1757
                    <ldind_i8 />
 
1758
                    <ret />
 
1759
                </body>
 
1760
            </method>
 
1761
            <method name="unbox_double" sig="(Ljava.lang.Object;)D">
 
1762
                <body>
 
1763
                    <ldarg_0 />
 
1764
                    <unbox type="System.Double" />
 
1765
                    <ldind_r8 />
 
1766
                    <ret />
 
1767
                </body>
 
1768
            </method>
 
1769
            <method name="box_byte" sig="(B)Lcli.System.Byte;">
 
1770
                <body>
 
1771
                    <ldarg_0 />
 
1772
                    <ret />
 
1773
                </body>
 
1774
            </method>
 
1775
            <method name="box_boolean" sig="(Z)Lcli.System.Boolean;">
 
1776
                <body>
 
1777
                    <ldarg_0 />
 
1778
                    <ret />
 
1779
                </body>
 
1780
            </method>
 
1781
            <method name="box_short" sig="(S)Lcli.System.Int16;">
 
1782
                <body>
 
1783
                    <ldarg_0 />
 
1784
                    <ret />
 
1785
                </body>
 
1786
            </method>
 
1787
            <method name="box_char" sig="(C)Lcli.System.Char;">
 
1788
                <body>
 
1789
                    <ldarg_0 />
 
1790
                    <ret />
 
1791
                </body>
 
1792
            </method>
 
1793
            <method name="box_int" sig="(I)Lcli.System.Int32;">
 
1794
                <body>
 
1795
                    <ldarg_0 />
 
1796
                    <ret />
 
1797
                </body>
 
1798
            </method>
 
1799
            <method name="box_float" sig="(F)Lcli.System.Single;">
 
1800
                <body>
 
1801
                    <ldarg_0 />
 
1802
                    <ret />
 
1803
                </body>
 
1804
            </method>
 
1805
            <method name="box_long" sig="(J)Lcli.System.Int64;">
 
1806
                <body>
 
1807
                    <ldarg_0 />
 
1808
                    <ret />
 
1809
                </body>
 
1810
            </method>
 
1811
            <method name="box_double" sig="(D)Lcli.System.Double;">
 
1812
                <body>
 
1813
                    <ldarg_0 />
 
1814
                    <ret />
 
1815
                </body>
 
1816
            </method>
 
1817
            <method name="box_sbyte" sig="(B)Lcli.System.SByte;">
 
1818
                <body>
 
1819
                    <ldarg_0 />
 
1820
                    <ret />
 
1821
                </body>
 
1822
            </method>
 
1823
            <method name="box_ushort" sig="(S)Lcli.System.UInt16;">
 
1824
                <body>
 
1825
                    <ldarg_0 />
 
1826
                    <ret />
 
1827
                </body>
 
1828
            </method>
 
1829
            <method name="box_uint" sig="(I)Lcli.System.UInt32;">
 
1830
                <body>
 
1831
                    <ldarg_0 />
 
1832
                    <ret />
 
1833
                </body>
 
1834
            </method>
 
1835
            <method name="box_ulong" sig="(J)Lcli.System.UInt64;">
 
1836
                <body>
 
1837
                    <ldarg_0 />
 
1838
                    <ret />
 
1839
                </body>
 
1840
            </method>
 
1841
            <method name="unbox_sbyte" sig="(Lcli.System.SByte;)B">
 
1842
                <body>
 
1843
                    <ldarg_0 />
 
1844
                    <ret />
 
1845
                </body>
 
1846
            </method>
 
1847
            <method name="unbox_ushort" sig="(Lcli.System.UInt16;)S">
 
1848
                <body>
 
1849
                    <ldarg_0 />
 
1850
                    <ret />
 
1851
                </body>
 
1852
            </method>
 
1853
            <method name="unbox_uint" sig="(Lcli.System.UInt32;)I">
 
1854
                <body>
 
1855
                    <ldarg_0 />
 
1856
                    <ret />
 
1857
                </body>
 
1858
            </method>
 
1859
            <method name="unbox_ulong" sig="(Lcli.System.UInt64;)J">
 
1860
                <body>
 
1861
                    <ldarg_0 />
 
1862
                    <ret />
 
1863
                </body>
 
1864
            </method>
 
1865
        </class>
 
1866
        <class name="sun.misc.Launcher">
 
1867
            <method name="&lt;init&gt;" sig="()V">
 
1868
                <replace-method-call class="sun.misc.Launcher$ExtClassLoader" name="getExtClassLoader" sig="()Lsun.misc.Launcher$ExtClassLoader;">
 
1869
                    <code>
 
1870
                        <call class="sun.misc.MiscHelper" name="getExtClassLoader" sig="()Lsun.misc.Launcher$ExtClassLoader;" />
 
1871
                    </code>
 
1872
                </replace-method-call>
 
1873
                <replace-method-call class="sun.misc.Launcher$AppClassLoader" name="getAppClassLoader" sig="(Ljava.lang.ClassLoader;)Ljava.lang.ClassLoader;">
 
1874
                    <code>
 
1875
                        <call class="sun.misc.MiscHelper" name="getAppClassLoader" sig="(Ljava.lang.ClassLoader;)Ljava.lang.ClassLoader;" />
 
1876
                    </code>
 
1877
                </replace-method-call>
 
1878
                <replace-method-call class="java.lang.Thread" name="setContextClassLoader" sig="(Ljava.lang.ClassLoader;)V">
 
1879
                    <code>
 
1880
                        <!--
 
1881
                        The JDK uses setContextClassLoader() here, but we don't want to overwrite the context class loader if it has already been set.
 
1882
                        -->
 
1883
                        <callvirt class="java.lang.Thread" name="initContextClassLoader" sig="(Ljava.lang.ClassLoader;)V" />
 
1884
                    </code>
 
1885
                </replace-method-call>
 
1886
            </method>
 
1887
        </class>
 
1888
        <class name="java.util.concurrent.atomic.AtomicReference">
 
1889
            <method name="compareAndSet" sig="(Ljava.lang.Object;Ljava.lang.Object;)Z">
 
1890
                <body>
 
1891
                    <ldarg_0 />
 
1892
                    <ldflda class="java.util.concurrent.atomic.AtomicReference" name="value" sig="Ljava.lang.Object;" />
 
1893
                    <ldarg_2 />
 
1894
                    <ldarg_1 />
 
1895
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Object&amp;;System.Object;System.Object" />
 
1896
                    <ldarg_1 />
 
1897
                    <ceq />
 
1898
                    <ret />
 
1899
                </body>
 
1900
            </method>
 
1901
        </class>
 
1902
        <class name="java.util.concurrent.atomic.AtomicReferenceArray">
 
1903
            <method name="get" sig="(I)Ljava.lang.Object;">
 
1904
                <body>
 
1905
                    <ldarg_0 />
 
1906
                    <ldfld class="java.util.concurrent.atomic.AtomicReferenceArray" name="array" sig="[Ljava.lang.Object;" />
 
1907
                    <ldarg_1 />
 
1908
                    <ldelema sig="Ljava.lang.Object;" />
 
1909
                    <volatile />
 
1910
                    <ldind_ref />
 
1911
                    <ret />
 
1912
                </body>
 
1913
            </method>
 
1914
            <method name="set" sig="(ILjava.lang.Object;)V">
 
1915
                <body>
 
1916
                    <ldarg_0 />
 
1917
                    <ldfld class="java.util.concurrent.atomic.AtomicReferenceArray" name="array" sig="[Ljava.lang.Object;" />
 
1918
                    <ldarg_1 />
 
1919
                    <ldelema sig="Ljava.lang.Object;" />
 
1920
                    <ldarg_2 />
 
1921
                    <volatile />
 
1922
                    <stind_ref />
 
1923
                    <call type="System.Threading.Thread" name="MemoryBarrier" sig="" />
 
1924
                    <ret />
 
1925
                </body>
 
1926
            </method>
 
1927
            <method name="compareAndSet" sig="(ILjava.lang.Object;Ljava.lang.Object;)Z">
 
1928
                <body>
 
1929
                    <ldarg_0 />
 
1930
                    <ldfld class="java.util.concurrent.atomic.AtomicReferenceArray" name="array" sig="[Ljava.lang.Object;" />
 
1931
                    <ldarg_1 />
 
1932
                    <ldelema sig="Ljava.lang.Object;" />
 
1933
                    <ldarg_3 />
 
1934
                    <ldarg_2 />
 
1935
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Object&amp;;System.Object;System.Object" />
 
1936
                    <ldarg_2 />
 
1937
                    <ceq />
 
1938
                    <ret />
 
1939
                </body>
 
1940
            </method>
 
1941
        </class>
 
1942
        <class name="java.util.concurrent.atomic.AtomicBoolean">
 
1943
            <method name="compareAndSwapInt" sig="(II)Z">
 
1944
                <body>
 
1945
                    <ldarg_0 />
 
1946
                    <ldflda class="java.util.concurrent.atomic.AtomicBoolean" name="value" sig="I" />
 
1947
                    <ldarg_2 />
 
1948
                    <ldarg_1 />
 
1949
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
1950
                    <ldarg_1 />
 
1951
                    <ceq />
 
1952
                    <ret />
 
1953
                </body>
 
1954
            </method>
 
1955
        </class>
 
1956
        <class name="java.util.concurrent.atomic.AtomicInteger">
 
1957
            <method name="getAndSet" sig="(I)I">
 
1958
                <body>
 
1959
                    <ldarg_0 />
 
1960
                    <ldflda class="java.util.concurrent.atomic.AtomicInteger" name="value" sig="I" />
 
1961
                    <ldarg_1 />
 
1962
                    <call type="System.Threading.Interlocked" name="Exchange" sig="System.Int32&amp;;System.Int32" />
 
1963
                    <ret />
 
1964
                </body>
 
1965
            </method>
 
1966
            <method name="compareAndSet" sig="(II)Z">
 
1967
                <body>
 
1968
                    <ldarg_0 />
 
1969
                    <ldflda class="java.util.concurrent.atomic.AtomicInteger" name="value" sig="I" />
 
1970
                    <ldarg_2 />
 
1971
                    <ldarg_1 />
 
1972
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
1973
                    <ldarg_1 />
 
1974
                    <ceq />
 
1975
                    <ret />
 
1976
                </body>
 
1977
            </method>
 
1978
            <method name="incrementAndGet" sig="()I">
 
1979
                <body>
 
1980
                    <ldarg_0 />
 
1981
                    <ldflda class="java.util.concurrent.atomic.AtomicInteger" name="value" sig="I" />
 
1982
                    <call type="System.Threading.Interlocked" name="Increment" sig="System.Int32&amp;" />
 
1983
                    <ret />
 
1984
                </body>
 
1985
            </method>
 
1986
            <method name="decrementAndGet" sig="()I">
 
1987
                <body>
 
1988
                    <ldarg_0 />
 
1989
                    <ldflda class="java.util.concurrent.atomic.AtomicInteger" name="value" sig="I" />
 
1990
                    <call type="System.Threading.Interlocked" name="Decrement" sig="System.Int32&amp;" />
 
1991
                    <ret />
 
1992
                </body>
 
1993
            </method>
 
1994
            <method name="addAndGet" sig="(I)I">
 
1995
                <body>
 
1996
                    <ldarg_0 />
 
1997
                    <ldflda class="java.util.concurrent.atomic.AtomicInteger" name="value" sig="I" />
 
1998
                    <ldarg_1 />
 
1999
                    <call type="System.Threading.Interlocked" name="Add" sig="System.Int32&amp;;System.Int32" />
 
2000
                    <ret />
 
2001
                </body>
 
2002
            </method>
 
2003
        </class>
 
2004
        <class name="java.util.concurrent.atomic.AtomicIntegerArray">
 
2005
            <method name="get" sig="(I)I">
 
2006
                <body>
 
2007
                    <ldarg_0 />
 
2008
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2009
                    <ldarg_1 />
 
2010
                    <ldelema sig="I" />
 
2011
                    <volatile />
 
2012
                    <ldind_i4 />
 
2013
                    <ret />
 
2014
                </body>
 
2015
            </method>
 
2016
            <method name="set" sig="(II)V">
 
2017
                <body>
 
2018
                    <ldarg_0 />
 
2019
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2020
                    <ldarg_1 />
 
2021
                    <ldelema sig="I" />
 
2022
                    <ldarg_2 />
 
2023
                    <volatile />
 
2024
                    <stind_i4 />
 
2025
                    <call type="System.Threading.Thread" name="MemoryBarrier" sig="" />
 
2026
                    <ret />
 
2027
                </body>
 
2028
            </method>
 
2029
            <method name="getAndSet" sig="(II)I">
 
2030
                <body>
 
2031
                    <ldarg_0 />
 
2032
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2033
                    <ldarg_1 />
 
2034
                    <ldelema sig="I" />
 
2035
                    <ldarg_2 />
 
2036
                    <call type="System.Threading.Interlocked" name="Exchange" sig="System.Int32&amp;;System.Int32" />
 
2037
                    <ret />
 
2038
                </body>
 
2039
            </method>
 
2040
            <method name="compareAndSet" sig="(III)Z">
 
2041
                <body>
 
2042
                    <ldarg_0 />
 
2043
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2044
                    <ldarg_1 />
 
2045
                    <ldelema sig="I" />
 
2046
                    <ldarg_3 />
 
2047
                    <ldarg_2 />
 
2048
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int32&amp;;System.Int32;System.Int32" />
 
2049
                    <ldarg_2 />
 
2050
                    <ceq />
 
2051
                    <ret />
 
2052
                </body>
 
2053
            </method>
 
2054
            <method name="incrementAndGet" sig="(I)I">
 
2055
                <body>
 
2056
                    <ldarg_0 />
 
2057
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2058
                    <ldarg_1 />
 
2059
                    <ldelema sig="I" />
 
2060
                    <call type="System.Threading.Interlocked" name="Increment" sig="System.Int32&amp;" />
 
2061
                    <ret />
 
2062
                </body>
 
2063
            </method>
 
2064
            <method name="decrementAndGet" sig="(I)I">
 
2065
                <body>
 
2066
                    <ldarg_0 />
 
2067
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2068
                    <ldarg_1 />
 
2069
                    <ldelema sig="I" />
 
2070
                    <call type="System.Threading.Interlocked" name="Decrement" sig="System.Int32&amp;" />
 
2071
                    <ret />
 
2072
                </body>
 
2073
            </method>
 
2074
            <method name="addAndGet" sig="(II)I">
 
2075
                <body>
 
2076
                    <ldarg_0 />
 
2077
                    <ldfld class="java.util.concurrent.atomic.AtomicIntegerArray" name="array" sig="[I" />
 
2078
                    <ldarg_1 />
 
2079
                    <ldelema sig="I" />
 
2080
                    <ldarg_2 />
 
2081
                    <call type="System.Threading.Interlocked" name="Add" sig="System.Int32&amp;;System.Int32" />
 
2082
                    <ret />
 
2083
                </body>
 
2084
            </method>
 
2085
        </class>
 
2086
        <class name="java.util.concurrent.atomic.AtomicLong">
 
2087
            <method name="getAndSet" sig="(J)J">
 
2088
                <body>
 
2089
                    <ldarg_0 />
 
2090
                    <ldflda class="java.util.concurrent.atomic.AtomicLong" name="value" sig="J" />
 
2091
                    <ldarg_1 />
 
2092
                    <call type="System.Threading.Interlocked" name="Exchange" sig="System.Int64&amp;;System.Int64" />
 
2093
                    <ret />
 
2094
                </body>
 
2095
            </method>
 
2096
            <method name="compareAndSet" sig="(JJ)Z">
 
2097
                <body>
 
2098
                    <ldarg_0 />
 
2099
                    <ldflda class="java.util.concurrent.atomic.AtomicLong" name="value" sig="J" />
 
2100
                    <ldarg_2 />
 
2101
                    <ldarg_1 />
 
2102
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int64&amp;;System.Int64;System.Int64" />
 
2103
                    <ldarg_1 />
 
2104
                    <ceq />
 
2105
                    <ret />
 
2106
                </body>
 
2107
            </method>
 
2108
            <method name="incrementAndGet" sig="()J">
 
2109
                <body>
 
2110
                    <ldarg_0 />
 
2111
                    <ldflda class="java.util.concurrent.atomic.AtomicLong" name="value" sig="J" />
 
2112
                    <call type="System.Threading.Interlocked" name="Increment" sig="System.Int64&amp;" />
 
2113
                    <ret />
 
2114
                </body>
 
2115
            </method>
 
2116
            <method name="decrementAndGet" sig="()J">
 
2117
                <body>
 
2118
                    <ldarg_0 />
 
2119
                    <ldflda class="java.util.concurrent.atomic.AtomicLong" name="value" sig="J" />
 
2120
                    <call type="System.Threading.Interlocked" name="Decrement" sig="System.Int64&amp;" />
 
2121
                    <ret />
 
2122
                </body>
 
2123
            </method>
 
2124
            <method name="addAndGet" sig="(J)J">
 
2125
                <body>
 
2126
                    <ldarg_0 />
 
2127
                    <ldflda class="java.util.concurrent.atomic.AtomicLong" name="value" sig="J" />
 
2128
                    <ldarg_1 />
 
2129
                    <call type="System.Threading.Interlocked" name="Add" sig="System.Int64&amp;;System.Int64" />
 
2130
                    <ret />
 
2131
                </body>
 
2132
            </method>
 
2133
        </class>
 
2134
        <class name="java.util.concurrent.atomic.AtomicLongArray">
 
2135
            <method name="get" sig="(I)J">
 
2136
                <body>
 
2137
                    <ldarg_0 />
 
2138
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2139
                    <ldarg_1 />
 
2140
                    <ldelema sig="J" />
 
2141
                    <volatile />
 
2142
                    <ldind_i8 />
 
2143
                    <ret />
 
2144
                </body>
 
2145
            </method>
 
2146
            <method name="set" sig="(IJ)V">
 
2147
                <body>
 
2148
                    <ldarg_0 />
 
2149
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2150
                    <ldarg_1 />
 
2151
                    <ldelema sig="J" />
 
2152
                    <ldarg_2 />
 
2153
                    <volatile />
 
2154
                    <stind_i8 />
 
2155
                    <call type="System.Threading.Thread" name="MemoryBarrier" sig="" />
 
2156
                    <ret />
 
2157
                </body>
 
2158
            </method>
 
2159
            <method name="getAndSet" sig="(IJ)J">
 
2160
                <body>
 
2161
                    <ldarg_0 />
 
2162
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2163
                    <ldarg_1 />
 
2164
                    <ldelema sig="J" />
 
2165
                    <ldarg_2 />
 
2166
                    <call type="System.Threading.Interlocked" name="Exchange" sig="System.Int64&amp;;System.Int64" />
 
2167
                    <ret />
 
2168
                </body>
 
2169
            </method>
 
2170
            <method name="compareAndSet" sig="(IJJ)Z">
 
2171
                <body>
 
2172
                    <ldarg_0 />
 
2173
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2174
                    <ldarg_1 />
 
2175
                    <ldelema sig="J" />
 
2176
                    <ldarg_3 />
 
2177
                    <ldarg_2 />
 
2178
                    <call type="System.Threading.Interlocked" name="CompareExchange" sig="System.Int64&amp;;System.Int64;System.Int64" />
 
2179
                    <ldarg_2 />
 
2180
                    <ceq />
 
2181
                    <ret />
 
2182
                </body>
 
2183
            </method>
 
2184
            <method name="incrementAndGet" sig="(I)J">
 
2185
                <body>
 
2186
                    <ldarg_0 />
 
2187
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2188
                    <ldarg_1 />
 
2189
                    <ldelema sig="J" />
 
2190
                    <call type="System.Threading.Interlocked" name="Increment" sig="System.Int64&amp;" />
 
2191
                    <ret />
 
2192
                </body>
 
2193
            </method>
 
2194
            <method name="decrementAndGet" sig="(I)J">
 
2195
                <body>
 
2196
                    <ldarg_0 />
 
2197
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2198
                    <ldarg_1 />
 
2199
                    <ldelema sig="J" />
 
2200
                    <call type="System.Threading.Interlocked" name="Decrement" sig="System.Int64&amp;" />
 
2201
                    <ret />
 
2202
                </body>
 
2203
            </method>
 
2204
            <method name="addAndGet" sig="(IJ)J">
 
2205
                <body>
 
2206
                    <ldarg_0 />
 
2207
                    <ldfld class="java.util.concurrent.atomic.AtomicLongArray" name="array" sig="[J" />
 
2208
                    <ldarg_1 />
 
2209
                    <ldelema sig="J" />
 
2210
                    <ldarg_2 />
 
2211
                    <call type="System.Threading.Interlocked" name="Add" sig="System.Int64&amp;;System.Int64" />
 
2212
                    <ret />
 
2213
                </body>
 
2214
            </method>
 
2215
        </class>
 
2216
        <class name="java.lang.Byte">
 
2217
            <implements class="cli.System.IFormattable">
 
2218
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2219
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Byte;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2220
                </method>
 
2221
            </implements>
 
2222
        </class>
 
2223
        <class name="java.lang.Short">
 
2224
            <implements class="cli.System.IFormattable">
 
2225
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2226
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Short;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2227
                </method>
 
2228
            </implements>
 
2229
        </class>
 
2230
        <class name="java.lang.Integer">
 
2231
            <implements class="cli.System.IFormattable">
 
2232
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2233
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Integer;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2234
                </method>
 
2235
            </implements>
 
2236
        </class>
 
2237
        <class name="java.lang.Long">
 
2238
            <implements class="cli.System.IFormattable">
 
2239
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2240
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Long;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2241
                </method>
 
2242
            </implements>
 
2243
        </class>
 
2244
        <class name="java.lang.Float">
 
2245
            <implements class="cli.System.IFormattable">
 
2246
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2247
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Float;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2248
                </method>
 
2249
            </implements>
 
2250
        </class>
 
2251
        <class name="java.lang.Double">
 
2252
            <implements class="cli.System.IFormattable">
 
2253
                <method name="ToString" sig="(Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;">
 
2254
                    <redirect class="ikvm.internal.Formatter" type="static" name="ToString" sig="(Ljava.lang.Double;Ljava.lang.String;Lcli.System.IFormatProvider;)Ljava.lang.String;" />
 
2255
                </method>
 
2256
            </implements>
 
2257
        </class>
 
2258
        <class name="java.nio.DirectByteBuffer">
 
2259
            <!-- add a constructor accessor for JNI -->
 
2260
            <method name="__new" sig="(JI)Ljava.nio.DirectByteBuffer;" modifiers="static">
 
2261
                <body>
 
2262
                    <ldarg_0 />
 
2263
                    <ldarg_1 />
 
2264
                    <newobj class="java.nio.DirectByteBuffer" name="&lt;init&gt;" sig="(JI)V" />
 
2265
                    <ret />
 
2266
                </body>
 
2267
            </method>
 
2268
            <constructor sig="(I)V">
 
2269
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2270
            </constructor>
 
2271
            <method name="_get" sig="(I)B">
 
2272
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2273
            </method>
 
2274
            <method name="_put" sig="(IB)V">
 
2275
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2276
            </method>
 
2277
            <method name="get" sig="()B">
 
2278
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2279
            </method>
 
2280
            <method name="get" sig="(I)B">
 
2281
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2282
            </method>
 
2283
            <method name="get" sig="([BII)Ljava.nio.ByteBuffer;">
 
2284
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2285
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2286
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2287
            </method>
 
2288
            <method name="getChar" sig="(J)C">
 
2289
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2290
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2291
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2292
            </method>
 
2293
            <method name="putChar" sig="(JC)Ljava.nio.ByteBuffer;">
 
2294
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2295
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2296
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2297
            </method>
 
2298
            <method name="getShort" sig="(J)S">
 
2299
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2300
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2301
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2302
            </method>
 
2303
            <method name="putShort" sig="(JS)Ljava.nio.ByteBuffer;">
 
2304
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2305
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2306
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2307
            </method>
 
2308
            <method name="getInt" sig="(J)I">
 
2309
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2310
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2311
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2312
            </method>
 
2313
            <method name="putInt" sig="(JI)Ljava.nio.ByteBuffer;">
 
2314
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2315
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2316
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2317
            </method>
 
2318
            <method name="getLong" sig="(J)J">
 
2319
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2320
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2321
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2322
            </method>
 
2323
            <method name="putLong" sig="(JJ)Ljava.nio.ByteBuffer;">
 
2324
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2325
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2326
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2327
            </method>
 
2328
            <method name="getFloat" sig="(J)F">
 
2329
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2330
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2331
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2332
            </method>
 
2333
            <method name="putFloat" sig="(JF)Ljava.nio.ByteBuffer;">
 
2334
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2335
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2336
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2337
            </method>
 
2338
            <method name="getDouble" sig="(J)D">
 
2339
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2340
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2341
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2342
            </method>
 
2343
            <method name="putDouble" sig="(JD)Ljava.nio.ByteBuffer;">
 
2344
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2345
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2346
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2347
            </method>
 
2348
            <method name="put" sig="(Ljava.nio.ByteBuffer;)Ljava.nio.ByteBuffer;">
 
2349
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2350
            </method>
 
2351
            <method name="put" sig="(B)Ljava.nio.ByteBuffer;">
 
2352
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2353
            </method>
 
2354
            <method name="put" sig="(IB)Ljava.nio.ByteBuffer;">
 
2355
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2356
            </method>
 
2357
            <method name="put" sig="([BII)Ljava.nio.ByteBuffer;">
 
2358
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2359
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2360
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2361
            </method>
 
2362
            <method name="compact" sig="()Ljava.nio.ByteBuffer;">
 
2363
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2364
            </method>
 
2365
        </class>
 
2366
        <class name="java.nio.DirectByteBuffer$Deallocator">
 
2367
            <method name="run" sig="()V">
 
2368
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2369
            </method>
 
2370
        </class>
 
2371
        <class name="java.nio.DirectByteBufferR">
 
2372
            <method name="_get" sig="(I)B">
 
2373
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2374
            </method>
 
2375
        </class>
 
2376
        <class name="java.nio.DirectCharBufferS">
 
2377
            <method name="get" sig="()C">
 
2378
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2379
            </method>
 
2380
            <method name="get" sig="(I)C">
 
2381
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2382
            </method>
 
2383
            <method name="get" sig="([CII)Ljava.nio.CharBuffer;">
 
2384
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2385
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2386
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2387
            </method>
 
2388
            <method name="put" sig="(Ljava.nio.CharBuffer;)Ljava.nio.CharBuffer;">
 
2389
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2390
            </method>
 
2391
            <method name="put" sig="(C)Ljava.nio.CharBuffer;">
 
2392
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2393
            </method>
 
2394
            <method name="put" sig="(IC)Ljava.nio.CharBuffer;">
 
2395
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2396
            </method>
 
2397
            <method name="put" sig="([CII)Ljava.nio.CharBuffer;">
 
2398
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2399
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2400
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2401
            </method>
 
2402
            <method name="compact" sig="()Ljava.nio.CharBuffer;">
 
2403
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2404
            </method>
 
2405
        </class>
 
2406
        <class name="java.nio.DirectCharBufferU">
 
2407
            <method name="get" sig="()C">
 
2408
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2409
            </method>
 
2410
            <method name="get" sig="(I)C">
 
2411
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2412
            </method>
 
2413
            <method name="get" sig="([CII)Ljava.nio.CharBuffer;">
 
2414
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2415
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2416
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2417
            </method>
 
2418
            <method name="put" sig="(Ljava.nio.CharBuffer;)Ljava.nio.CharBuffer;">
 
2419
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2420
            </method>
 
2421
            <method name="put" sig="(C)Ljava.nio.CharBuffer;">
 
2422
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2423
            </method>
 
2424
            <method name="put" sig="(IC)Ljava.nio.CharBuffer;">
 
2425
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2426
            </method>
 
2427
            <method name="put" sig="([CII)Ljava.nio.CharBuffer;">
 
2428
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2429
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2430
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2431
            </method>
 
2432
            <method name="compact" sig="()Ljava.nio.CharBuffer;">
 
2433
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2434
            </method>
 
2435
        </class>
 
2436
        <class name="java.nio.DirectDoubleBufferS">
 
2437
            <method name="get" sig="()D">
 
2438
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2439
            </method>
 
2440
            <method name="get" sig="(I)D">
 
2441
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2442
            </method>
 
2443
            <method name="get" sig="([DII)Ljava.nio.DoubleBuffer;">
 
2444
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2445
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2446
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2447
            </method>
 
2448
            <method name="put" sig="(Ljava.nio.DoubleBuffer;)Ljava.nio.DoubleBuffer;">
 
2449
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2450
            </method>
 
2451
            <method name="put" sig="(D)Ljava.nio.DoubleBuffer;">
 
2452
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2453
            </method>
 
2454
            <method name="put" sig="(ID)Ljava.nio.DoubleBuffer;">
 
2455
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2456
            </method>
 
2457
            <method name="put" sig="([DII)Ljava.nio.DoubleBuffer;">
 
2458
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2459
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2460
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2461
            </method>
 
2462
            <method name="compact" sig="()Ljava.nio.DoubleBuffer;">
 
2463
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2464
            </method>
 
2465
        </class>
 
2466
        <class name="java.nio.DirectDoubleBufferU">
 
2467
            <method name="get" sig="()D">
 
2468
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2469
            </method>
 
2470
            <method name="get" sig="(I)D">
 
2471
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2472
            </method>
 
2473
            <method name="get" sig="([DII)Ljava.nio.DoubleBuffer;">
 
2474
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2475
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2476
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2477
            </method>
 
2478
            <method name="put" sig="(Ljava.nio.DoubleBuffer;)Ljava.nio.DoubleBuffer;">
 
2479
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2480
            </method>
 
2481
            <method name="put" sig="(D)Ljava.nio.DoubleBuffer;">
 
2482
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2483
            </method>
 
2484
            <method name="put" sig="(ID)Ljava.nio.DoubleBuffer;">
 
2485
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2486
            </method>
 
2487
            <method name="put" sig="([DII)Ljava.nio.DoubleBuffer;">
 
2488
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2489
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2490
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2491
            </method>
 
2492
            <method name="compact" sig="()Ljava.nio.DoubleBuffer;">
 
2493
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2494
            </method>
 
2495
        </class>
 
2496
        <class name="java.nio.DirectFloatBufferS">
 
2497
            <method name="get" sig="()F">
 
2498
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2499
            </method>
 
2500
            <method name="get" sig="(I)F">
 
2501
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2502
            </method>
 
2503
            <method name="get" sig="([FII)Ljava.nio.FloatBuffer;">
 
2504
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2505
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2506
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2507
            </method>
 
2508
            <method name="put" sig="(Ljava.nio.FloatBuffer;)Ljava.nio.FloatBuffer;">
 
2509
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2510
            </method>
 
2511
            <method name="put" sig="(F)Ljava.nio.FloatBuffer;">
 
2512
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2513
            </method>
 
2514
            <method name="put" sig="(IF)Ljava.nio.FloatBuffer;">
 
2515
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2516
            </method>
 
2517
            <method name="put" sig="([FII)Ljava.nio.FloatBuffer;">
 
2518
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2519
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2520
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2521
            </method>
 
2522
            <method name="compact" sig="()Ljava.nio.FloatBuffer;">
 
2523
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2524
            </method>
 
2525
        </class>
 
2526
        <class name="java.nio.DirectFloatBufferU">
 
2527
            <method name="get" sig="()F">
 
2528
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2529
            </method>
 
2530
            <method name="get" sig="(I)F">
 
2531
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2532
            </method>
 
2533
            <method name="get" sig="([FII)Ljava.nio.FloatBuffer;">
 
2534
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2535
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2536
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2537
            </method>
 
2538
            <method name="put" sig="(Ljava.nio.FloatBuffer;)Ljava.nio.FloatBuffer;">
 
2539
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2540
            </method>
 
2541
            <method name="put" sig="(F)Ljava.nio.FloatBuffer;">
 
2542
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2543
            </method>
 
2544
            <method name="put" sig="(IF)Ljava.nio.FloatBuffer;">
 
2545
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2546
            </method>
 
2547
            <method name="put" sig="([FII)Ljava.nio.FloatBuffer;">
 
2548
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2549
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2550
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2551
            </method>
 
2552
            <method name="compact" sig="()Ljava.nio.FloatBuffer;">
 
2553
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2554
            </method>
 
2555
        </class>
 
2556
        <class name="java.nio.DirectIntBufferS">
 
2557
            <method name="get" sig="()I">
 
2558
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2559
            </method>
 
2560
            <method name="get" sig="(I)I">
 
2561
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2562
            </method>
 
2563
            <method name="get" sig="([III)Ljava.nio.IntBuffer;">
 
2564
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2565
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2566
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2567
            </method>
 
2568
            <method name="put" sig="(Ljava.nio.IntBuffer;)Ljava.nio.IntBuffer;">
 
2569
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2570
            </method>
 
2571
            <method name="put" sig="(I)Ljava.nio.IntBuffer;">
 
2572
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2573
            </method>
 
2574
            <method name="put" sig="(II)Ljava.nio.IntBuffer;">
 
2575
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2576
            </method>
 
2577
            <method name="put" sig="([III)Ljava.nio.IntBuffer;">
 
2578
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2579
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2580
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2581
            </method>
 
2582
            <method name="compact" sig="()Ljava.nio.IntBuffer;">
 
2583
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2584
            </method>
 
2585
        </class>
 
2586
        <class name="java.nio.DirectIntBufferU">
 
2587
            <method name="get" sig="()I">
 
2588
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2589
            </method>
 
2590
            <method name="get" sig="(I)I">
 
2591
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2592
            </method>
 
2593
            <method name="get" sig="([III)Ljava.nio.IntBuffer;">
 
2594
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2595
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2596
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2597
            </method>
 
2598
            <method name="put" sig="(Ljava.nio.IntBuffer;)Ljava.nio.IntBuffer;">
 
2599
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2600
            </method>
 
2601
            <method name="put" sig="(I)Ljava.nio.IntBuffer;">
 
2602
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2603
            </method>
 
2604
            <method name="put" sig="(II)Ljava.nio.IntBuffer;">
 
2605
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2606
            </method>
 
2607
            <method name="put" sig="([III)Ljava.nio.IntBuffer;">
 
2608
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2609
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2610
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2611
            </method>
 
2612
            <method name="compact" sig="()Ljava.nio.IntBuffer;">
 
2613
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2614
            </method>
 
2615
        </class>
 
2616
        <class name="java.nio.DirectLongBufferS">
 
2617
            <method name="get" sig="()J">
 
2618
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2619
            </method>
 
2620
            <method name="get" sig="(I)J">
 
2621
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2622
            </method>
 
2623
            <method name="get" sig="([JII)Ljava.nio.LongBuffer;">
 
2624
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2625
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2626
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2627
            </method>
 
2628
            <method name="put" sig="(Ljava.nio.LongBuffer;)Ljava.nio.LongBuffer;">
 
2629
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2630
            </method>
 
2631
            <method name="put" sig="(J)Ljava.nio.LongBuffer;">
 
2632
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2633
            </method>
 
2634
            <method name="put" sig="(IJ)Ljava.nio.LongBuffer;">
 
2635
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2636
            </method>
 
2637
            <method name="put" sig="([JII)Ljava.nio.LongBuffer;">
 
2638
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2639
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2640
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2641
            </method>
 
2642
            <method name="compact" sig="()Ljava.nio.LongBuffer;">
 
2643
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2644
            </method>
 
2645
        </class>
 
2646
        <class name="java.nio.DirectLongBufferU">
 
2647
            <method name="get" sig="()J">
 
2648
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2649
            </method>
 
2650
            <method name="get" sig="(I)J">
 
2651
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2652
            </method>
 
2653
            <method name="get" sig="([JII)Ljava.nio.LongBuffer;">
 
2654
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2655
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2656
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2657
            </method>
 
2658
            <method name="put" sig="(Ljava.nio.LongBuffer;)Ljava.nio.LongBuffer;">
 
2659
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2660
            </method>
 
2661
            <method name="put" sig="(J)Ljava.nio.LongBuffer;">
 
2662
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2663
            </method>
 
2664
            <method name="put" sig="(IJ)Ljava.nio.LongBuffer;">
 
2665
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2666
            </method>
 
2667
            <method name="put" sig="([JII)Ljava.nio.LongBuffer;">
 
2668
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2669
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2670
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2671
            </method>
 
2672
            <method name="compact" sig="()Ljava.nio.LongBuffer;">
 
2673
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2674
            </method>
 
2675
        </class>
 
2676
        <class name="java.nio.DirectShortBufferS">
 
2677
            <method name="get" sig="()S">
 
2678
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2679
            </method>
 
2680
            <method name="get" sig="(I)S">
 
2681
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2682
            </method>
 
2683
            <method name="get" sig="([SII)Ljava.nio.ShortBuffer;">
 
2684
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2685
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2686
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2687
            </method>
 
2688
            <method name="put" sig="(Ljava.nio.ShortBuffer;)Ljava.nio.ShortBuffer;">
 
2689
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2690
            </method>
 
2691
            <method name="put" sig="(S)Ljava.nio.ShortBuffer;">
 
2692
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2693
            </method>
 
2694
            <method name="put" sig="(IS)Ljava.nio.ShortBuffer;">
 
2695
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2696
            </method>
 
2697
            <method name="put" sig="([SII)Ljava.nio.ShortBuffer;">
 
2698
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2699
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2700
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2701
            </method>
 
2702
            <method name="compact" sig="()Ljava.nio.ShortBuffer;">
 
2703
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2704
            </method>
 
2705
        </class>
 
2706
        <class name="java.nio.DirectShortBufferU">
 
2707
            <method name="get" sig="()S">
 
2708
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2709
            </method>
 
2710
            <method name="get" sig="(I)S">
 
2711
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2712
            </method>
 
2713
            <method name="get" sig="([SII)Ljava.nio.ShortBuffer;">
 
2714
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2715
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2716
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2717
            </method>
 
2718
            <method name="put" sig="(Ljava.nio.ShortBuffer;)Ljava.nio.ShortBuffer;">
 
2719
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2720
            </method>
 
2721
            <method name="put" sig="(S)Ljava.nio.ShortBuffer;">
 
2722
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2723
            </method>
 
2724
            <method name="put" sig="(IS)Ljava.nio.ShortBuffer;">
 
2725
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2726
            </method>
 
2727
            <method name="put" sig="([SII)Ljava.nio.ShortBuffer;">
 
2728
                <!-- we use TreasAsSafe + Critical instead of SafeCritical to workaround PEVerify bug on .NET 2.0/3.5 -->
 
2729
                <attribute type="System.Security.SecurityCriticalAttribute" sig="()V" />
 
2730
                <attribute type="System.Security.SecurityTreatAsSafeAttribute" sig="()V" />
 
2731
            </method>
 
2732
            <method name="compact" sig="()Ljava.nio.ShortBuffer;">
 
2733
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2734
            </method>
 
2735
        </class>
 
2736
        <class name="java.nio.MappedByteBuffer">
 
2737
            <method name="load" sig="()Ljava.nio.MappedByteBuffer;">
 
2738
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2739
            </method>
 
2740
        </class>
 
2741
        <class name="sun.reflect.Reflection">
 
2742
            <!-- we manually hook up this native method, to prevent inlining and tail-call optimizations -->
 
2743
            <method name="getCallerClass" sig="(I)Ljava.lang.Class;">
 
2744
                <attribute type="System.Runtime.CompilerServices.MethodImplAttribute" sig="(Lcli.System.Runtime.CompilerServices.MethodImplOptions;)V">
 
2745
                    <parameter>NoInlining</parameter>
 
2746
                </attribute>
 
2747
                <body>
 
2748
                    <ldarg_0 />
 
2749
                    <call type="IKVM.NativeCode.sun.reflect.Reflection" name="getCallerClass" sig="(I)Ljava.lang.Object;" />
 
2750
                    <stloc name="class" class="java.lang.Object" />
 
2751
                    <!-- "leave" is to thwart tail-call optimization -->
 
2752
                    <leave name="x" />
 
2753
                    <label name="x" />
 
2754
                    <ldloc name="class" />
 
2755
                    <castclass class="java.lang.Class" />
 
2756
                    <ret />
 
2757
                </body>
 
2758
            </method>
 
2759
        </class>
 
2760
        <class name="java.lang.StackTraceElement">
 
2761
            <attribute type="System.SerializableAttribute" sig="()V" />
 
2762
        </class>
 
2763
        <class name="java.lang.invoke.MethodHandle">
 
2764
            <method name="invoke" sig="([Ljava.lang.Object;)Ljava.lang.Object;">
 
2765
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
2766
            </method>
 
2767
            <method name="invokeExact" sig="([Ljava.lang.Object;)Ljava.lang.Object;">
 
2768
                <attribute type="IKVM.Attributes.HideFromJavaAttribute" sig="()V" />
 
2769
            </method>
 
2770
            <!-- NOTE Modifiers.Final and MethodAttributes.NewSlot is recognized by AotTypeWrapper.MapModifiers() as a magic combination that generates a non-virtual method -->
 
2771
            <method name="reflectionInvoke" sig="([Ljava.lang.Object;)Ljava.lang.Object;" modifiers="final" attributes="NewSlot">
 
2772
                <throws class="java.lang.Throwable" />
 
2773
                <attribute type="System.Runtime.CompilerServices.MethodImplAttribute" sig="(Lcli.System.Runtime.CompilerServices.MethodImplOptions;)V">
 
2774
                    <parameter>NoInlining</parameter>
 
2775
                </attribute>
 
2776
                <attribute type="IKVM.Attributes.NameSigAttribute" sig="(Ljava.lang.String;Ljava.lang.String;)V">
 
2777
                    <parameter>invoke</parameter>
 
2778
                    <parameter>([Ljava.lang.Object;)Ljava.lang.Object;</parameter>
 
2779
                </attribute>
 
2780
                <attribute type="IKVM.Attributes.ModifiersAttribute" sig="(Lcli.IKVM.Attributes.Modifiers;)V">
 
2781
                    <parameter>Public,Final,Native</parameter>
 
2782
                </attribute>
 
2783
                <body>
 
2784
                    <ldstr value="MethodHandle.invoke cannot be invoked reflectively" />
 
2785
                    <newobj class="java.lang.UnsupportedOperationException" name="&lt;init&gt;" sig="(Ljava.lang.String;)V" />
 
2786
                    <throw />
 
2787
                </body>
 
2788
            </method>
 
2789
            <!-- NOTE Modifiers.Final and MethodAttributes.NewSlot is recognized by AotTypeWrapper.MapModifiers() as a magic combination that generates a non-virtual method -->
 
2790
            <method name="reflectionInvokeExact" sig="([Ljava.lang.Object;)Ljava.lang.Object;" modifiers="final" attributes="NewSlot">
 
2791
                <throws class="java.lang.Throwable" />
 
2792
                <attribute type="System.Runtime.CompilerServices.MethodImplAttribute" sig="(Lcli.System.Runtime.CompilerServices.MethodImplOptions;)V">
 
2793
                    <parameter>NoInlining</parameter>
 
2794
                </attribute>
 
2795
                <attribute type="IKVM.Attributes.NameSigAttribute" sig="(Ljava.lang.String;Ljava.lang.String;)V">
 
2796
                    <parameter>invokeExact</parameter>
 
2797
                    <parameter>([Ljava.lang.Object;)Ljava.lang.Object;</parameter>
 
2798
                </attribute>
 
2799
                <attribute type="IKVM.Attributes.ModifiersAttribute" sig="(Lcli.IKVM.Attributes.Modifiers;)V">
 
2800
                    <parameter>Public,Final,Native</parameter>
 
2801
                </attribute>
 
2802
                <body>
 
2803
                    <ldstr value="MethodHandle.invokeExact cannot be invoked reflectively" />
 
2804
                    <newobj class="java.lang.UnsupportedOperationException" name="&lt;init&gt;" sig="(Ljava.lang.String;)V" />
 
2805
                    <throw />
 
2806
                </body>
 
2807
            </method>
 
2808
        </class>
 
2809
        <class name="java.lang.invoke.MethodHandleImpl$AllocateObject">
 
2810
            <method name="allocate" sig="()Ljava.lang.Object;">
 
2811
                <attribute type="System.Security.SecuritySafeCriticalAttribute" sig="()V" />
 
2812
            </method>
 
2813
        </class>
 
2814
    </assembly>
 
2815
    <exceptionMappings>
 
2816
        <exception src="System.NullReferenceException" dst="java.lang.NullPointerException" />
 
2817
        <!-- many of the String and Object methods throw ArgumentNullException where Java throws an NPE -->
 
2818
        <exception src="System.ArgumentNullException" dst="java.lang.NullPointerException" />
 
2819
        <exception src="System.IndexOutOfRangeException" dst="java.lang.ArrayIndexOutOfBoundsException" />
 
2820
        <!-- HACK for String methods, we remap ArgumentOutOfRangeException to StringIndexOutOfBoundsException -->
 
2821
        <exception src="System.ArgumentOutOfRangeException" dst="java.lang.StringIndexOutOfBoundsException" />
 
2822
        <exception src="System.InvalidCastException" dst="java.lang.ClassCastException">
 
2823
            <code>
 
2824
                <callvirt type="System.Exception" name="get_Message" sig="()Ljava.lang.String;" />
 
2825
                <newobj class="java.lang.ClassCastException" name="&lt;init&gt;" sig="(Ljava.lang.String;)V" />
 
2826
            </code>
 
2827
        </exception>
 
2828
        <!-- NOTE we "map" to java.lang.Error, because that is the base class of all possible mappings.
 
2829
             The * in front of the class name means that all subclasses can be thrown as well.
 
2830
        -->
 
2831
        <exception src="System.TypeInitializationException" dst="*java.lang.Error">
 
2832
            <code>
 
2833
                <!-- this code is unreachable, TypeInitializationException is handled explicitly in ExceptionHelper.java -->
 
2834
            </code>
 
2835
        </exception>
 
2836
        <exception src="System.Threading.SynchronizationLockException" dst="java.lang.IllegalMonitorStateException" />
 
2837
        <exception src="System.OutOfMemoryException" dst="java.lang.OutOfMemoryError" />
 
2838
        <exception src="System.DivideByZeroException" dst="java.lang.ArithmeticException">
 
2839
            <code>
 
2840
                <pop />
 
2841
                <ldstr value="/ by zero" />
 
2842
                <newobj class="java.lang.ArithmeticException" name="&lt;init&gt;" sig="(Ljava.lang.String;)V" />
 
2843
            </code>
 
2844
        </exception>
 
2845
        <exception src="System.ArrayTypeMismatchException" dst="java.lang.ArrayStoreException" />
 
2846
        <exception src="System.StackOverflowException" dst="java.lang.StackOverflowError" />
 
2847
        <exception src="System.Threading.ThreadAbortException" dst="java.lang.ThreadDeath">
 
2848
            <code>
 
2849
                <castclass type="System.Threading.ThreadAbortException" />
 
2850
                <call type="System.Threading.ThreadAbortException" name="get_ExceptionState" sig="()Ljava.lang.Object;" />
 
2851
                <isinst class="java.lang.ThreadDeath" />
 
2852
                <dup />
 
2853
                <brtrue name="end" />
 
2854
                <pop />
 
2855
                <newobj class="java.lang.ThreadDeath" name="&lt;init&gt;" sig="()V" />
 
2856
                <label name="end" />
 
2857
                <!-- NOTE we do this last because ResetAbort clears the ExceptionState of the ThreadAbortException (why?) -->
 
2858
                <!-- TODO we should put an exception handler around the ResetAbort call, because it will throw a ThreadStateException
 
2859
                     if no Abort is pending (someone could have thrown the exception manually, or we could have called on a 
 
2860
                     previous handler that turned out not to be match for this exception type) -->
 
2861
                <stloc name="x" class="java.lang.ThreadDeath" />
 
2862
                <exceptionBlock>
 
2863
                    <try>
 
2864
                        <!-- TODO instead of catching the ThreadStateException, we should check the ThreadState
 
2865
                             before calling ResetAbort -->
 
2866
                        <call type="System.Threading.Thread" name="ResetAbort" sig="()V" />
 
2867
                        <leave name="next" />
 
2868
                    </try>
 
2869
                    <catch type="System.Threading.ThreadStateException">
 
2870
                        <!-- ignore the exception -->
 
2871
                        <leave name="next" />
 
2872
                    </catch>
 
2873
                </exceptionBlock>
 
2874
                <label name="next" />
 
2875
                <ldloc name="x" />
 
2876
            </code>
 
2877
        </exception>
 
2878
        <!-- TODO make sure the originating method was from an IKVM.NET generated assembly, because if it was
 
2879
             generated by non-Java code, this remapping is obviously bogus. -->
 
2880
        <exception src="System.OverflowException" dst="java.lang.NegativeArraySizeException" />
 
2881
    </exceptionMappings>
 
2882
</root>