2007-08-16 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_self_nested_test.sh
1 #! /bin/sh
2
3 TEST_NAME=$1
4 TEST_VALIDITY=$2
5 TEST_OP=$3
6 TEST_CLASS_ACCESS=$4
7 TEST_MEMBER_ACCESS=$5
8
9 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
10 TEST_FILE=${TEST_NAME}_generated.il
11 echo $TEST_FILE
12 sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/CLASS_ACCESS/${TEST_CLASS_ACCESS}/g" -e "s/MEMBER_ACCESS/${TEST_MEMBER_ACCESS}/g" > $TEST_FILE <<//EOF
13
14 .assembly '${TEST_NAME}_generated'
15 {
16   .hash algorithm 0x00008004
17   .ver  0:0:0:0
18 }
19
20 // VALIDITY CIL which breaks the ECMA-335 rules. 
21 // this CIL should fail verification by a conforming CLI verifier.
22
23 .assembly extern mscorlib
24 {
25   .ver 1:0:5000:0
26   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
27 }
28
29 .class Outer extends [mscorlib]System.Object
30 {
31         .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
32         {
33                 .maxstack 8
34                 ldarg.0 
35                 call instance void object::.ctor()
36                 ret
37         }
38
39         .class nested CLASS_ACCESS Inner extends [mscorlib]System.Object
40         {
41                 .field MEMBER_ACCESS int32 fld
42                 .field MEMBER_ACCESS static int32 sfld
43
44                 .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
45                 {
46                         .maxstack 8
47                         ldarg.0 
48                         call instance void object::.ctor()
49                         ret
50                 }
51
52                 .method MEMBER_ACCESS int32 Target ()
53                 {
54                         .maxstack 8
55                         ldc.i4.0
56                         ret 
57                 }               
58         }
59
60         .method public void Method ()
61         {
62                 .maxstack 8
63
64                 newobj instance void class Outer/Inner::.ctor()
65                 OPCODE // VALIDITY.
66                 pop
67                 ret
68         }
69 }
70
71 .method public static int32 Main() cil managed
72 {
73         .entrypoint
74         .maxstack 8
75         newobj instance void class Outer::.ctor()
76         call instance void class Outer::Method()
77         ldc.i4.0
78         ret
79 }
80 //EOF