Skip to content

Commit

Permalink
add a lot of coercive numeric operators
Browse files Browse the repository at this point in the history
  • Loading branch information
moritz committed Jun 11, 2011
1 parent 4df27a3 commit 2a50310
Showing 1 changed file with 63 additions and 0 deletions.
63 changes: 63 additions & 0 deletions src/core/operators.pm
Expand Up @@ -53,6 +53,9 @@ multi prefix:<abs>(Int \$a) {
multi prefix:<abs>(Num \$a) {
pir::perl6_box_num__PN(pir::abs__II(pir::repr_unbox_num__NP($a)))
}
multi prefix:<abs>(\$a) {
abs $a.Numeric
}

proto infix:<*>(|$) { * }
multi infix:<*>(Int \$a, Int \$b) {
Expand All @@ -63,6 +66,12 @@ multi infix:<*>(Num \$a, Num \$b) {
pir::perl6_box_num__PN(
pir::mul__NNN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix:<*>(\$a, \$b) {
$a.Numeric * $b.Numeric
}
multi infix:<*>(Real \$a, Real \$b) {
$a.Bridge * $b.Bridge
}

proto infix:</>(|$) { * }
multi infix:</>(Int \$a, Int \$b) {
Expand All @@ -73,6 +82,12 @@ multi infix:</>(Num \$a, Num \$b) {
pir::perl6_box_num__PN(
pir::div__NNN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix:</>(\$a, \$b) {
$a.Numeric / $b.Numeric
}
multi infix:</>(Real \$a, Real \$b) {
$a.Bridge / $b.Bridge
}

proto infix:<%>(|$) { * }
multi infix:<%>(Int \$a, Int \$b) {
Expand All @@ -83,6 +98,12 @@ multi infix:<%>(Num \$a, Num \$b) {
pir::perl6_box_num__PN(
pir::mod__NNN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix:<%>(\$a, \$b) {
$a.Numeric % $b.Numeric
}
multi infix:<%>(Real \$a, Real \$b) {
$a.Bridge % $b.Bridge
}

proto infix:<~>(|$) { * }
multi infix:<~>(Str \$a, Str \$b) {
Expand All @@ -103,6 +124,12 @@ multi infix:<==>(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::iseq__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix:<==>(\$a, \$b) {
$a.Numeric == $b.Numeric
}
multi infix:<==>(Real \$a, Real \$b) {
$a.Bridge == $b.Bridge
}

proto infix:<!=>(|$) { * }
multi infix:<!=>(Int \$a, Int \$b) {
Expand All @@ -113,6 +140,12 @@ multi infix:<!=>(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::isne__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix:<!=>(\$a, \$b) {
$a.Numeric != $b.Numeric
}
multi infix:<!=>(Real \$a, Real \$b) {
$a.Bridge != $b.Bridge
}

proto infix:«<»(|$) { * }
multi infix<»(Int \$a, Int \$b) {
Expand All @@ -123,6 +156,12 @@ multi infix:«<»(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::islt__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix<»(\$a, \$b) {
$a.Numeric < $b.Numeric
}
multi infix<»(Real \$a, Real \$b) {
$a.Bridge < $b.Bridge
}

proto infix:«<=»(|$) { * }
multi infix<=»(Int \$a, Int \$b) {
Expand All @@ -133,6 +172,12 @@ multi infix:«<=»(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::isle__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix<=»(\$a, \$b) {
$a.Numeric <= $b.Numeric
}
multi infix<=»(Real \$a, Real \$b) {
$a.Bridge <= $b.Bridge
}

proto infix:«>»(|$) { * }
multi infix>»(Int \$a, Int \$b) {
Expand All @@ -143,6 +188,12 @@ multi infix:«>»(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::isgt__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix>»(\$a, \$b) {
$a.Numeric > $b.Numeric
}
multi infix>»(Real \$a, Real \$b) {
$a.Bridge > $b.Bridge
}

proto infix:«>=»(|$) { * }
multi infix>=»(Int \$a, Int \$b) {
Expand All @@ -153,6 +204,12 @@ multi infix:«>=»(Num \$a, Num \$b) {
pir::perl6_booleanize__PI(
pir::isge__INN(pir::repr_unbox_num__NP($a), pir::repr_unbox_num__NP($b)))
}
multi infix>=»(\$a, \$b) {
$a.Numeric >= $b.Numeric
}
multi infix>=»(Real \$a, Real \$b) {
$a.Bridge >= $b.Bridge
}

proto infix:<eq>(|$) { * }
multi infix:<eq>(Str \$a, Str \$b) {
Expand Down Expand Up @@ -329,3 +386,9 @@ multi infix:<**>(Num \$a, Num \$b) {
multi infix:<**>(Int \$a, Int \$b) {
pir::perl6_box_int__PI(pir::set__IN(pir::pow__NNN(pir::repr_unbox_int__IP($a), pir::repr_unbox_int__IP($b))));
}
multi infix:<**>(\$a, \$b) {
$a.Numeric ** $b.Numeric
}
multi infix:<**>(Real \$a, Real \$b) {
$a.Bridge ** $b.Bridge
}

0 comments on commit 2a50310

Please sign in to comment.