Flush (work in progress)
[mono.git] / mono / tests / verifier / make_endfinally_test.sh
1 #! /bin/sh
2
3 SED="sed"
4 if [ `which gsed 2> /dev/null` ] ; then 
5         SED="gsed"
6 fi
7
8 TEST_NAME=$1
9 TEST_VALIDITY=$2
10 TEST_BLOCK=$3
11 TEST_POS=$4
12 TEST_EXTRA_OPS=$5
13 # Only 1 TEST_OP variable should be set.
14
15
16 declare OPCODE_${TEST_POS}="endfinally"
17
18
19 TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
20 TEST_FILE=${TEST_NAME}_generated.il
21 echo $TEST_FILE
22 $SED -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/LOCAL/${TEST_LOCAL}/g"  -e "s/BLOCK/${TEST_BLOCK}/g" -e "s/EXTRA_OPS/${TEST_EXTRA_OPS}/g"  > $TEST_FILE <<//EOF
23 // VALIDITY
24
25 .assembly '${TEST_NAME}_generated'
26 {
27   .hash algorithm 0x00008004
28   .ver  0:0:0:0
29 }
30
31 .method public static int32 Main() cil managed
32 {
33         .entrypoint
34         .maxstack 2
35         ${OPCODE_1}
36         .try
37         {
38                 nop
39                 ${OPCODE_2}
40                 leave TRY_2
41         }
42         catch [mscorlib]System.NullReferenceException 
43         {
44                 pop
45                 ${OPCODE_3}
46                 leave END
47         }
48
49 TRY_2:
50
51         .try
52         {
53                 nop
54                 ${OPCODE_4}
55                 leave TRY_3
56         }
57
58         BLOCK
59         {
60                 nop
61                 EXTRA_OPS
62                 ${OPCODE_8}
63                 endfinally
64         }
65
66 TRY_3:
67         .try {
68                 .try
69                 {
70                         nop
71                         leave TRY_4
72                 }
73                 catch [mscorlib]System.NullReferenceException 
74                 {
75                         pop
76                         ${OPCODE_5}
77                         leave END
78                 }
79         }
80         BLOCK
81         {
82                 nop
83                 ${OPCODE_9}
84                 endfinally
85         }
86
87 TRY_4:
88
89         .try 
90         {
91                 nop
92                 leave END
93         }
94         filter
95         {
96                 pop
97                 ${OPCODE_6}
98                 ldc.i4.0
99                 endfilter
100         }
101         {
102                 nop
103                 ${OPCODE_7}
104                 leave END
105         }
106
107 END:
108         ldc.i4.0
109         ret
110 }
111 //EOF