# New Ticket Created by  Vasily Chekalkin 
# Please include the string:  [perl #58310]
# in the subject line of all future correspondence about this issue. 
# <URL: http://rt.perl.org/rt3/Ticket/Display.html?id=58310 >


Hello.

Trivial implementation of Str.rindex (depends on #58308)

-- 
Bacek
commit bbd7144bee1648f4516d61a98b48177b1370fe78
Author: Vasily Chekalkin <[EMAIL PROTECTED](none)>
Date:   Sun Aug 24 20:51:41 2008 +1000

    Implement rindex

diff --git a/languages/perl6/src/builtins/any-str.pir b/languages/perl6/src/builtins/any-str.pir
index 77bb24c..84a62c6 100644
--- a/languages/perl6/src/builtins/any-str.pir
+++ b/languages/perl6/src/builtins/any-str.pir
@@ -21,7 +21,7 @@ the size of that file down and to emphasize their generic,
 .namespace []
 .sub 'onload' :anon :init :load
     $P0 = get_hll_namespace ['Any']
-    '!EXPORT'('chars index substr', 'from'=>$P0)
+    '!EXPORT'('chars index rindex substr', 'from'=>$P0)
 .end
 
 
@@ -75,6 +75,44 @@ the size of that file down and to emphasize their generic,
     .return ($P0)
 .end
 
+=item rindex()
+
+=cut
+
+.namespace ['Any']
+.sub 'rindex' :method :multi(_)
+    .param string substring
+    .param int pos             :optional
+    .param int has_pos         :opt_flag
+    .local pmc retv
+
+    if has_pos goto have_pos
+    pos = 0
+  have_pos:
+
+    .local string s
+    s = self
+
+  check_substring:
+    if substring goto substring_search
+    $I0 = length s
+    if pos < $I0 goto done
+    pos = $I0
+    goto done
+
+  substring_search:
+    pos = rindex s, substring, pos
+    if pos < 0 goto fail
+
+  done:
+    $P0 = new 'Int'
+    $P0 = pos
+    .return ($P0)
+
+  fail:
+    $P0 = new 'Failure'
+    .return ($P0)
+.end
 =item substr()
 
 =cut

Reply via email to