[perl6]:
[parrot.git] / languages / perl6 / src / builtins / op.pir
blob09865ddab227dadf26bb9be010ec4f502e07ab81
1 ## $Id$
3 =head1 NAME
5 src/builtins/op.pir - Perl6 builtin operators
7 =head1 Functions
9 =over 4
11 =cut
13 .namespace
15 ## autoincrement
16 .sub 'postfix:++'
17     .param pmc a
18     $P0 = clone a
19     inc a
20     .return ($P0)
21 .end
23 .sub 'postfix:--'
24     .param pmc a
25     $P0 = clone a
26     dec a
27     .return ($P0)
28 .end
31 .sub 'prefix:++'
32     .param pmc a
33     inc a
34     .return (a)
35 .end
38 .sub 'prefix:--'
39     .param pmc a
40     dec a
41     .return (a)
42 .end
45 ## exponentiation
46 .sub 'infix:**'
47     .param num base
48     .param num exp
49     $N0 = pow base, exp
50     .return ($N0)
51 .end
54 ## symbolic unary
55 .sub 'prefix:!'
56     .param pmc a
57     $I0 = isfalse a
58     .return ($I0)
59 .end
62 .sub 'prefix:+'
63     .param pmc a
64     $I0 = does a, 'float'
65     if $I0 == 0 goto return_int
66     $N0 = a
67     .return ($N0)
68   return_int:
69     $I0 = a
70     .return ($I0)
71 .end
74 .sub 'prefix:-'
75     .param pmc a
76     $N0 = a
77     $N0 = neg $N0
78     .return ($N0)
79 .end
82 .sub 'prefix:~'
83     .param pmc a
84     $S0 = a
85     .return ($S0)
86 .end
89 .sub 'prefix:?'
90     .param pmc a
92     .local pmc bool
93     bool = new 'Perl6Bool'
94     $I0 = istrue a
95     assign bool, $I0
96     .return (bool)
97 .end
100 ## TODO: prefix:= prefix:* prefix:** prefix:~^ prefix:+^
103 .sub 'prefix:?^'
104     .param pmc a
105     $I0 = isfalse a
106     .return ($I0)
107 .end
110 ## TODO: prefix:^
113 ## multiplicative
114 .sub 'infix:*'
115     .param pmc a
116     .param pmc b
117     $P0 = mul a, b
118     .return ($P0)
119 .end
122 .sub 'infix:/'
123     .param pmc a
124     .param pmc b
125     $P0 = div a, b
126     .return ($P0)
127 .end
130 .sub 'infix:%'
131     .param num a
132     .param num b
133     $N0 = mod a, b
134     .return ($N0)
135 .end
138 .sub 'infix:x'
139     .param string a
140     .param int b
141     $S0 = repeat a, b
142     .return ($S0)
143 .end
146 .sub 'infix:xx'
147     .param string a
148     .param int b
149     $P0 = new ResizablePMCArray
150   lp:
151     unless b, ex
152     push $P0, a
153     dec b
154     branch lp
155   ex:
156     .return ($P0)
157 .end
160 .sub 'infix:+&'
161     .param int a
162     .param int b
163     $I0 = band a, b
164     .return ($I0)
165 .end
168 .sub 'infix:+<'
169     .param int a
170     .param int b
171     $I0 = shl a, b
172     .return ($I0)
173 .end
176 .sub 'infix:+>'
177     .param int a
178     .param int b
179     $I0 = shr a, b
180     .return ($I0)
181 .end
184 .sub 'infix:~&'
185     .param string a
186     .param string b
187     $S0 = bands a, b
188     .return ($S0)
189 .end
192 ## TODO: infix:~< infix:~>
195 ## additive
196 .sub 'infix:+'
197     .param pmc a
198     .param pmc b
199     $P0 = add a, b
200     .return ($P0)
201 .end
204 .sub 'infix:-'
205     .param pmc a
206     .param pmc b
207     $P0 = sub a, b
208     .return ($P0)
209 .end
212 .sub 'infix:~'
213     .param string a
214     .param string b
215     $S0 = concat a, b
216     .return ($S0)
217 .end
220 .sub 'infix:+|'
221     .param int a
222     .param int b
223     $I0 = bor a, b
224     .return ($I0)
225 .end
228 .sub 'infix:+^'
229     .param int a
230     .param int b
231     $I0 = bxor a, b
232     .return ($I0)
233 .end
236 .sub 'infix:~|'
237     .param string a
238     .param string b
239     $S0 = bors a, b
240     .return ($S0)
241 .end
244 .sub 'infix:~^'
245     .param string a
246     .param string b
247     $S0 = bxors a, b
248     .return ($S0)
249 .end
252 .sub 'infix:?&'
253     .param int a
254     .param int b
255     $I0 = band a, b
256     $I0 = isne $I0, 0
257     .return ($I0)
258 .end
261 .sub 'infix:?|'
262     .param int a
263     .param int b
264     $I0 = bor a, b
265     $I0 = isne $I0, 0
266     .return ($I0)
267 .end
270 .sub 'infix:?^'
271     .param int a
272     .param int b
273     $I0 = bxor a, b
274     $I0 = isne $I0, 0
275     .return ($I0)
276 .end
279 =back
281 =cut
283 # Local Variables:
284 #   mode: pir
285 #   fill-column: 100
286 # End:
287 # vim: expandtab shiftwidth=4: