tagged release 0.7.1
[parrot.git] / languages / perl6 / src / builtins / cmp.pir
blob660a5e4bda48b9ef2426d415acc1ecf8a0f465a8
1 ## $Id$
3 =head1 NAME
5 src/builtins/cmp.pir - Perl6 comparison builtins
7 =head1 Functions
9 =over 4
11 =cut
13 .namespace []
15 .sub 'infix:==' :multi(_,_)
16     .param num a
17     .param num b
18     $I0 = iseq a, b
19     .return 'prefix:?'($I0)
20 .end
23 .sub 'infix:!==' :multi(_,_)
24     .param num a
25     .param num b
26     $I0 = isne a, b
27     .return 'prefix:?'($I0)
28 .end
30 # Shortcut for infix:!==, so same code
31 .sub 'infix:!=' :multi(_,_)
32     .param num a
33     .param num b
34     $I0 = isne a, b
35     .return 'prefix:?'($I0)
36 .end
39 .sub 'infix:<' :multi(_,_)
40     .param num a
41     .param num b
42     $I0 = islt a, b
43     .return 'prefix:?'($I0)
44 .end
47 .sub 'infix:<=' :multi(_,_)
48     .param num a
49     .param num b
50     $I0 = isle a, b
51     .return 'prefix:?'($I0)
52 .end
55 .sub 'infix:>' :multi(_,_)
56     .param num a
57     .param num b
58     $I0 = isgt a, b
59     .return 'prefix:?'($I0)
60 .end
63 .sub 'infix:>=' :multi(_,_)
64     .param num a
65     .param num b
66     $I0 = isge a, b
67     .return 'prefix:?'($I0)
68 .end
71 .sub 'infix:<=>'
72     .param pmc a
73     .param pmc b
74     $I0 = cmp_num a, b
75     if $I0 < 0 goto increase
76     if $I0 > 0 goto decrease
77     $P0 = get_hll_global ['Order'], 'Same'
78     .return ($P0)
79   increase:
80     $P0 = get_hll_global ['Order'], 'Increase'
81     .return ($P0)
82   decrease:
83     $P0 = get_hll_global ['Order'], 'Decrease'
84     .return ($P0)
85 .end
88 .sub 'infix:eq' :multi(_,_)
89     .param string a
90     .param string b
91     $I0 = iseq a, b
92     .return 'prefix:?'($I0)
93 .end
95 .sub 'infix:!eq' :multi(_,_)
96     .param string a
97     .param string b
98     $I0 = isne a, b
99     .return 'prefix:?'($I0)
100 .end
103 .sub 'infix:ne' :multi(_,_)
104     .param string a
105     .param string b
106     $I0 = isne a, b
107     .return 'prefix:?'($I0)
108 .end
111 .sub 'infix:lt' :multi(_,_)
112     .param string a
113     .param string b
114     $I0 = islt a, b
115     .return 'prefix:?'($I0)
116 .end
119 .sub 'infix:le' :multi(_,_)
120     .param string a
121     .param string b
122     $I0 = isle a, b
123     .return 'prefix:?'($I0)
124 .end
127 .sub 'infix:gt' :multi(_,_)
128     .param string a
129     .param string b
130     $I0 = isgt a, b
131     .return 'prefix:?'($I0)
132 .end
135 .sub 'infix:ge' :multi(_,_)
136     .param string a
137     .param string b
138     $I0 = isge a, b
139     .return 'prefix:?'($I0)
140 .end
143 .sub 'infix:cmp'
144     .param pmc a
145     .param pmc b
146     $I0 = cmp a, b
147     ##  Don't use a tailcall here due to RT#56448
148     $P0 = 'infix:<=>'($I0, 0)
149     .return ($P0)
150 .end
153 .sub 'infix:leg'
154     .param string a
155     .param string b
156     $I0 = cmp a, b
157     ##  Don't use a tailcall here due to RT#56448
158     $P0 = 'infix:<=>'($I0, 0)
159     .return ($P0)
160 .end
163 .sub 'infix:===' :multi(_,_)
164     .param pmc a
165     .param pmc b
166     $I0 = '!SAMETYPE_EXACT'(a, b)
167     unless $I0 goto false
168     $P0 = a.'WHICH'()
169     $P1 = b.'WHICH'()
170     .return 'infix:==='($P0, $P1)
171   false:
172     $P0 = get_hll_global [ 'Bool' ], 'False'
173     .return ($P0)
174 .end
177 .sub 'infix:!===' :multi(_,_)
178     .param pmc a
179     .param pmc b
180     $P0 = 'infix:==='(a, b)
181     .return 'prefix:!'($P0)
182 .end
185 ## TODO: infix:=:=
188 =back
190 =cut
192 # Local Variables:
193 #   mode: pir
194 #   fill-column: 100
195 # End:
196 # vim: expandtab shiftwidth=4 ft=pir: