set version to 1.1.4
[voodoo-lang.git] / test / many-args-tail.voo
blob41923d29c9f05f75fbb7a4c20d8aa7fe882f33c9
1 #### Test tail calls using many arguments
3 section data
5 format: string "%d\n\x00"
8 section functions
9 import printf
10 export main
12 align
13 compute:
14 function count a b c d e f g h i j k l m n o p q r s t
15     let newa a
16     let newb sub 0 b
17     let newc c
18     let newd sub 0 d
19     let newe e
20     let newf sub 0 f
21     let newg g
22     let newh sub 0 h
23     let newi i
24     let newj sub 0 j
25     let newk k
26     let newl sub 0 l
27     let newm m
28     let newn sub 0 n
29     let newo o
30     let newp sub 0 p
31     let newq q
32     let newr sub 0 r
33     let news s
34     let newt sub 0 t
35     let result call many_args_tail count a b c d e f g h i j k l \
36                                    m n o p q r s t
37     call printf format a
38     call printf format b
39     call printf format c
40     call printf format d
41     call printf format e
42     call printf format f
43     call printf format g
44     call printf format h
45     call printf format i
46     call printf format j
47     call printf format k
48     call printf format l
49     call printf format m
50     call printf format n
51     call printf format o
52     call printf format p
53     call printf format q
54     call printf format r
55     call printf format s
56     call printf format t
57     call printf format newa
58     call printf format newb
59     call printf format newc
60     call printf format newd
61     call printf format newe
62     call printf format newf
63     call printf format newg
64     call printf format newh
65     call printf format newi
66     call printf format newj
67     call printf format newk
68     call printf format newl
69     call printf format newm
70     call printf format newn
71     call printf format newo
72     call printf format newp
73     call printf format newq
74     call printf format newr
75     call printf format news
76     call printf format newt
77     return result
78 end function
80 align
81 many_args_tail:
82 function count a b c d e f g h i j k l m n o p q r s t
84     let result 0
85     ifle count 0
86         set result add result a
87         set result add result b
88         set result add result c
89         set result add result d
90         set result add result e
91         set result add result f
92         set result add result g
93         set result add result h
94         set result add result i
95         set result add result j
96         set result add result k
97         set result add result l
98         set result add result m
99         set result add result n
100         set result add result o
101         set result add result p
102         set result add result q
103         set result add result r
104         set result add result s
105         set result add result t
106         return result
107     end if
109     let newcount sub count 1
110     let newa add a 1
111     let newb add b 1
112     let newc add c 1
113     let newd add d 1
114     let newe add e 1
115     let newf add f 1
116     let newg add g 1
117     let newh add h 1
118     let newi add i 1
119     let newj add j 1
120     let newk add k 1
121     let newl add l 1
122     let newm add m 1
123     let newn add n 1
124     let newo add o 1
125     let newp add p 1
126     let newq add q 1
127     let newr add r 1
128     let news add s 1
129     let newt add t 1
131     tail-call many_args_tail newcount newa newb newc newd newe newf newg newh \
132               newi newj newk newl newm newn newo newp newq newr news newt
133 end function
135 align
136 main:
137 function argc argv
138     let x call compute 1000000 1 2 3 4 5 6 7 8 9 10 11 \
139                        12 13 14 15 16 17 18 19 20
140     call printf format x
141     call printf format argc
143     return 0
144 end function