Author: pmichaud
Date: Sun Nov 9 20:58:24 2008
New Revision: 32478
Modified:
trunk/languages/perl6/src/builtins/any-str.pir
trunk/languages/perl6/src/classes/List.pir
trunk/languages/perl6/src/classes/Mapping.pir
trunk/languages/perl6/src/classes/Pair.pir
Log:
[rakudo]: Implementation of .fmt (RT #60382, masak++)
Modified: trunk/languages/perl6/src/builtins/any-str.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/any-str.pir (original)
+++ trunk/languages/perl6/src/builtins/any-str.pir Sun Nov 9 20:58:24 2008
@@ -191,6 +191,23 @@
.return ($P0)
.end
+=item fmt
+
+ our Str multi Any::fmt ( Str $format )
+
+Returns the invocant formatted by an implicit call to C<sprintf>.
+
+=cut
+
+.sub 'fmt' :method :multi(_)
+ .param string format
+ .local pmc retv
+
+ retv = 'sprintf'(format, self)
+
+ .return(retv)
+.end
+
=item index()
=cut
Modified: trunk/languages/perl6/src/classes/List.pir
==============================================================================
--- trunk/languages/perl6/src/classes/List.pir (original)
+++ trunk/languages/perl6/src/classes/List.pir Sun Nov 9 20:58:24 2008
@@ -287,6 +287,44 @@
.return values.'first'(test)
.end
+=item fmt
+
+ our Str multi List::fmt ( Str $format, $separator = ' ' )
+
+Returns the invocant list formatted by an implicit call to C<sprintf> on each
+of the elements, then joined with spaces or an explicitly given separator.
+
+=cut
+
+.sub 'fmt' :method :multi('ResizablePMCArray')
+ .param pmc format
+ .param string sep :optional
+ .param int has_sep :opt_flag
+
+ .local pmc res
+ .local pmc iter
+ .local pmc retv
+ .local pmc elem
+ .local pmc elemres
+
+ if has_sep goto have_sep
+ sep = ' '
+ have_sep:
+ res = new 'List'
+ iter = self.'iterator'()
+ elem_loop:
+ unless iter goto done
+
+ invoke:
+ elem = shift iter
+ elemres = 'sprintf'(format, elem)
+ push res, elemres
+ goto elem_loop
+
+ done:
+ retv = 'join'(sep, res)
+ .return(retv)
+.end
=item grep(...)
Modified: trunk/languages/perl6/src/classes/Mapping.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Mapping.pir (original)
+++ trunk/languages/perl6/src/classes/Mapping.pir Sun Nov 9 20:58:24 2008
@@ -165,6 +165,50 @@
.end
+=item fmt
+
+ our Str multi Mapping::fmt ( Str $format, $separator = "\n" )
+
+Returns the invocant mapping formatted by an implicit call to C<.fmt> on
+every pair, joined by newlines or an explicitly given separator.
+
+=cut
+
+.sub 'fmt' :method :multi('Hash')
+ .param pmc format
+ .param string sep :optional
+ .param int has_sep :opt_flag
+
+ .local pmc pairs
+ .local pmc res
+ .local pmc iter
+ .local pmc retv
+ .local pmc elem
+ .local pmc key
+ .local pmc value
+ .local pmc elemres
+
+ if has_sep goto have_sep
+ sep = "\n"
+ have_sep:
+ pairs = self.'pairs'()
+ res = new 'List'
+ iter = pairs.'iterator'()
+ elem_loop:
+ unless iter goto done
+
+ invoke:
+ elem = shift iter
+ elemres = elem.'fmt'(format)
+ push res, elemres
+ goto elem_loop
+
+ done:
+ retv = 'join'(sep, res)
+ .return(retv)
+.end
+
+
.sub 'keys' :method :multi('Hash')
.local pmc iter
.local pmc rv
Modified: trunk/languages/perl6/src/classes/Pair.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Pair.pir (original)
+++ trunk/languages/perl6/src/classes/Pair.pir Sun Nov 9 20:58:24 2008
@@ -87,6 +87,29 @@
.end
+=item fmt
+
+ our Str multi Pair::fmt ( Str $format )
+
+Returns the invocant pair formatted by an implicit call to C<sprintf> on
+the key and value.
+
+=cut
+
+.sub 'fmt' :method
+ .param pmc format
+
+ .local pmc retv
+ .local pmc key
+ .local pmc value
+
+ key = self.'key'()
+ value = self.'value'()
+ retv = 'sprintf'(format, key, value)
+
+ .return(retv)
+.end
+
=item perl
Returns a Perl code representation of the pair.