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



The following patch against r24710:

   - adds a push and a pop method to the P6 List PMC
   - adds basic documentation for other methods
   - modifies the unshift method to accept a list of elements to unshift
     onto the list

Cory


Index: src/classes/List.pir

===================================================================

--- src/classes/List.pir        (revision 24707)

+++ src/classes/List.pir        (working copy)

@@ -42,19 +42,90 @@

     .return ($I0)

 .end

 

+=item unshift(ELEMENTS)

 

+Prepends ELEMENTS to the front of the list.

+

+=cut

+

 .sub 'unshift' :method

-    .param pmc x

-    unshift self, x

+    .param pmc args :slurpy

+    .local int narg

+    .local int i

+

+    narg = args

+    i = 0

+

+    .local pmc tmp

+  loop:

+    if i == narg goto done

+    pop tmp, args

+    unshift self, tmp

+    inc i

+    goto loop

+  done:        

 .end

 

+=item shift()

 

+Shifts the first item off the list and returns it.

+

+=cut

+

 .sub 'shift' :method

     .local pmc x

     x = shift self

     .return (x)

 .end

 

+=item pop()

+

+Treats the list as a stack, popping the last item off the list and returning 
it.

+

+=cut

+

+.sub 'pop' :method

+    .local pmc x

+    .local int len

+

+    len = elements self

+

+    if len == 0 goto empty

+    pop x, self

+    goto done

+    

+  empty:

+    x = undef()

+    goto done

+

+  done:        

+    .return (x)

+.end

+

+=item push(ELEMENTS)

+

+Treats the list as a stack, pushing ELEMENTS onto the end of the list.

+

+=cut

+

+.sub 'push' :method

+    .param pmc args :slurpy

+    .local int narg

+    .local pmc tmp

+    .local int i

+

+    narg = args

+    i = 0

+

+  loop:

+    if i == narg goto done

+    shift tmp, args

+    push self, tmp

+    inc i

+    goto loop

+  done:

+.end

+

 =back

 

 =cut

Reply via email to