tagged release 0.7.1
[parrot.git] / languages / PIR / t / call.t
blob50342844ecf6f16d088eb18fd8ee27223cb4af7f
1 #!perl
3 # Copyright (C) 2007, The Perl Foundation.
4 # $Id$
6 use strict;
7 use warnings;
8 use lib qw(t . lib ../lib ../../lib ../../../lib);
9 use Parrot::Test tests => 10;
10 use Test::More;
12 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'long sub invocation' );
14 .sub main :main
15     .local int x, y, z
16     .begin_call
17     .arg 1
18     .arg 2
19     .arg 3
20     .call foo
21     .local int a, b, c
22     .result a
23     .result b
24     .result c
25     .end_call
26 .end
28 .sub foo
29     .begin_return
30     .return 4
31     .return 5
32     .return 6
33     .end_return
34 .end
36 CODE
38 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'long sub invocation 2' );
40 .sub main :main
41     .begin_call
42     .call foo
43     .end_call
44 .end
46 .sub foo
47     .begin_return
48     .end_return
49 .end
51 CODE
54 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'short sub invocation' );
56 .sub main :main
57     .local int x, y, z
58     (x, y, z) = foo(1, 2, 3)
60     foo(1,2,3)
61 .end
63 .sub foo
64     .return(4, 5, 6)
65 .end
67 CODE
69 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'short yield' );
71 .sub main :main
72     .yield(1,2,3)
73     .yield()
74 .end
77 CODE
79 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'long yield' );
81 .sub main :main
82     .begin_yield
83     .yield 1
84     .yield 2
85     .yield 3
86     .end_yield
87 .end
89 CODE
92 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'tail call' );
94 .sub main :main
95     .return foo()
96 .end
98 .sub foo
99     .return bar()
100 .end
102 .sub bar
103     .return(1)
104 .end
106 CODE
108 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'tail method call' );
110 .sub main :main
111     .return obj.foo()
112 .end
114 .sub foo
115     .return obj.bar()
116 .end
118 .sub bar
119     .return(1)
120 .end
122 CODE
124 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'nci call' );
126 .sub main :main
127     .local pmc x
128     .begin_call
129     .nci_call x
130     .end_call
131 .end
133 CODE
135 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'long method call' );
137 .sub main :main
138     .local pmc x
139     .begin_call
140     .invocant obj
141     .meth_call meth
142     .end_call
143 .end
145 .sub foo
146     .local pmc x
147     .begin_call
148     .invocant obj
149     .meth_call 'meth'
150     .end_call
151 .end
154 CODE
157 language_output_like( 'PIR_PGE', <<'CODE', qr/Parse successful!/, 'short sub call with flags' );
159 # the sub body is taken from PDD03
160 .sub main :main
161     .local pmc x, y
162     foo(x :flat)
163     foo(x, 'y' => y)
164     foo(x, y :named('y'))
165     foo(x :flat :named)
166     foo(a, b, c :flat, 'x' => 3, 'y' => 4, z :flat :named('z'))
168     x = foo()                       # single result
169     (i, j :optional, ar :slurpy, value :named('key') ) = foo()
170 .end
172 .sub foo
173     .return (i, ar :flat, value :named('key') )
174 .end
176 .sub bar
177     () = baz()
178 .end
180 CODE