Author: jonathan
Date: Tue Jul 29 14:35:24 2008
New Revision: 29865
Modified:
trunk/languages/perl6/src/builtins/cmp.pir
trunk/languages/perl6/src/classes/Int.pir
trunk/languages/perl6/src/classes/Num.pir
trunk/languages/perl6/src/classes/Str.pir
Log:
[rakudo] Basic implementation of the === and !=== operators, plus WHICH defined
one some immutable types. Does enough to pass all non-fudged tests in
S03-operators/value_equivalence.t.
Modified: trunk/languages/perl6/src/builtins/cmp.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/cmp.pir (original)
+++ trunk/languages/perl6/src/builtins/cmp.pir Tue Jul 29 14:35:24 2008
@@ -160,7 +160,29 @@
.end
-## TODO: infix:=:= infix:===
+.sub 'infix:===' :multi(_,_)
+ .param pmc a
+ .param pmc b
+ $I0 = '!SAMETYPE_EXACT'(a, b)
+ unless $I0 goto false
+ $P0 = a.'WHICH'()
+ $P1 = b.'WHICH'()
+ .return 'infix:==='($P0, $P1)
+ false:
+ $P0 = get_hll_global [ 'Bool' ], 'False'
+ .return ($P0)
+.end
+
+
+.sub 'infix:!===' :multi(_,_)
+ .param pmc a
+ .param pmc b
+ $P0 = 'infix:==='(a, b)
+ .return 'prefix:!'($P0)
+.end
+
+
+## TODO: infix:=:=
=back
Modified: trunk/languages/perl6/src/classes/Int.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Int.pir (original)
+++ trunk/languages/perl6/src/classes/Int.pir Tue Jul 29 14:35:24 2008
@@ -53,6 +53,31 @@
.end
+=item WHICH()
+
+Returns the identify value.
+
+=cut
+
+.sub 'WHICH' :method
+ $I0 = self
+ .return ($I0)
+.end
+
+
+=item infix:===
+
+Overridden for Int.
+
+=cut
+
+.namespace []
+.sub 'infix:===' :multi(Integer,Integer)
+ .param int a
+ .param int b
+ .return 'infix:=='(a, b)
+.end
+
=back
=cut
Modified: trunk/languages/perl6/src/classes/Num.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Num.pir (original)
+++ trunk/languages/perl6/src/classes/Num.pir Tue Jul 29 14:35:24 2008
@@ -44,6 +44,32 @@
.end
+=item WHICH()
+
+Returns the identify value.
+
+=cut
+
+.sub 'WHICH' :method
+ $N0 = self
+ .return ($N0)
+.end
+
+
+=item infix:===
+
+Overridden for Num.
+
+=cut
+
+.namespace []
+.sub 'infix:===' :multi(Float,Float)
+ .param num a
+ .param num b
+ .return 'infix:=='(a, b)
+.end
+
+
=back
=cut
Modified: trunk/languages/perl6/src/classes/Str.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Str.pir (original)
+++ trunk/languages/perl6/src/classes/Str.pir Tue Jul 29 14:35:24 2008
@@ -261,6 +261,19 @@
.return (s)
.end
+
+=item WHICH()
+
+Returns the identify value.
+
+=cut
+
+.sub 'WHICH' :method
+ $S0 = self
+ .return ($S0)
+.end
+
+
=back
=head1 Functions
@@ -432,6 +445,21 @@
.return s.'chop'()
.end
+
+=item infix:===
+
+Overridden for Str.
+
+=cut
+
+.namespace []
+.sub 'infix:===' :multi(String,String)
+ .param string a
+ .param string b
+ .return 'infix:eq'(a, b)
+.end
+
+
=back
=head2 TODO Functions