2007-10-26 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / verifier / make_nested_access_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 TEST_EXTENDS=$6
9
10 if [ "$TEST_EXTENDS" == "yes" ]; then
11         TEST_EXTENDS="extends Owner"
12         TEST_CONSTRUCTOR="call instance void Owner::.ctor()"
13 else
14         TEST_EXTENDS="extends [mscorlib]System.Object"
15         TEST_CONSTRUCTOR="call instance void object::.ctor()"
16 fi
17
18 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
19 TEST_FILE=${TEST_NAME}_generated.il
20 echo $TEST_FILE
21 sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/OPCODE/${TEST_OP}/g" -e "s/CONSTRUCTOR/${TEST_CONSTRUCTOR}/g" -e "s/CLASS_ACCESS/${TEST_CLASS_ACCESS}/g" -e "s/MEMBER_ACCESS/${TEST_MEMBER_ACCESS}/g" -e "s/EXTENDS/${TEST_EXTENDS}/g" > $TEST_FILE <<//EOF
22
23 .assembly '${TEST_NAME}_generated'
24 {
25   .hash algorithm 0x00008004
26   .ver  0:0:0:0
27 }
28
29 // VALIDITY CIL which breaks the ECMA-335 rules. 
30 // this CIL should fail verification by a conforming CLI verifier.
31
32 .assembly extern mscorlib
33 {
34   .ver 1:0:5000:0
35   .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
36 }
37
38 .class Owner extends [mscorlib]System.Object
39 {
40         .method public static Owner/Nested Create ()
41         {
42                 .maxstack 8
43                 newobj instance void class Owner/Nested::.ctor()
44                 ret
45         }
46
47         .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
48         {
49                 .maxstack 8
50                 ldarg.0 
51                 call instance void object::.ctor()
52                 ret
53         }
54
55         .class nested CLASS_ACCESS Nested extends [mscorlib]System.Object
56         {
57                 .field MEMBER_ACCESS int32 fld
58                 .field MEMBER_ACCESS static int32 sfld
59
60                 .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
61                 {
62                         .maxstack 8
63                         ldarg.0 
64                         call instance void object::.ctor()
65                         ret
66                 }
67
68                 .method MEMBER_ACCESS int32 Target ()
69                 {
70                         .maxstack 8
71                         ldc.i4.0
72                         ret 
73                 }               
74         }
75 }
76
77 .class public Test EXTENDS
78 {
79         .method public void Method ()
80         {
81                 .maxstack 8
82                 call class Owner/Nested Owner::Create ()
83                 OPCODE // VALIDITY.
84                 pop
85                 ret
86         }
87
88         .method public hidebysig specialname rtspecialname instance default void .ctor () cil managed
89         {
90                 .maxstack 8
91                 ldarg.0 
92                 CONSTRUCTOR
93                 ret
94         }
95 }
96
97 .method public static int32 Main() cil managed
98 {
99         .entrypoint
100         .maxstack 8
101         newobj instance void class Test::.ctor()
102         call instance void class Test::Method()
103         ldc.i4.0
104         ret
105 }
106 //EOF