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


second patch from Lisbon: kv in the setting
>From db44fb60bde4009d148ac699c0a9b8383ac2206d Mon Sep 17 00:00:00 2001
From: dakkar <dak...@sardina.(none)>
Date: Thu, 6 Aug 2009 16:18:15 +0200
Subject: [PATCH] moved kv to setting

---
 src/builtins/any-list.pir |   40 ----------------------------------------
 src/setting/Any-list.pm   |   15 +++++++++++++++
 2 files changed, 15 insertions(+), 40 deletions(-)

diff --git a/src/builtins/any-list.pir b/src/builtins/any-list.pir
index e963092..cd78d87 100644
--- a/src/builtins/any-list.pir
+++ b/src/builtins/any-list.pir
@@ -94,46 +94,6 @@ Return a List with the keys of the invocant.
     signature."!add_implicit_self"($P0)
 .end
 
-
-=item kv
-
-=cut
-
-.namespace []
-.sub 'kv' :multi() :subid('_kv')
-    .param pmc values          :slurpy
-    values.'!flatten'()
-    .tailcall values.'kv'()
-.end
-.sub '' :init :load
-    .local pmc block, signature
-    .const 'Sub' $P0 = "_kv"
-    block = $P0
-    signature = new ["Signature"]
-    setprop block, "$!signature", signature
-    signature.'!add_param'('@values', 1 :named('slurpy'))
-    '!TOPERL6MULTISUB'(block)
-.end
-
-.namespace ['Any']
-.sub 'kv' :method
-    .local pmc result, it
-    result = new ['List']
-    it = self.'iterator'()
-    .local int i
-    i = 0
-  loop:
-    unless it goto done
-    $P0 = shift it
-    push result, i
-    push result, $P0
-    inc i
-    goto loop
-  done:
-    .return (result)
-.end
-
-
 =item pick($num, :$repl)
 
 =cut
diff --git a/src/setting/Any-list.pm b/src/setting/Any-list.pm
index 32d1ecf..9a9431a 100644
--- a/src/setting/Any-list.pm
+++ b/src/setting/Any-list.pm
@@ -85,6 +85,17 @@ class Any is also {
         }
     }
 
+    our List multi method kv() {
+        my $i=0;
+        gather {
+            for @.list -> $value {
+                take 0+$i;
+                take $value;
+                ++$i
+            }
+        }
+    }
+
     multi method reduce(Code $expression is rw) {
         my Int $arity = $expression.count;
         fail('Cannot reduce() using a unary or nullary function.')
@@ -133,6 +144,10 @@ our Str multi join(Str $separator = '', *...@values) {
     @values.join($separator)
 }
 
+our List multi sub kv(*...@values) is export {
+    @values.kv();
+}
+
 our List multi map(Code $expr, *...@values) {
     @values.map($expr)
 }
-- 
1.5.6.3

Attachment: signature.asc
Description: PGP signature

Reply via email to