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