perl.cvs.parrot
[Top] [All Lists]

[svn:parrot] r24354 - in trunk/languages/perl6/src: builtins classes par

Subject: [svn:parrot] r24354 - in trunk/languages/perl6/src: builtins classes parser
From:
Date: Mon, 31 Dec 2007 11:39:09 -0800 PST
Newsgroups: perl.cvs.parrot

Author: jonathan
Date: Mon Dec 31 11:39:08 2007
New Revision: 24354

Modified:
   trunk/languages/perl6/src/builtins/cmp.pir
   trunk/languages/perl6/src/builtins/junction.pir
   trunk/languages/perl6/src/builtins/op.pir
   trunk/languages/perl6/src/classes/Junction.pir
   trunk/languages/perl6/src/parser/grammar-oper.pg

Log:
[perl6] Junction support for most comparrison operators and many infix 
operators too.

Modified: trunk/languages/perl6/src/builtins/cmp.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/cmp.pir  (original)
+++ trunk/languages/perl6/src/builtins/cmp.pir  Mon Dec 31 11:39:08 2007
@@ -12,7 +12,7 @@
 
 .namespace
 
-.sub 'infix:=='
+.sub 'infix:==' :multi(_,_)
     .param num a
     .param num b
     $I0 = iseq a, b
@@ -20,7 +20,7 @@
 .end
 
 
-.sub 'infix:!='
+.sub 'infix:!=' :multi(_,_)
     .param num a
     .param num b
     $I0 = isne a, b
@@ -28,7 +28,7 @@
 .end
 
 
-.sub 'infix:<'
+.sub 'infix:<' :multi(_,_)
     .param num a
     .param num b
     $I0 = islt a, b
@@ -36,7 +36,7 @@
 .end
 
 
-.sub 'infix:<='
+.sub 'infix:<=' :multi(_,_)
     .param num a
     .param num b
     $I0 = isle a, b
@@ -44,7 +44,7 @@
 .end
 
 
-.sub 'infix:>'
+.sub 'infix:>' :multi(_,_)
     .param num a
     .param num b
     $I0 = isgt a, b
@@ -52,7 +52,7 @@
 .end
 
 
-.sub 'infix:>='
+.sub 'infix:>=' :multi(_,_)
     .param num a
     .param num b
     $I0 = isge a, b
@@ -68,7 +68,7 @@
 .end
 
 
-.sub 'infix:eq'
+.sub 'infix:eq' :multi(_,_)
     .param string a
     .param string b
     $I0 = iseq a, b
@@ -76,7 +76,7 @@
 .end
 
 
-.sub 'infix:ne'
+.sub 'infix:ne' :multi(_,_)
     .param string a
     .param string b
     $I0 = isne a, b
@@ -84,7 +84,7 @@
 .end
 
 
-.sub 'infix:lt'
+.sub 'infix:lt' :multi(_,_)
     .param string a
     .param string b
     $I0 = islt a, b
@@ -92,7 +92,7 @@
 .end
 
 
-.sub 'infix:le'
+.sub 'infix:le' :multi(_,_)
     .param string a
     .param string b
     $I0 = isle a, b
@@ -100,7 +100,7 @@
 .end
 
 
-.sub 'infix:gt'
+.sub 'infix:gt' :multi(_,_)
     .param string a
     .param string b
     $I0 = isgt a, b
@@ -108,7 +108,7 @@
 .end
 
 
-.sub 'infix:ge'
+.sub 'infix:ge' :multi(_,_)
     .param string a
     .param string b
     $I0 = isge a, b

Modified: trunk/languages/perl6/src/builtins/junction.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/junction.pir     (original)
+++ trunk/languages/perl6/src/builtins/junction.pir     Mon Dec 31 11:39:08 2007
@@ -55,7 +55,7 @@
 
     junc."!values"(args)
     junc."!type"(JUNCTION_TYPE_ANY)
-    
+
     .return (junc)
 .end
 
@@ -115,11 +115,711 @@
 
     junc."!values"(args)
     junc."!type"(JUNCTION_TYPE_NONE)
-    
     .return (junc)
 .end
 
 
+=item C<infix:**(...)>
+
+Override exponentiation for junctions.
+
+=cut
+
+.sub 'infix:**' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:**'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:**' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:**'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:**' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:**'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:%(...)>
+
+Override modulo for junctions.
+
+=cut
+
+.sub 'infix:%' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:%'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:%' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:%'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:%' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:%'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:/(...)>
+
+Override division for junctions.
+
+=cut
+
+.sub 'infix:/' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:/'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:/' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:/'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:/' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:/'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:*(...)>
+
+Override multiply for junctions.
+
+=cut
+
+.sub 'infix:*' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:*'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:*' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:*'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:*' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:*'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:x(...)>
+
+Override repeat for junctions.
+
+=cut
+
+.sub 'infix:x' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:x'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:x' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:x'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:x' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:x'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:xx(...)>
+
+Override array repeat for junctions.
+
+=cut
+
+.sub 'infix:xx' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:xx'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:xx' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:xx'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:xx' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:xx'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:+(...)>
+
+Override addition for junctions.
+
+=cut
+
+.sub 'infix:+' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:+'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:+' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:+'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:+' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:+'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:-(...)>
+
+Override subtraction for junctions.
+
+=cut
+
+.sub 'infix:-' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global 'infix:-'
+    $P1 = infix_junction_helper($P0, j1, j2)
+    .return ($P1)
+.end
+
+.sub 'infix:-' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global 'infix:-'
+    $P1 = infix_junction_helper($P0, j, x)
+    .return ($P1)
+.end
+
+.sub 'infix:-' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global 'infix:-'
+    $P1 = infix_junction_helper($P0, j, x, 1)
+    .return ($P1)
+.end
+
+
+=item C<infix:==(...)>
+
+Override numerical equality for junctions.
+
+=cut
+
+.sub 'infix:==' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:=="
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:==' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:=="
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:==' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:=="
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:!=(...)>
+
+Override numerical inequality for junctions.
+
+=cut
+
+.sub 'infix:!=' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:!="
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:!=' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:!="
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:!=' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:!="
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:>(...)>
+
+Override numerical greater than for junctions.
+
+=cut
+
+.sub 'infix:>' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:>"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:>' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:>"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:>' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:>"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:<(...)>
+
+Override numerical less than for junctions.
+
+=cut
+
+.sub 'infix:<' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:<"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:<' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:<"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:<' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:<"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:>=(...)>
+
+Override numerical greater than or equal to for junctions.
+
+=cut
+
+.sub 'infix:>=' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:>="
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:>=' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:>="
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:>=' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:>="
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:<=(...)>
+
+Override numerical less than or equal to for junctions.
+
+=cut
+
+.sub 'infix:<=' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:<="
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:<=' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:<="
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:<=' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:<="
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:eq(...)>
+
+Override string equality for junctions.
+
+=cut
+
+.sub 'infix:eq' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:eq"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:eq' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:eq"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:eq' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:eq"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:ne(...)>
+
+Override string inequality for junctions.
+
+=cut
+
+.sub 'infix:ne' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:ne"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:ne' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:ne"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:ne' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:ne"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:lt(...)>
+
+Override string less than for junctions.
+
+=cut
+
+.sub 'infix:lt' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:lt"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:lt' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:lt"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:lt' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:lt"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:gt(...)>
+
+Override string greater than for junctions.
+
+=cut
+
+.sub 'infix:gt' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:gt"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:gt' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:gt"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:gt' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:gt"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:le(...)>
+
+Override string less than or equal for junctions.
+
+=cut
+
+.sub 'infix:le' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:le"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:le' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:le"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:le' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:le"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+=item C<infix:ge(...)>
+
+Override string greater than or equal for junctions.
+
+=cut
+
+.sub 'infix:ge' :multi('Junction','Junction')
+    .param pmc j1
+    .param pmc j2
+    $P0 = find_global "infix:ge"
+    .return junction_comparrison_helper($P0, j1, j2, 0)
+.end
+
+.sub 'infix:ge' :multi('Junction',_)
+    .param pmc j
+    .param pmc x
+    $P0 = find_global "infix:ge"
+    .return junction_comparrison_helper($P0, j, x, 0)
+.end
+
+.sub 'infix:ge' :multi(_,'Junction')
+    .param pmc x
+    .param pmc j
+    $P0 = find_global "infix:ge"
+    .return junction_comparrison_helper($P0, j, x, 1)
+.end
+
+
+# Helper sub for applying non-comparative infixes to junctions.
+.sub infix_junction_helper :anon
+    .param pmc op_sub
+    .param pmc j
+    .param pmc x
+    .param int second_arg :optional
+
+    # Build hash of results, to ensure we are unique.
+    .local pmc ResultHash
+    ResultHash = new 'Hash'
+
+    # Loop over and call multiply on each value.
+    # Get values array.
+    .local pmc values
+    values = j.'values'()
+
+    # Loop over it and call inc on each element.
+    .local int count
+    .local int i
+    .local pmc cur_elem
+    count = elements values
+    i = 0
+loop:
+    if i >= count goto loop_end
+    cur_elem = values[i]
+    if second_arg goto sa
+    $P0 = op_sub(cur_elem, x)
+    goto nsa
+sa:
+    $P0 = op_sub(x, cur_elem)
+nsa:
+    ResultHash[$P0] = 1
+    inc i
+    goto loop
+loop_end:
+    
+    # Build junction of results.
+    .local pmc new_junc
+    .local pmc new_values
+    .local pmc iterator
+    .local pmc type
+    
+    new_junc = new 'Junction'
+    type = j.'!type'()
+    new_junc.'!type'(type)
+    
+    new_values = new 'List'
+    iterator = iter ResultHash
+nv_loop:
+    unless iterator goto nv_loop_end
+    $P0 = shift iterator
+    push new_values, $P0
+    goto nv_loop
+nv_loop_end:
+    new_junc.'!values'(new_values)
+    
+    .return(new_junc)
+.end
+
+# Helper sub for junction comparrisons.
+.sub junction_comparrison_helper :anon
+    .param pmc op_func
+    .param pmc j
+    .param pmc x
+    .param int second_arg
+    
+    # We need to find how many values are equal.
+    .local pmc values
+    .local int num_equal
+    .local int count
+    .local int i
+    values = j.'values'()
+    count = elements values
+    i = 0
+    num_equal = 0
+loop:
+    if i >= count goto end_loop
+    $P0 = values[i]
+    if second_arg goto sa
+    $I0 = op_func($P0, x)
+    goto not_sa
+sa:
+    $I0 = op_func(x, $P0)
+not_sa:
+    num_equal += $I0
+    inc i
+    goto loop
+end_loop:
+    
+    # Now go by juction type.
+    .local int type
+    type = j.'!type'()
+    if type == JUNCTION_TYPE_ALL goto all
+    if type == JUNCTION_TYPE_ANY goto any
+    if type == JUNCTION_TYPE_ONE goto one
+    if type == JUNCTION_TYPE_NONE goto none
+
+all:
+    if num_equal == count goto ret_true
+    goto ret_false
+any:
+    if num_equal > 0 goto ret_true
+    goto ret_false
+one:
+    if num_equal == 1 goto ret_true
+    goto ret_false
+none:
+    if num_equal == 0 goto ret_true
+    goto ret_false
+
+ret_true:
+    .return(1)
+ret_false:
+    .return(0)
+.end
+
+
 =back
 
 =cut

Modified: trunk/languages/perl6/src/builtins/op.pir
==============================================================================
--- trunk/languages/perl6/src/builtins/op.pir   (original)
+++ trunk/languages/perl6/src/builtins/op.pir   Mon Dec 31 11:39:08 2007
@@ -43,7 +43,7 @@
 
 
 ## exponentiation
-.sub 'infix:**'
+.sub 'infix:**' :multi(_,_)
     .param num base
     .param num exp
     $N0 = pow base, exp
@@ -115,23 +115,23 @@
 
 
 ## multiplicative
-.sub 'infix:*'
+.sub 'infix:*' :multi(_,_)
     .param pmc a
     .param pmc b
-    $P0 = mul a, b
+    $P0 = n_mul a, b
     .return ($P0)
 .end
 
 
-.sub 'infix:/'
+.sub 'infix:/' :multi(_,_)
     .param pmc a
     .param pmc b
-    $P0 = div a, b
+    $P0 = n_div a, b
     .return ($P0)
 .end
 
 
-.sub 'infix:%'
+.sub 'infix:%' :multi(_,_)
     .param num a
     .param num b
     $N0 = mod a, b
@@ -139,7 +139,7 @@
 .end
 
 
-.sub 'infix:x'
+.sub 'infix:x' :multi(_,_)
     .param string a
     .param int b
     $S0 = repeat a, b
@@ -147,7 +147,7 @@
 .end
 
 
-.sub 'infix:xx'
+.sub 'infix:xx' :multi(_,_)
     .param string a
     .param int b
     $P0 = new 'ResizablePMCArray'
@@ -197,18 +197,18 @@
 
 
 ## additive
-.sub 'infix:+'
+.sub 'infix:+' :multi(_,_)
     .param pmc a
     .param pmc b
-    $P0 = add a, b
+    $P0 = n_add a, b
     .return ($P0)
 .end
 
 
-.sub 'infix:-'
+.sub 'infix:-' :multi(_,_)
     .param pmc a
     .param pmc b
-    $P0 = sub a, b
+    $P0 = n_sub a, b
     .return ($P0)
 .end
 

Modified: trunk/languages/perl6/src/classes/Junction.pir
==============================================================================
--- trunk/languages/perl6/src/classes/Junction.pir      (original)
+++ trunk/languages/perl6/src/classes/Junction.pir      Mon Dec 31 11:39:08 2007
@@ -60,8 +60,8 @@
 
 .sub '!type' :method
     .param pmc type     :optional
-    .param int got_type :optional
-    if got_type goto ret_type
+    .param int got_type :opt_flag
+    unless got_type goto ret_type
     setattribute self, "$type", type
     .return()
 ret_type:
@@ -114,64 +114,6 @@
 .end
 
 
-=item inc
-
-Increment v-table method.
-
-=cut
-
-.sub 'increment' :method :vtable
-    .local pmc values
-    .local pmc elem
-    .local int count
-    .local int i
-
-    # Get values array.
-    values = getattribute self, "@values"
-
-    # Loop over it and call inc on each element.
-    count = elements values
-    i = 0
-loop:
-    if i >= count goto loop_end
-    elem = values[i]
-    inc elem
-    values[i] = elem
-    inc i
-    goto loop
-loop_end:
-.end
-
-
-=item dec
-
-Decrement v-table method.
-
-=cut
-
-.sub 'decrement' :method :vtable
-    .local pmc values
-    .local pmc elem
-    .local int count
-    .local int i
-
-    # Get values array.
-    values = getattribute self, "@values"
-
-    # Loop over it and call dec on each element.
-    count = elements values
-    i = 0
-loop:
-    if i >= count goto loop_end
-    elem = values[i]
-    dec elem
-    values[i] = elem
-    inc i
-    goto loop
-loop_end:
-.end
-
-
 =back
 
 =cut

Modified: trunk/languages/perl6/src/parser/grammar-oper.pg
==============================================================================
--- trunk/languages/perl6/src/parser/grammar-oper.pg    (original)
+++ trunk/languages/perl6/src/parser/grammar-oper.pg    Mon Dec 31 11:39:08 2007
@@ -21,15 +21,9 @@
     { ... }
 
 ## multiplicative operators
-proto infix:<*> is precedence('u=')
-    is pirop('n_mul')
-    { ... }
-proto infix:</> is equiv(infix:<*>)
-    is pirop('n_div')
-    { ... }
-proto infix:<%> is equiv(infix:<*>)
-    is pirop('n_mod')
-    { ... }
+proto infix:<*> is precedence('u=') { ... }
+proto infix:</> is equiv(infix:<*>) { ... }
+proto infix:<%> is equiv(infix:<*>) { ... }
 proto infix:<+&> is equiv(infix:<*>) { ... }
 proto infix:<+^> is equiv(infix:<*>) { ... }
 proto infix:Â+<Â is equiv(infix:<*>) { ... }
@@ -42,12 +36,8 @@
 proto infix:<mod> is equiv(infix:<*>) { ... }
 
 ## additive operators
-proto infix:<+> is precedence('t=')
-    is pirop('n_add')
-    { ... }
-proto infix:<-> is equiv(infix:<+>)
-    is pirop('n_sub')
-    { ... }
+proto infix:<+> is precedence('t=') { ... }
+proto infix:<-> is equiv(infix:<+>) { ... }
 proto infix:<+|> is equiv(infix:<+>) { ... }
 proto infix:<+^> is equiv(infix:<+>) { ... }
 proto infix:<~|> is equiv(infix:<+>) { ... }

<Prev in Thread] Current Thread [Next in Thread>
  • [svn:parrot] r24354 - in trunk/languages/perl6/src: builtins classes parser, jonathan <=