Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
more native int ops
  • Loading branch information
moritz committed Oct 5, 2011
1 parent 90c4020 commit ad8f64a
Showing 1 changed file with 58 additions and 0 deletions.
58 changes: 58 additions & 0 deletions src/core/Int.pm
Expand Up @@ -155,22 +155,40 @@ multi infix:<gcd>(int $a, int $b) returns int {
multi infix:<cmp>(Int:D \$a, Int:D \$b) {
nqp::p6box_i(nqp::cmp_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<cmp>(int $a, int $b) {
nqp::want(nqp::p6box_i(nqp::cmp_i($a, $b)),
'Ii', nqp::cmp_i($a, $b));
}

multi infix:«<=>»(Int:D \$a, Int:D \$b) {
nqp::p6box_i(nqp::cmp_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:«<=>»(int $a, int $b) {
nqp::want(nqp::p6box_i(nqp::cmp_i($a, $b)),
'Ii', nqp::cmp_i($a, $b));
}

multi infix:<===>(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::iseq_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<===>(int $a, int $b) {
# hey, the optimizer is smart enough to figure that one out for us, no?
$a == $b
}

multi infix:<==>(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::iseq_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<==>(int $a, int $b) {
nqp::p6bool(nqp::iseq_i($a, $b))
}

multi infix:<!=>(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::isne_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<!=>(int \$a, int \$b) {
nqp::p6bool(nqp::isne_i($a, $b))
}

multi infix<»(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::islt_i(nqp::unbox_i($a), nqp::unbox_i($b)))
Expand All @@ -182,39 +200,79 @@ multi infix:«<»(int $a, int $b) {
multi infix<=»(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::isle_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix<=»(int $a, int $b) {
nqp::p6bool(nqp::isle_i($a, $b))
}

multi infix>»(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::isgt_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix>»(int $a, int $b) {
nqp::p6bool(nqp::isgt_i($a, $b))
}

multi infix>=»(Int:D \$a, Int:D \$b) {
nqp::p6bool(nqp::isge_i(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix>=»(int $a, int $b) {
nqp::p6bool(nqp::isge_i($a, $b))
}

multi infix:<+|>(Int:D \$a, Int:D \$b) {
nqp::p6box_i(pir::bor__III(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<+|>(int $a, int $b) {
nqp::want(nqp::p6box_i(pir::bor__III($a, $b)),
'Ii', pir::bor__III($a, $b)
);
}

multi infix:<+&>(Int:D \$a, Int:D \$b) {
nqp::p6box_i(pir::band__III(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<+&>(int $a, int $b) {
nqp::want(nqp::p6box_i(pir::band__III($a, $b)),
'Ii', pir::band__III($a, $b)
);
}

multi infix:<+^>(Int:D \$a, Int:D \$b) {
nqp::p6box_i(pir::bxor__III(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix:<+^>(int $a, int $b) {
nqp::want(nqp::p6box_i(pir::bxor__III($a, $b)),
'Ii', pir::bxor__III($a, $b)
);
}

multi infix+<»(Int:D \$a, Int:D \$b) {
nqp::p6box_i(pir::shl__III(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix+<»(int $a, int $b) {
nqp::want(nqp::p6box_i(pir::shl__III($a, $b)),
'Ii', pir::shl__III($a, $b))
}

multi infix+>»(Int:D \$a, Int:D \$b) {
nqp::p6box_i(pir::shr__III(nqp::unbox_i($a), nqp::unbox_i($b)))
}
multi infix+>»(int $a, int $b) {
nqp::want(nqp::p6box_i(pir::shr__III($a, $b)),
'Ii', pir::shr__III($a, $b))
}

multi prefix:<+^>(Int:D \$a) {
nqp::p6box_i(pir::bnot__II(nqp::unbox_i($a)))
}
multi prefix:<+^>(int $a) {
nqp::want(nqp::p6box_i(pir::bnot__II($a)),
'Ii', pir::bnot__II($a));
}

proto sub chr($) {*}
multi sub chr(Int:D \$x) { $x.chr }
multi sub chr(Cool \$x) { $x.Int.chr }
multi sub chr(int $x) {
nqp::want(nqp::p6box_s(nqp::chr($x)),
'Ss', nqp::chr($x));
}

0 comments on commit ad8f64a

Please sign in to comment.