Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Move infix:<*>, infix:</>, and infix:<**> to setting.
  • Loading branch information
pmichaud committed Aug 27, 2009
1 parent 93cd932 commit 4276205
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 99 deletions.
3 changes: 1 addition & 2 deletions build/gen_junction_pir.pl
Expand Up @@ -6,8 +6,7 @@
use warnings;

my @binary = qw(
infix:**
infix:* infix:/ infix:% infix:div infix:mod
infix:% infix:div infix:mod
infix:~
infix:== infix:!= infix:< infix:> infix:<= infix:>=
infix:eq infix:ne infix:lt infix:gt infix:le infix:ge
Expand Down
2 changes: 1 addition & 1 deletion build/gen_whatever_pir.pl
Expand Up @@ -6,7 +6,7 @@
use warnings;

my @ops = qw(
infix:** infix:* infix:/ infix:% infix:div infix:mod
infix:% infix:div infix:mod
infix:== infix:!= infix:< infix:> infix:<= infix:>= infix:<=>
infix:.. infix:^.. infix:..^ infix:^..^
prefix:+ prefix:- prefix:~ prefix:? prefix:! prefix:^
Expand Down
55 changes: 0 additions & 55 deletions src/builtins/op.pir
Expand Up @@ -92,23 +92,6 @@ src/builtins/op.pir - Perl 6 builtin operators
.end


## exponentiation
.sub 'infix:**' :multi(_,_)
.param num base
.param num exp
$N0 = pow base, exp
.return ($N0)
.end


.sub 'infix:**' :multi(Integer,Integer)
.param num base
.param num exp
$N0 = pow base, exp
.tailcall '!upgrade_to_num_if_needed'($N0)
.end


## symbolic unary
.sub 'prefix:!' :multi(_)
.param pmc a
Expand Down Expand Up @@ -175,44 +158,6 @@ src/builtins/op.pir - Perl 6 builtin operators
## TODO: prefix:= prefix:* prefix:** prefix:~^ prefix:+^


## multiplicative
.sub 'infix:*' :multi(_,_)
.param num a
.param num b
$N0 = a * b
.return ($N0)
.end


.sub 'infix:*' :multi(Integer,Integer)
.param num a
.param num b
$N0 = a * b
.tailcall '!upgrade_to_num_if_needed'($N0)
.end


.sub 'infix:/' :multi(_,_)
.param num a
.param num b
$N0 = a / b
.return ($N0)
.end


.sub 'infix:/' :multi(Integer,Integer)
.param num a
.param num b
$N0 = a / b
$I0 = floor $N0
$N1 = $N0 - $I0
if $N1 != 0 goto upgrade
.tailcall '!upgrade_to_num_if_needed'($N0)
upgrade:
.return ($N0)
.end


.sub 'infix:%' :multi(_,_)
.param num a
.param num b
Expand Down
41 changes: 0 additions & 41 deletions src/classes/Complex.pir
Expand Up @@ -184,47 +184,6 @@ Casts a value to a complex number.
.end


=item infix:*

=cut

.sub 'infix:*' :multi('Complex', _)
.param pmc a
.param pmc b
b = b.'Complex'()
mul $P0, a, b
.return ($P0)
.end

.sub 'infix:*' :multi(_, 'Complex')
.param pmc a
.param pmc b
a = a.'Complex'()
mul $P0, a, b
.return ($P0)
.end


=item infix:/

=cut

.sub 'infix:/' :multi('Complex', _)
.param pmc a
.param pmc b
b = b.'Complex'()
div $P0, a, b
.return ($P0)
.end

.sub 'infix:/' :multi(_, 'Complex')
.param pmc a
.param pmc b
a = a.'Complex'()
div $P0, a, b
.return ($P0)
.end

=item re

=cut
Expand Down
44 changes: 44 additions & 0 deletions src/setting/Complex.pm
Expand Up @@ -42,5 +42,49 @@ multi sub infix:<->($a, Complex $b) {
}
}
multi sub infix:<*>(Complex $a, $b) is default {
Q:PIR {
$P0 = find_lex '$a'
$P1 = find_lex '$b'
$P1 = $P1.'Complex'()
$P0 = deobjectref $P0
$P1 = deobjectref $P1
%r = mul $P0, $P1
}
}
multi sub infix:<*>($a, Complex $b) {
Q:PIR {
$P0 = find_lex '$a'
$P0 = $P0.'Complex'()
$P1 = find_lex '$b'
$P0 = deobjectref $P0
$P1 = deobjectref $P1
%r = mul $P0, $P1
}
}
multi sub infix:</>(Complex $a, $b) is default {
Q:PIR {
$P0 = find_lex '$a'
$P1 = find_lex '$b'
$P1 = $P1.'Complex'()
$P0 = deobjectref $P0
$P1 = deobjectref $P1
%r = div $P0, $P1
}
}
multi sub infix:</>($a, Complex $b) {
Q:PIR {
$P0 = find_lex '$a'
$P0 = $P0.'Complex'()
$P1 = find_lex '$b'
$P0 = deobjectref $P0
$P1 = deobjectref $P1
%r = div $P0, $P1
}
}
# vim: ft=perl6
72 changes: 72 additions & 0 deletions src/setting/Operators.pm
Expand Up @@ -131,5 +131,77 @@ multi sub infix:<->(Int $a, Int $b) {
}
}
multi sub infix:<*>($a, $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = $N0 * $N1
%r = box $N2
}
}
multi sub infix:<*>(Int $a, Int $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = $N0 * $N1
%r = '!upgrade_to_num_if_needed'($N2)
}
}
multi sub infix:</>($a, $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = $N0 / $N1
%r = box $N2
}
}
multi sub infix:</>(Int $a, Int $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = $N0 / $N1
$I2 = floor $N2
$N3 = $N2 - $I2
if $N3 != 0 goto notint
%r = '!upgrade_to_num_if_needed'($N2)
goto done
notint:
%r = box $N2
done:
}
}

multi sub infix:<**>($a, $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = pow $N0, $N1
%r = box $N2
}
}
multi sub infix:<**>(Int $a, Int $b) {
Q:PIR {
$P0 = find_lex '$a'
$N0 = $P0
$P1 = find_lex '$b'
$N1 = $P1
$N2 = pow $N0, $N1
%r = '!upgrade_to_num_if_needed'($N2)
}
}
# vim: ft=perl6
27 changes: 27 additions & 0 deletions src/setting/Whatever.pm
Expand Up @@ -35,4 +35,31 @@ multi sub infix:<->($a, Whatever $b)
multi sub infix:<->($a, Whatever $b)
{ WhateverCodeX('infix:-', $a, $b) }

multi sub infix:<*>(Whatever $a, $b) is default
{ WhateverCodeX('infix:*', $a, $b) }
multi sub infix:<*>(WhateverCode $a, $b) is default
{ WhateverCodeX('infix:*', $a, $b) }
multi sub infix:<*>($a, Whatever $b)
{ WhateverCodeX('infix:*', $a, $b) }
multi sub infix:<*>($a, Whatever $b)
{ WhateverCodeX('infix:*', $a, $b) }

multi sub infix:</>(Whatever $a, $b) is default
{ WhateverCodeX('infix:/', $a, $b) }
multi sub infix:</>(WhateverCode $a, $b) is default
{ WhateverCodeX('infix:/', $a, $b) }
multi sub infix:</>($a, Whatever $b)
{ WhateverCodeX('infix:/', $a, $b) }
multi sub infix:</>($a, Whatever $b)
{ WhateverCodeX('infix:/', $a, $b) }

multi sub infix:<**>(Whatever $a, $b) is default
{ WhateverCodeX('infix:**', $a, $b) }
multi sub infix:<**>(WhateverCode $a, $b) is default
{ WhateverCodeX('infix:**', $a, $b) }
multi sub infix:<**>($a, Whatever $b)
{ WhateverCodeX('infix:**', $a, $b) }
multi sub infix:<**>($a, Whatever $b)
{ WhateverCodeX('infix:**', $a, $b) }

# vim: ft=perl6

0 comments on commit 4276205

Please sign in to comment.