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

Reply via email to