From dbca2eee60410606ea83fab61699010bdba07cc9 Mon Sep 17 00:00:00 2001 From: Stefan Seifert Date: Tue, 14 Aug 2018 15:22:59 +0200 Subject: [PATCH] Replace use of p6bool by hllbool and hllboolfor hllbool is less magic than p6bool so a couple of places have to convert the values to an int64 first, but that seems to make the code more explicit anyway. --- lib/Telemetry.pm6 | 10 +-- src/Perl6/Actions.nqp | 8 +-- src/Perl6/Metamodel/BOOTSTRAP.nqp | 35 +++++------ src/Perl6/Metamodel/DefiniteHOW.nqp | 7 ++- src/Perl6/Metamodel/MROBasedTypeChecking.nqp | 2 +- src/Perl6/Metamodel/SubsetHOW.nqp | 10 +-- src/Perl6/Optimizer.nqp | 12 ++-- src/Perl6/World.nqp | 2 +- src/core/Any.pm6 | 6 +- src/core/Argfiles.pm6 | 2 +- src/core/Backtrace.pm6 | 2 +- src/core/Baggy.pm6 | 10 +-- src/core/Bool.pm6 | 14 ++--- src/core/Buf.pm6 | 22 +++---- src/core/Capture.pm6 | 8 +-- src/core/Cool.pm6 | 6 +- src/core/Enumeration.pm6 | 2 +- src/core/Failure.pm6 | 2 +- src/core/Hash.pm6 | 4 +- src/core/IO/CatHandle.pm6 | 8 +-- src/core/IO/Handle.pm6 | 6 +- src/core/IO/Path.pm6 | 8 +-- src/core/IO/Spec/Cygwin.pm6 | 2 +- src/core/IO/Spec/Unix.pm6 | 6 +- src/core/IO/Spec/Win32.pm6 | 4 +- src/core/Int.pm6 | 30 ++++----- src/core/Junction.pm6 | 10 +-- src/core/List.pm6 | 10 +-- src/core/Main.pm6 | 2 +- src/core/Map.pm6 | 11 ++-- src/core/Match.pm6 | 2 +- src/core/Metamodel/Primitives.pm6 | 2 +- src/core/Mu.pm6 | 18 +++--- src/core/Num.pm6 | 30 ++++----- src/core/Numeric.pm6 | 4 +- src/core/Pair.pm6 | 2 +- src/core/Parameter.pm6 | 26 ++++---- src/core/Promise.pm6 | 2 +- src/core/PseudoStash.pm6 | 2 +- src/core/REPL.pm6 | 4 +- src/core/Rakudo/Internals.pm6 | 6 +- src/core/Rakudo/Iterator.pm6 | 30 ++++----- src/core/Rakudo/QuantHash.pm6 | 2 +- src/core/Range.pm6 | 16 ++--- src/core/Rational.pm6 | 4 +- src/core/Regex.pm6 | 2 +- src/core/Routine.pm6 | 6 +- src/core/Scalar.pm6 | 2 +- src/core/Semaphore.pm6 | 2 +- src/core/Seq.pm6 | 2 +- src/core/Set.pm6 | 2 +- src/core/SetHash.pm6 | 9 +-- src/core/Setty.pm6 | 8 +-- src/core/Shaped1Array.pm6 | 6 +- src/core/Shaped2Array.pm6 | 4 +- src/core/Shaped3Array.pm6 | 4 +- src/core/ShapedArray.pm6 | 2 +- src/core/Signature.pm6 | 4 +- src/core/Str.pm6 | 50 +++++++-------- src/core/Stringy.pm6 | 2 +- src/core/Thread.pm6 | 2 +- src/core/ThreadPoolScheduler.pm6 | 2 +- src/core/Uni.pm6 | 6 +- src/core/Version.pm6 | 6 +- src/core/metaops.pm6 | 2 +- src/core/native_array.pm6 | 52 ++++++++-------- src/core/set_elem.pm6 | 64 +++++++++++--------- src/core/set_precedes.pm6 | 2 +- src/core/set_proper_subset.pm6 | 6 +- src/vm/moar/Perl6/Ops.nqp | 3 +- tools/build/makeNATIVE_SHAPED_ARRAY.p6 | 14 ++--- 71 files changed, 341 insertions(+), 334 deletions(-) diff --git a/lib/Telemetry.pm6 b/lib/Telemetry.pm6 index 65a3f6b1659..43ebf60702b 100644 --- a/lib/Telemetry.pm6 +++ b/lib/Telemetry.pm6 @@ -205,7 +205,7 @@ HEADER } method EXISTS-KEY(Str:D $key) { - nqp::p6bool(nqp::existskey($dispatch,$key)) + nqp::hllbool(nqp::existskey($dispatch,$key)) } method !snap() is raw { @@ -272,7 +272,7 @@ HEADER } method EXISTS-KEY(Str:D $key) { - nqp::p6bool(nqp::existskey($dispatch,$key)) + nqp::hllbool(nqp::existskey($dispatch,$key)) } method !snap() is raw { Thread.usage } @@ -351,7 +351,7 @@ class Telemetry::Instrument::ThreadPool does Telemetry::Instrument { } method EXISTS-KEY(Str:D $key) { - nqp::p6bool(nqp::existskey($dispatch,$key)) + nqp::hllbool(nqp::existskey($dispatch,$key)) } method !snap() is raw { @@ -435,7 +435,7 @@ class Telemetry::Instrument::AdHoc does Telemetry::Instrument { } method EXISTS-KEY(Str:D $key) { - nqp::p6bool( + nqp::hllbool( nqp::existskey( nqp::getattr( $!instrument,Telemetry::Instrument::AdHoc,'$!dispatch'), @@ -620,7 +620,7 @@ class Telemetry does Associative { } method EXISTS-KEY($key) { - nqp::p6bool( + nqp::hllbool( nqp::existskey( nqp::getattr($!sampler,Telemetry::Sampler,'$!dispatcher'), $key diff --git a/src/Perl6/Actions.nqp b/src/Perl6/Actions.nqp index efceba37bec..003a14a9a69 100644 --- a/src/Perl6/Actions.nqp +++ b/src/Perl6/Actions.nqp @@ -2042,7 +2042,7 @@ class Perl6::Actions is HLL::Actions does STDActions { # Under "use fatal", re-write all calls to fatalize their return value # unless we can see they are in a boolean context. my %boolify_first_child_ops := nqp::hash( - 'if', 1, 'unless', 1, 'defor', 1, 'p6bool', 1, + 'if', 1, 'unless', 1, 'defor', 1, 'hllbool', 1, 'while', 1, 'until', 1, 'repeat_while', 1, 'repeat_until', 1, ); my %boolify_first_child_calls := nqp::hash( @@ -2953,7 +2953,7 @@ class Perl6::Actions is HLL::Actions does STDActions { } else { make make_pair($/,$*key, QAST::Op.new( - :op('p6bool'), + :op('hllbool'), QAST::IVal.new( :value($*value) ) )); } @@ -4344,7 +4344,7 @@ class Perl6::Actions is HLL::Actions does STDActions { # Cannot inline things with custom invocation handler or phasers. return 0 if nqp::can($code, 'CALL-ME'); my $phasers := nqp::getattr($code,$*W.find_symbol(['Block'], :setting-only),'$!phasers'); - return 0 unless nqp::isnull($phasers) || !nqp::p6bool($phasers); + return 0 unless nqp::isnull($phasers) || !nqp::hllbool($phasers); # Make sure the block has the common structure we expect # (decls then statements). @@ -5228,7 +5228,7 @@ class Perl6::Actions is HLL::Actions does STDActions { # If we have a refinement, make sure it's thunked if needed. If none, # just always true. my $refinement := make_where_block($, $ ?? $.ast !! - QAST::Op.new( :op('p6bool'), QAST::IVal.new( :value(1) ) )); + QAST::Op.new( :op('hllbool'), QAST::IVal.new( :value(1) ) )); # Create the meta-object. my $subset; diff --git a/src/Perl6/Metamodel/BOOTSTRAP.nqp b/src/Perl6/Metamodel/BOOTSTRAP.nqp index f8ca69583cc..069c4d4f346 100644 --- a/src/Perl6/Metamodel/BOOTSTRAP.nqp +++ b/src/Perl6/Metamodel/BOOTSTRAP.nqp @@ -1455,28 +1455,28 @@ BEGIN { Attribute, '$!auto_viv_container'); })); Attribute.HOW.add_method(Attribute, 'has_accessor', nqp::getstaticcode(sub ($self) { - nqp::p6bool(nqp::getattr_i(nqp::decont($self), - Attribute, '$!has_accessor')); + nqp::hllboolfor(nqp::getattr_i(nqp::decont($self), + Attribute, '$!has_accessor'), "perl6"); })); Attribute.HOW.add_method(Attribute, 'rw', nqp::getstaticcode(sub ($self) { - nqp::p6bool(nqp::getattr_i(nqp::decont($self), - Attribute, '$!rw')); + nqp::hllboolfor(nqp::getattr_i(nqp::decont($self), + Attribute, '$!rw'), "perl6"); })); Attribute.HOW.add_method(Attribute, 'set_rw', nqp::getstaticcode(sub ($self) { nqp::bindattr_i(nqp::decont($self), Attribute, '$!rw', 1); - nqp::p6bool(1) + nqp::hllboolfor(1, "perl6") })); Attribute.HOW.add_method(Attribute, 'set_readonly', nqp::getstaticcode(sub ($self) { nqp::bindattr_i(nqp::decont($self), Attribute, '$!ro', 1); - nqp::p6bool(1) + nqp::hllboolfor(1, "perl6") })); Attribute.HOW.add_method(Attribute, 'set_required', nqp::getstaticcode(sub ($self, $value) { $*W.add_object_if_no_sc($value); nqp::bindattr(nqp::decont($self), Attribute, '$!required', $value); - nqp::p6bool(1) + nqp::hllboolfor(1, "perl6") })); Attribute.HOW.add_method(Attribute, 'required', nqp::getstaticcode(sub ($self) { nqp::getattr(nqp::decont($self), @@ -1487,7 +1487,7 @@ BEGIN { unless nqp::getattr_i($dcself, Attribute, '$!ro') { nqp::bindattr_i($dcself, Attribute, '$!rw', 1); } - nqp::p6bool(1) + nqp::hllboolfor(1, "perl6") })); Attribute.HOW.add_method(Attribute, 'set_build', nqp::getstaticcode(sub ($self, $closure) { nqp::bindattr(nqp::decont($self), Attribute, '$!build_closure', $closure); @@ -1500,7 +1500,7 @@ BEGIN { Attribute.HOW.add_method(Attribute, 'set_box_target', nqp::getstaticcode(sub ($self) { nqp::bindattr_i(nqp::decont($self), Attribute, '$!box_target', 1); - nqp::p6bool(1) + nqp::hllboolfor(1, "perl6") })); Attribute.HOW.add_method(Attribute, 'box_target', nqp::getstaticcode(sub ($self) { nqp::getattr_i(nqp::decont($self), @@ -1524,7 +1524,7 @@ BEGIN { Attribute, '$!package'); my $build := nqp::getattr(nqp::decont($dcself), Attribute, '$!build_closure'); - nqp::p6bool($type.HOW.archetypes.generic || $package.HOW.archetypes.generic || nqp::defined($build)); + nqp::hllboolfor($type.HOW.archetypes.generic || $package.HOW.archetypes.generic || nqp::defined($build), "perl6"); })); Attribute.HOW.add_method(Attribute, 'instantiate_generic', nqp::getstaticcode(sub ($self, $type_environment) { my $dcself := nqp::decont($self); @@ -1772,7 +1772,7 @@ BEGIN { my $is_generic := $_.is_generic(); if $is_generic { return $is_generic } } - return nqp::p6bool(0); + return nqp::hllboolfor(0, "perl6"); })); Signature.HOW.add_method(Signature, 'instantiate_generic', nqp::getstaticcode(sub ($self, $type_environment) { # Go through parameters, builidng new list. If any @@ -1800,13 +1800,14 @@ BEGIN { Signature, '$!returns', nqp::decont($type)); })); Signature.HOW.add_method(Signature, 'has_returns', nqp::getstaticcode(sub ($self) { - nqp::p6bool( + nqp::hllboolfor( nqp::not_i( nqp::isnull( nqp::getattr(nqp::decont($self), Signature, '$!returns') ) - ) + ), + 'perl6' ); })); Signature.HOW.compose_repr(Signature); @@ -1843,8 +1844,8 @@ BEGIN { # If nonimnal type or attr_package is generic, so are we. my $type := nqp::getattr($self, Parameter, '$!nominal_type'); my $ap := nqp::getattr($self, Parameter, '$!attr_package'); - nqp::p6bool($type.HOW.archetypes.generic || - (!nqp::isnull($ap) && $ap.HOW.archetypes.generic)) + nqp::hllboolfor($type.HOW.archetypes.generic || + (!nqp::isnull($ap) && $ap.HOW.archetypes.generic), "perl6") })); Parameter.HOW.add_method(Parameter, 'instantiate_generic', nqp::getstaticcode(sub ($self, $type_environment) { # Clone with the type instantiated. @@ -2182,7 +2183,7 @@ BEGIN { Routine.HOW.add_method(Routine, 'is_dispatcher', nqp::getstaticcode(sub ($self) { my $dc_self := nqp::decont($self); my $disp_list := nqp::getattr($dc_self, Routine, '@!dispatchees'); - nqp::p6bool(nqp::defined($disp_list)); + nqp::hllboolfor(nqp::defined($disp_list), "perl6"); })); Routine.HOW.add_method(Routine, 'add_dispatchee', nqp::getstaticcode(sub ($self, $dispatchee) { my $dc_self := nqp::decont($self); @@ -3124,7 +3125,7 @@ BEGIN { })); Routine.HOW.add_method(Routine, 'rw', nqp::getstaticcode(sub ($self) { my $dcself := nqp::decont($self); - nqp::p6bool(nqp::getattr_i($dcself, Routine, '$!rw')); + nqp::hllboolfor(nqp::getattr_i($dcself, Routine, '$!rw'), "perl6"); })); Routine.HOW.add_method(Routine, 'set_inline_info', nqp::getstaticcode(sub ($self, $info) { my $dcself := nqp::decont($self); diff --git a/src/Perl6/Metamodel/DefiniteHOW.nqp b/src/Perl6/Metamodel/DefiniteHOW.nqp index 26d3a014c42..35504fc4238 100644 --- a/src/Perl6/Metamodel/DefiniteHOW.nqp +++ b/src/Perl6/Metamodel/DefiniteHOW.nqp @@ -109,16 +109,17 @@ class Perl6::Metamodel::DefiniteHOW # Do check when we're on LHS of smartmatch (e.g. Even ~~ Int). method type_check($definite_type, $checkee) { my $base_type := self.base_type($definite_type); - nqp::p6bool(nqp::istype($base_type, $checkee)) + nqp::hllboolfor(nqp::istype($base_type, $checkee), "perl6") } # Here we check the value itself (when on RHS on smartmatch). method accepts_type($definite_type, $checkee) { my $base_type := self.base_type($definite_type); my $definite := self.definite($definite_type); - nqp::p6bool( + nqp::hllboolfor( nqp::istype($checkee, $base_type) && - nqp::isconcrete($checkee) == $definite + nqp::isconcrete($checkee) == $definite, + "perl6" ) } } diff --git a/src/Perl6/Metamodel/MROBasedTypeChecking.nqp b/src/Perl6/Metamodel/MROBasedTypeChecking.nqp index 9c39fe7bb63..f457d03f871 100644 --- a/src/Perl6/Metamodel/MROBasedTypeChecking.nqp +++ b/src/Perl6/Metamodel/MROBasedTypeChecking.nqp @@ -8,7 +8,7 @@ role Perl6::Metamodel::MROBasedTypeChecking { } method does($obj, $type) { - nqp::p6bool(nqp::istype($obj, $type)) + nqp::hllboolfor(nqp::istype($obj, $type), "perl6") } method type_check($obj, $checkee) { diff --git a/src/Perl6/Metamodel/SubsetHOW.nqp b/src/Perl6/Metamodel/SubsetHOW.nqp index aff9f6296ee..b661644a51b 100644 --- a/src/Perl6/Metamodel/SubsetHOW.nqp +++ b/src/Perl6/Metamodel/SubsetHOW.nqp @@ -59,7 +59,7 @@ class Perl6::Metamodel::SubsetHOW method isa($obj, $type) { $!refinee.isa($type) - || nqp::p6bool(nqp::istrue($type.HOW =:= self)) + || nqp::hllboolfor(nqp::istrue($type.HOW =:= self), "perl6") } method nominalize($obj) { @@ -77,14 +77,14 @@ class Perl6::Metamodel::SubsetHOW # Do check when we're on LHS of smartmatch (e.g. Even ~~ Int). method type_check($obj, $checkee) { - nqp::p6bool(nqp::istrue($checkee.HOW =:= self) || - nqp::istype($!refinee, $checkee)) + nqp::hllboolfor(nqp::istrue($checkee.HOW =:= self) || + nqp::istype($!refinee, $checkee), "perl6") } # Here we check the value itself (when on RHS on smartmatch). method accepts_type($obj, $checkee) { - nqp::p6bool( + nqp::hllboolfor( nqp::istype($checkee, $!refinee) && - nqp::istrue($!refinement.ACCEPTS($checkee))) + nqp::istrue($!refinement.ACCEPTS($checkee)), "perl6") } } diff --git a/src/Perl6/Optimizer.nqp b/src/Perl6/Optimizer.nqp index d4b8dc213a0..0233685e882 100644 --- a/src/Perl6/Optimizer.nqp +++ b/src/Perl6/Optimizer.nqp @@ -325,7 +325,7 @@ my class Problems { %opts
             := nqp::box_s($pre, $!symbols.find_symbol(['Str']));
         %opts            := nqp::box_s($post, $!symbols.find_symbol(['Str']));
-        %opts := nqp::p6bool(1);
+        %opts := nqp::hllboolfor(1, "perl6");
 
         for %opts -> $p {
             if nqp::islist($p.value) {
@@ -1317,7 +1317,7 @@ class Perl6::Optimizer {
             my $last_stmt := get_last_stmt($value);
             if nqp::istype($last_stmt, QAST::Op) {
                 my str $last_op := $last_stmt.op;
-                if $last_op eq 'p6bool' || nqp::eqat($last_op, 'I', -1) {
+                if $last_op eq 'hllbool' || nqp::eqat($last_op, 'I', -1) {
                     return $value;
                 }
                 if nqp::eqat($last_op, 'assign_', 0) {
@@ -1356,7 +1356,7 @@ class Perl6::Optimizer {
         }
 
         # Some ops have first boolean arg, and we may be able to get rid of
-        # a p6bool if there's already an integer result behind it. For if/unless,
+        # a hllbool if there's already an integer result behind it. For if/unless,
         # we can only do that when we have the `else` branch, since otherwise we
         # might return the no-longer-Bool value from the conditional.
         elsif (+@($op) == 3 && ($optype eq 'if' || $optype eq 'unless'))
@@ -1367,7 +1367,7 @@ class Perl6::Optimizer {
                 $update := $target;
                 $target := $target[0];
             }
-            if nqp::istype($target, QAST::Op) && $target.op eq 'p6bool' {
+            if nqp::istype($target, QAST::Op) && $target.op eq 'hllbool' {
                 if nqp::objprimspec($target[0].returns) == nqp::objprimspec(int) {
                     $update[0] := $target[0];
                 }
@@ -2125,7 +2125,7 @@ class Perl6::Optimizer {
                 }
                 else {
                     $!problems.add_exception(['X', 'Method', 'NotFound'], $op,
-                        :private(nqp::p6bool(1)), :method($name),
+                        :private(nqp::hllboolfor(1, "perl6")), :method($name),
                         :typename($pkg.HOW.name($pkg)), :invocant($pkg));
                     return 1;
                 }
@@ -2528,7 +2528,7 @@ class Perl6::Optimizer {
         }
 
         my %opts := nqp::hash();
-        %opts := $protoguilt // nqp::p6bool(0);
+        %opts := $protoguilt // nqp::hllboolfor(0, "perl6");
         %opts := @arg_names;
         %opts := $obj.name;
         %opts := $obj;
diff --git a/src/Perl6/World.nqp b/src/Perl6/World.nqp
index 12f4114478d..1670da4e6eb 100644
--- a/src/Perl6/World.nqp
+++ b/src/Perl6/World.nqp
@@ -4271,7 +4271,7 @@ class Perl6::World is HLL::World {
             nqp::istype($val, QAST::Op)
               # XXX TODO: the circumfix:<[ ]> path is a misparse of parameterization,
               # e.g. List:D[Int]. When parse is fixed, the circumfix branch likely can be removed
-              ?? $val.op eq 'p6bool' || $val.op eq 'call' && $val.name eq '&circumfix:<[ ]>'
+              ?? $val.op eq 'hllbool' || $val.op eq 'call' && $val.name eq '&circumfix:<[ ]>'
                 ?? nqp::null # not a coercer, but just got a regular DefiniteHOW
                 !! $val.name eq '&infix:<,>' && @($val) == 0
                   ?? self.find_symbol: ['Any'], :setting-only # empty coercer source type
diff --git a/src/core/Any.pm6 b/src/core/Any.pm6
index d91f5d5b601..e4cdec29662 100644
--- a/src/core/Any.pm6
+++ b/src/core/Any.pm6
@@ -18,7 +18,7 @@ my class Any { # declared in BOOTSTRAP
     multi method ACCEPTS(Any:D: Mu:D \a) { self === a }
     multi method ACCEPTS(Any:D: Mu:U $ --> False) { }
     multi method ACCEPTS(Any:U: Any \topic) { # use of Any on topic to force autothreading
-        nqp::p6bool(nqp::istype(topic, self)) # so that all(@foo) ~~ Type works as expected
+        nqp::hllbool(nqp::istype(topic, self)) # so that all(@foo) ~~ Type works as expected
     }
 
     proto method EXISTS-KEY(|) is nodal {*}
@@ -221,7 +221,7 @@ my class Any { # declared in BOOTSTRAP
     }
 
     multi method EXISTS-POS(Any:D: int \pos) {
-        nqp::p6bool(nqp::iseq_i(pos,0));
+        nqp::hllbool(nqp::iseq_i(pos,0));
     }
     multi method EXISTS-POS(Any:D: Int:D \pos) {
         pos == 0;
@@ -454,7 +454,7 @@ Metamodel::ClassHOW.exclude_parent(Any);
 proto sub infix:<===>($?, $?, *%) is pure {*}
 multi sub infix:<===>($?)    { Bool::True }
 multi sub infix:<===>(\a, \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(nqp::decont(a),nqp::decont(b))
       || (nqp::eqaddr(a.WHAT,b.WHAT)
            && nqp::iseq_s(nqp::unbox_s(a.WHICH), nqp::unbox_s(b.WHICH)))
diff --git a/src/core/Argfiles.pm6 b/src/core/Argfiles.pm6
index 57d53c7aa41..53acdcb38fb 100644
--- a/src/core/Argfiles.pm6
+++ b/src/core/Argfiles.pm6
@@ -13,7 +13,7 @@ Rakudo::Internals.REGISTER-DYNAMIC: '$*ARGFILES', {
       !! IO::ArgFiles.new:
           (my $in := $*IN),
           :nl-in($in.nl-in), :chomp($in.chomp), :encoding($in.encoding),
-          :bin(nqp::p6bool(nqp::isfalse($in.encoding)));
+          :bin(nqp::hllbool(nqp::isfalse($in.encoding)));
 }
 
 # vim: ft=perl6 expandtab sw=4
diff --git a/src/core/Backtrace.pm6 b/src/core/Backtrace.pm6
index 8a5d83f00c6..19766cd2ead 100644
--- a/src/core/Backtrace.pm6
+++ b/src/core/Backtrace.pm6
@@ -56,7 +56,7 @@ my class Backtrace::Frame {
         ?$!code.?is-hidden-from-backtrace
     }
     method is-routine(Backtrace::Frame:D:) {
-        nqp::p6bool(nqp::istype($!code,Routine))
+        nqp::hllbool(nqp::istype($!code,Routine))
     }
     method is-setting(Backtrace::Frame:D:) {
         $!file.starts-with("SETTING::")
diff --git a/src/core/Baggy.pm6 b/src/core/Baggy.pm6
index a46410c7740..739bdd3d85c 100644
--- a/src/core/Baggy.pm6
+++ b/src/core/Baggy.pm6
@@ -16,7 +16,7 @@ my role Baggy does QuantHash {
         other.^does(self)
     }
     multi method ACCEPTS(Baggy:D: Baggy:D \other --> Bool:D) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::unless(
             nqp::eqaddr(self,other),
             nqp::if(                         # not same object
@@ -83,8 +83,8 @@ my role Baggy does QuantHash {
         )
     }
     multi method EXISTS-KEY(Baggy:D: \k) {
-        nqp::p6bool(
-          $!elems && nqp::existskey($!elems,k.WHICH)
+        nqp::hllbool(
+          $!elems ?? nqp::existskey($!elems,k.WHICH) !! 0
         )
     }
 
@@ -259,7 +259,7 @@ my role Baggy does QuantHash {
         nqp::istrue($!elems) && nqp::elems($!elems)
     }
     multi method Bool(Baggy:D: --> Bool:D) {
-        nqp::p6bool($!elems && nqp::elems($!elems))
+        nqp::hllbool($!elems ?? nqp::elems($!elems) !! 0)
     }
 
     method !HASHIFY(\type) {
@@ -720,7 +720,7 @@ my role Baggy does QuantHash {
 }
 
 multi sub infix:(Baggy:D \a, Baggy:D \b --> Bool:D) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b) || (nqp::eqaddr(a.WHAT,b.WHAT) && a.ACCEPTS(b))
     )
 }
diff --git a/src/core/Bool.pm6 b/src/core/Bool.pm6
index 4acc261f432..378c4076a7c 100644
--- a/src/core/Bool.pm6
+++ b/src/core/Bool.pm6
@@ -19,8 +19,8 @@ BEGIN {
     Bool.^add_multi_method('ACCEPTS', my multi method ACCEPTS(Bool:D: Mu \topic ) { self });
     Bool.^add_multi_method('perl', my multi method perl(Bool:D:) { self ?? 'Bool::True' !! 'Bool::False' });
 
-    Bool.^add_multi_method('pick', my multi method pick(Bool:U:)    { nqp::p6bool(nqp::isge_n(nqp::rand_n(2e0), 1e0)) });
-    Bool.^add_multi_method('roll', my multi method roll(Bool:U:)    { nqp::p6bool(nqp::isge_n(nqp::rand_n(2e0), 1e0)) });
+    Bool.^add_multi_method('pick', my multi method pick(Bool:U:)    { nqp::hllbool(nqp::isge_n(nqp::rand_n(2e0), 1e0)) });
+    Bool.^add_multi_method('roll', my multi method roll(Bool:U:)    { nqp::hllbool(nqp::isge_n(nqp::rand_n(2e0), 1e0)) });
 }
 BEGIN {
     Bool.^add_multi_method('Bool',    my multi method Bool(Bool:U:)    { Bool::False });
@@ -74,15 +74,15 @@ multi sub prefix:(Bool:U \a) { Bool::False }
 multi sub prefix:(Mu \a) { a.Bool }
 
 proto sub prefix:(Mu, *%) is pure {*}
-multi sub prefix:(Bool \a) { nqp::p6bool(nqp::not_i(nqp::istrue(a))) }
-multi sub prefix:(Mu \a) { nqp::p6bool(nqp::not_i(nqp::istrue(a))) }
+multi sub prefix:(Bool \a) { nqp::hllbool(nqp::not_i(nqp::istrue(a))) }
+multi sub prefix:(Mu \a) { nqp::hllbool(nqp::not_i(nqp::istrue(a))) }
 multi sub prefix:(Mu \a, :$exists!) {
     die "Precedence issue with ! and :exists, perhaps you meant :!exists?"
 }
 
 proto sub prefix:(Mu, *%) is pure {*}
-multi sub prefix:(Bool \a) { nqp::p6bool(nqp::not_i(nqp::istrue(a))) }
-multi sub prefix:(Mu \a) { nqp::p6bool(nqp::not_i(nqp::istrue(a))) }
+multi sub prefix:(Bool \a) { nqp::hllbool(nqp::not_i(nqp::istrue(a))) }
+multi sub prefix:(Mu \a) { nqp::hllbool(nqp::not_i(nqp::istrue(a))) }
 
 proto sub prefix:(Mu, *%) is pure {*}
 multi sub prefix:(Mu \a) { not a }
@@ -97,7 +97,7 @@ multi sub infix:(Mu \a, Mu \b)        { a.Bool || b.Bool }
 
 proto sub infix:(Mu $?, Mu $?, *%) is pure {*}
 multi sub infix:(Mu $x = Bool::False) { $x.Bool }
-multi sub infix:(Mu \a, Mu \b)        { nqp::p6bool(nqp::ifnull(nqp::xor(a.Bool,b.Bool), 0)) }
+multi sub infix:(Mu \a, Mu \b)        { nqp::hllbool(nqp::ifnull(nqp::xor(a.Bool,b.Bool), 0)) }
 
 # These operators are normally handled as macros in the compiler;
 # we define them here for use as arguments to functions.
diff --git a/src/core/Buf.pm6 b/src/core/Buf.pm6
index ea80eb0a7a4..dc742cf8b5f 100644
--- a/src/core/Buf.pm6
+++ b/src/core/Buf.pm6
@@ -76,12 +76,12 @@ my role Blob[::T = uint8] does Positional[T] does Stringy is repr('VMArray') is
     }
 
     multi method EXISTS-POS(Blob:D: int \pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::islt_i(pos,nqp::elems(self)) && nqp::isge_i(pos,0)
         );
     }
     multi method EXISTS-POS(Blob:D: Int:D \pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::islt_i(pos,nqp::elems(self)) && nqp::isge_i(pos,0)
         );
     }
@@ -101,7 +101,7 @@ my role Blob[::T = uint8] does Positional[T] does Stringy is repr('VMArray') is
         )
     }
 
-    multi method Bool(Blob:D:) { nqp::p6bool(nqp::elems(self)) }
+    multi method Bool(Blob:D:) { nqp::hllbool(nqp::elems(self)) }
     method Capture(Blob:D:) { self.List.Capture }
 
     multi method elems(Blob:D:)   { nqp::p6box_i(nqp::elems(self)) }
@@ -447,7 +447,7 @@ my role Blob[::T = uint8] does Positional[T] does Stringy is repr('VMArray') is
         ))
     }
     multi method ACCEPTS(Blob:D: Blob:D \Other) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::unless(
             nqp::eqaddr(self,my \other := nqp::decont(Other)),
             nqp::if(
@@ -781,29 +781,29 @@ multi sub infix:<~^>(Blob:D \a, Blob:D \b) {
 }
 
 multi sub infix:(Blob:D \a, Blob:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b) || (nqp::eqaddr(a.WHAT,b.WHAT) && a.SAME(b))
     )
 }
 
 multi sub infix:(Blob:D \a, Blob:D \b) { ORDER(a.COMPARE(b))     }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::eqaddr(a,b) || a.SAME(b))
+    nqp::hllbool(nqp::eqaddr(a,b) || a.SAME(b))
 }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::not_i(nqp::eqaddr(a,b) || a.SAME(b)))
+    nqp::hllbool(nqp::not_i(nqp::eqaddr(a,b) || a.SAME(b)))
 }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::iseq_i(a.COMPARE(b),-1))
+    nqp::hllbool(nqp::iseq_i(a.COMPARE(b),-1))
 }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::iseq_i(a.COMPARE(b),1))
+    nqp::hllbool(nqp::iseq_i(a.COMPARE(b),1))
 }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::isne_i(a.COMPARE(b),1))
+    nqp::hllbool(nqp::isne_i(a.COMPARE(b),1))
 }
 multi sub infix: (Blob:D \a, Blob:D \b) {
-    nqp::p6bool(nqp::isne_i(a.COMPARE(b),-1))
+    nqp::hllbool(nqp::isne_i(a.COMPARE(b),-1))
 }
 
 proto sub subbuf-rw($, $?, $?, *%) {*}
diff --git a/src/core/Capture.pm6 b/src/core/Capture.pm6
index 33fe29c21df..9af68cea120 100644
--- a/src/core/Capture.pm6
+++ b/src/core/Capture.pm6
@@ -61,10 +61,10 @@ my class Capture { # declared in BOOTSTRAP
     }
 
     multi method EXISTS-KEY(Capture:D: Str:D \key ) {
-        nqp::p6bool(nqp::existskey(%!hash, nqp::unbox_s(key)));
+        nqp::hllbool(nqp::existskey(%!hash, nqp::unbox_s(key)));
     }
     multi method EXISTS-KEY(Capture:D: \key ) {
-        nqp::p6bool(nqp::existskey(%!hash, nqp::unbox_s(key.Str)));
+        nqp::hllbool(nqp::existskey(%!hash, nqp::unbox_s(key.Str)));
     }
 
     method list(Capture:D:) {
@@ -113,7 +113,7 @@ my class Capture { # declared in BOOTSTRAP
         }
     }
     multi method Bool(Capture:D:) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::elems(@!list) || nqp::elems(%!hash)
         )
     }
@@ -151,7 +151,7 @@ my class Capture { # declared in BOOTSTRAP
 }
 
 multi sub infix:(Capture:D \a, Capture:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b)
         || (nqp::eqaddr(a.WHAT,b.WHAT)
              && a.Capture::list eqv b.Capture::list && a.Capture::hash eqv b.Capture::hash)
diff --git a/src/core/Cool.pm6 b/src/core/Cool.pm6
index 49c32b746de..0dd63a5334e 100644
--- a/src/core/Cool.pm6
+++ b/src/core/Cool.pm6
@@ -472,7 +472,7 @@ multi sub uniprop(Int:D $code, Stringy:D $propname) {
         nqp::getuniprop_int($code,$prop),
         nqp::if(
           nqp::iseq_s($pref, 'B'),
-          nqp::p6bool(nqp::getuniprop_bool($code,$prop)),
+          nqp::hllbool(nqp::getuniprop_bool($code,$prop)),
           nqp::if(
             nqp::iseq_s($pref, 'lc'),
             nqp::lc(nqp::chr(nqp::unbox_i($code))),
@@ -517,7 +517,7 @@ multi sub uniprop-bool(Str:D $str, Stringy:D $propname) {
     $str ?? uniprop-bool($str.ord, $propname) !! Nil
 }
 multi sub uniprop-bool(Int:D $code, Stringy:D $propname) {
-    nqp::p6bool(nqp::getuniprop_bool($code,nqp::unipropcode($propname)));
+    nqp::hllbool(nqp::getuniprop_bool($code,nqp::unipropcode($propname)));
 }
 
 proto sub uniprop-str($, $, *%) {*}
@@ -553,7 +553,7 @@ multi sub unimatch(Int:D $code, Stringy:D $pvalname, Stringy:D $propname) {
 }
 multi sub unimatch(Int:D $code, Stringy:D $pvalname, Stringy:D $propname = $pvalname) {
     my $prop := nqp::unipropcode($propname);
-    nqp::p6bool(nqp::matchuniprop($code,$prop,nqp::unipvalcode($prop,$pvalname)));
+    nqp::hllbool(nqp::matchuniprop($code,$prop,nqp::unipvalcode($prop,$pvalname)));
 }
 #?endif
 
diff --git a/src/core/Enumeration.pm6 b/src/core/Enumeration.pm6
index 559a68d74d6..188ea71ae7b 100644
--- a/src/core/Enumeration.pm6
+++ b/src/core/Enumeration.pm6
@@ -123,7 +123,7 @@ Metamodel::EnumHOW.set_composalizer(-> $type, $name, %enum_values {
 # that simply unboxes the values. That's no good for us, since two different
 # Enumertaion:Ds could have the same Int:D value.
 multi infix:<===> (Enumeration:D \a, Enumeration:D \b) {
-    nqp::p6bool(nqp::eqaddr(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::eqaddr(nqp::decont(a), nqp::decont(b)))
 }
 
 # vim: ft=perl6 expandtab sw=4
diff --git a/src/core/Failure.pm6 b/src/core/Failure.pm6
index 0597d823693..ad58e53aca6 100644
--- a/src/core/Failure.pm6
+++ b/src/core/Failure.pm6
@@ -61,7 +61,7 @@ my class Failure is Nil {
         Proxy.new(
           FETCH => {
 #?if moar
-              nqp::p6bool($!handled)
+              nqp::hllbool($!handled)
 #?endif
 #?if jvm
               $!handled.Bool
diff --git a/src/core/Hash.pm6 b/src/core/Hash.pm6
index fed66cd95dc..101d8bd4724 100644
--- a/src/core/Hash.pm6
+++ b/src/core/Hash.pm6
@@ -226,7 +226,7 @@ my class Hash { # declared in BOOTSTRAP
         nqp::isnull($!descriptor) ?? Any !! $!descriptor.default
     }
     method dynamic() {
-        nqp::isnull($!descriptor) ?? False !! nqp::p6bool($!descriptor.dynamic)
+        nqp::isnull($!descriptor) ?? False !! nqp::hllbool($!descriptor.dynamic)
     }
 
     method push(+values) {
@@ -531,7 +531,7 @@ my class Hash { # declared in BOOTSTRAP
         }
 
         method EXISTS-KEY(TKey \key) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::existskey(nqp::getattr(self,Map,'$!storage'),key.WHICH)
             )
         }
diff --git a/src/core/IO/CatHandle.pm6 b/src/core/IO/CatHandle.pm6
index aecdeb72e3d..eea97a7a455 100644
--- a/src/core/IO/CatHandle.pm6
+++ b/src/core/IO/CatHandle.pm6
@@ -66,14 +66,14 @@ my class IO::CatHandle is IO::Handle {
               nqp::if(
                 nqp::istype(
                   ($_ = .open: :r, :$!chomp, :$!nl-in, :enc($!encoding),
-                    :bin(nqp::p6bool(nqp::isfalse($!encoding)))),
+                    :bin(nqp::hllbool(nqp::isfalse($!encoding)))),
                   Failure),
                 .throw,
                 ($!active-handle = $_))),
             nqp::if(
               nqp::istype(
                 ($_ := .IO.open: :r, :$!chomp, :$!nl-in, :enc($!encoding),
-                  :bin(nqp::p6bool(nqp::isfalse($!encoding)))),
+                  :bin(nqp::hllbool(nqp::isfalse($!encoding)))),
                 Failure),
               .throw,
               ($!active-handle = $_))),
@@ -338,7 +338,7 @@ my class IO::CatHandle is IO::Handle {
     }
 
     method eof (::?CLASS:D: --> Bool:D) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::stmts(
             nqp::while(
               $!active-handle
@@ -360,7 +360,7 @@ my class IO::CatHandle is IO::Handle {
     method path (::?CLASS:D:) {
         nqp::if($!active-handle, $!active-handle.path, Nil)
     }
-    method opened(::?CLASS:D: --> Bool:D) { nqp::p6bool($!active-handle) }
+    method opened(::?CLASS:D: --> Bool:D) { nqp::hllbool(nqp::istrue($!active-handle)) }
     method lock(::?CLASS:D: |c) {
         nqp::if($!active-handle, $!active-handle.lock(|c), Nil)
     }
diff --git a/src/core/IO/Handle.pm6 b/src/core/IO/Handle.pm6
index 3ab44a67bd1..e79b7d18c3a 100644
--- a/src/core/IO/Handle.pm6
+++ b/src/core/IO/Handle.pm6
@@ -229,7 +229,7 @@ my class IO::Handle {
     }
 
     method eof(IO::Handle:D:) {
-        nqp::p6bool($!decoder
+        nqp::hllbool($!decoder
             ?? $!decoder.is-empty && self.EOF
             !! self.EOF)
     }
@@ -567,11 +567,11 @@ my class IO::Handle {
     }
 
     method opened(IO::Handle:D:) {
-        nqp::p6bool(nqp::istrue($!PIO));
+        nqp::hllbool(nqp::istrue($!PIO));
     }
 
     method t(IO::Handle:D:) {
-        self.opened && nqp::p6bool(nqp::isttyfh($!PIO))
+        self.opened && nqp::hllbool(nqp::isttyfh($!PIO))
     }
 
     method lock(IO::Handle:D:
diff --git a/src/core/IO/Path.pm6 b/src/core/IO/Path.pm6
index 1386c9febe4..5ab7c410526 100644
--- a/src/core/IO/Path.pm6
+++ b/src/core/IO/Path.pm6
@@ -7,7 +7,7 @@ my class IO::Path is Cool does IO {
     has %!parts;
 
     multi method ACCEPTS(IO::Path:D: Cool:D \other) {
-        nqp::p6bool(nqp::iseq_s($.absolute, nqp::unbox_s(other.IO.absolute)));
+        nqp::hllbool(nqp::iseq_s($.absolute, nqp::unbox_s(other.IO.absolute)));
     }
 
     submethod BUILD(:$!path!, :$!SPEC!, :$!CWD! --> Nil) {
@@ -58,15 +58,15 @@ my class IO::Path is Cool does IO {
         nqp::if(
           nqp::isconcrete($!is-absolute),
           $!is-absolute,
-          $!is-absolute = nqp::p6bool($!SPEC.is-absolute: $!path))
+          $!is-absolute = nqp::hllbool($!SPEC.is-absolute: $!path))
     }
     method is-relative() {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::not_i(
             nqp::if(
               nqp::isconcrete($!is-absolute),
               $!is-absolute,
-              $!is-absolute = nqp::p6bool($!SPEC.is-absolute: $!path))))
+              $!is-absolute = nqp::hllbool($!SPEC.is-absolute: $!path))))
     }
 
     method parts {
diff --git a/src/core/IO/Spec/Cygwin.pm6 b/src/core/IO/Spec/Cygwin.pm6
index dc2b08cb307..6395b4b7556 100644
--- a/src/core/IO/Spec/Cygwin.pm6
+++ b/src/core/IO/Spec/Cygwin.pm6
@@ -20,7 +20,7 @@ my class IO::Spec::Cygwin is IO::Spec::Unix {
     }
 
     method is-absolute ($path) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::iseq_i(($_ := nqp::ord($path)), 92) # /^ 「\」 /
           || nqp::iseq_i($_, 47)                   # /^ 「/」 /
           || (nqp::eqat($path, ':', 1) # /^ <[A..Z a..z]> ':' [ 「\」 | 「/」 ] /
diff --git a/src/core/IO/Spec/Unix.pm6 b/src/core/IO/Spec/Unix.pm6
index 48005fb1474..222217a1fa2 100644
--- a/src/core/IO/Spec/Unix.pm6
+++ b/src/core/IO/Spec/Unix.pm6
@@ -67,7 +67,7 @@ my class IO::Spec::Unix is IO::Spec {
     method basename(\path) {
         my str $str = nqp::unbox_s(path);
         my int $index = nqp::rindex($str,'/');
-        nqp::p6bool($index == -1)
+        nqp::hllbool($index == -1)
           ?? path
           !! substr(path,nqp::box_i($index + 1,Int) );
     }
@@ -75,7 +75,7 @@ my class IO::Spec::Unix is IO::Spec {
     method extension(\path) {
         my str $str = nqp::unbox_s(path);
         my int $index = nqp::rindex($str,'.');
-        nqp::p6bool($index == -1)
+        nqp::hllbool($index == -1)
           ?? ''
           !! substr(path,nqp::box_i($index + 1,Int) );
     }
@@ -94,7 +94,7 @@ my class IO::Spec::Unix is IO::Spec {
     }
 
     method is-absolute( Str() \path ) {
-        nqp::p6bool(nqp::iseq_i(nqp::ord(path), 47)) # '/'
+        nqp::hllbool(nqp::iseq_i(nqp::ord(path), 47)) # '/'
     }
 
     method path {
diff --git a/src/core/IO/Spec/Win32.pm6 b/src/core/IO/Spec/Win32.pm6
index 061602f87c3..107f0d4f40d 100644
--- a/src/core/IO/Spec/Win32.pm6
+++ b/src/core/IO/Spec/Win32.pm6
@@ -33,7 +33,7 @@ my class IO::Spec::Win32 is IO::Spec::Unix {
         my str $str = nqp::unbox_s(path);
         my int $indexf = nqp::rindex($str,'/');
         my int $indexb = nqp::rindex($str,'\\');
-        nqp::p6bool($indexf == -1 && $indexb == -1)
+        nqp::hllbool($indexf == -1 && $indexb == -1)
           ?? path
           !! $indexf > $indexb
              ?? substr(path,nqp::box_i($indexf + 1,Int) )
@@ -79,7 +79,7 @@ my class IO::Spec::Win32 is IO::Spec::Unix {
    }
 
     method is-absolute ($path) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::iseq_i(($_ := nqp::ord($path)), 92) # /^ 「\」 /
           || nqp::iseq_i($_, 47)                   # /^ 「/」 /
           || (nqp::eqat($path, ':', 1) # /^ <[A..Z a..z]> ':' [ 「\」 | 「/」 ] /
diff --git a/src/core/Int.pm6 b/src/core/Int.pm6
index 02959da8f7c..325babf1511 100644
--- a/src/core/Int.pm6
+++ b/src/core/Int.pm6
@@ -39,7 +39,7 @@ my class Int does Real { # declared in BOOTSTRAP
         self.Str;
     }
     multi method Bool(Int:D:) {
-        nqp::p6bool(nqp::bool_I(self));
+        nqp::hllbool(nqp::bool_I(self));
     }
 
     method Capture() { die X::Cannot::Capture.new: :what(self) }
@@ -137,7 +137,7 @@ my class Int does Real { # declared in BOOTSTRAP
     method expmod(Int:D: Int:D \base, Int:D \mod) {
         nqp::expmod_I(self, nqp::decont(base), nqp::decont(mod), Int);
     }
-    method is-prime(--> Bool:D) { nqp::p6bool(nqp::isprime_I(self,100)) }
+    method is-prime(--> Bool:D) { nqp::hllbool(nqp::isprime_I(self,100)) }
 
     method floor(Int:D:) { self }
     method ceiling(Int:D:) { self }
@@ -358,7 +358,7 @@ multi sub infix:(int $a, int $b --> int) {
 }
 
 multi sub infix:<===>(Int:D \a, Int:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a.WHAT,b.WHAT)
       && nqp::iseq_I(nqp::decont(a), nqp::decont(b))
     )
@@ -369,41 +369,41 @@ multi sub infix:<===>(int $a, int $b) {
 }
 
 multi sub infix:<==>(Int:D \a, Int:D \b) {
-    nqp::p6bool(nqp::iseq_I(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::iseq_I(nqp::decont(a), nqp::decont(b)))
 }
 multi sub infix:<==>(int $a, int $b) {
-    nqp::p6bool(nqp::iseq_i($a, $b))
+    nqp::hllbool(nqp::iseq_i($a, $b))
 }
 
-multi sub infix:(int $a, int $b) { nqp::p6bool(nqp::isne_i($a, $b)) }
-multi sub infix:(Int:D \a, Int:D \b) { nqp::p6bool(nqp::isne_I(nqp::decont(a), nqp::decont(b))) }
+multi sub infix:(int $a, int $b) { nqp::hllbool(nqp::isne_i($a, $b)) }
+multi sub infix:(Int:D \a, Int:D \b) { nqp::hllbool(nqp::isne_I(nqp::decont(a), nqp::decont(b))) }
 
 multi sub infix:«<»(Int:D \a, Int:D \b) {
-    nqp::p6bool(nqp::islt_I(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::islt_I(nqp::decont(a), nqp::decont(b)))
 }
 multi sub infix:«<»(int $a, int $b) {
-    nqp::p6bool(nqp::islt_i($a, $b))
+    nqp::hllbool(nqp::islt_i($a, $b))
 }
 
 multi sub infix:«<=»(Int:D \a, Int:D \b) {
-    nqp::p6bool(nqp::isle_I(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::isle_I(nqp::decont(a), nqp::decont(b)))
 }
 multi sub infix:«<=»(int $a, int $b) {
-    nqp::p6bool(nqp::isle_i($a, $b))
+    nqp::hllbool(nqp::isle_i($a, $b))
 }
 
 multi sub infix:«>»(Int:D \a, Int:D \b) {
-    nqp::p6bool(nqp::isgt_I(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::isgt_I(nqp::decont(a), nqp::decont(b)))
 }
 multi sub infix:«>»(int $a, int $b) {
-    nqp::p6bool(nqp::isgt_i($a, $b))
+    nqp::hllbool(nqp::isgt_i($a, $b))
 }
 
 multi sub infix:«>=»(Int:D \a, Int:D \b) {
-    nqp::p6bool(nqp::isge_I(nqp::decont(a), nqp::decont(b)))
+    nqp::hllbool(nqp::isge_I(nqp::decont(a), nqp::decont(b)))
 }
 multi sub infix:«>=»(int $a, int $b) {
-    nqp::p6bool(nqp::isge_i($a, $b))
+    nqp::hllbool(nqp::isge_i($a, $b))
 }
 
 multi sub infix:<+|>(Int:D \a, Int:D \b) {
diff --git a/src/core/Junction.pm6 b/src/core/Junction.pm6
index 4009f3a2b31..09fe66b8b05 100644
--- a/src/core/Junction.pm6
+++ b/src/core/Junction.pm6
@@ -69,7 +69,7 @@ my class Junction { # declared in BOOTSTRAP
     }
 
     method defined(Junction:D:) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::stmts(
             (my int $elems = nqp::elems($!storage)),
             (my int $i),
@@ -124,7 +124,7 @@ my class Junction { # declared in BOOTSTRAP
     }
 
     multi method Bool(Junction:D:) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::stmts(
             (my int $elems = nqp::elems($!storage)),
             (my int $i),
@@ -179,13 +179,13 @@ my class Junction { # declared in BOOTSTRAP
     }
 
     multi method ACCEPTS(Junction:U: Mu:D \topic) {
-        nqp::p6bool(nqp::istype(topic, Junction));
+        nqp::hllbool(nqp::istype(topic, Junction));
     }
     multi method ACCEPTS(Junction:U: Any \topic) {
-        nqp::p6bool(nqp::istype(topic, Junction));
+        nqp::hllbool(nqp::istype(topic, Junction));
     }
     multi method ACCEPTS(Junction:D: Mu \topic) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::stmts(
             (my int $elems = nqp::elems($!storage)),
             (my int $i),
diff --git a/src/core/List.pm6 b/src/core/List.pm6
index db694da4173..73f1a951ad9 100644
--- a/src/core/List.pm6
+++ b/src/core/List.pm6
@@ -170,7 +170,7 @@ my class List does Iterable does Positional { # declared in BOOTSTRAP
         }
 
         method fully-reified() {
-            nqp::p6bool(nqp::not_i(
+            nqp::hllbool(nqp::not_i(
               nqp::isconcrete($!current-iter) || nqp::isconcrete($!future)
             ))
         }
@@ -363,7 +363,7 @@ my class List does Iterable does Positional { # declared in BOOTSTRAP
     }
 
     multi method Bool(List:D:) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::unless(
             nqp::isconcrete($!reified) && nqp::elems($!reified),
             nqp::isconcrete($!todo) && $!todo.reify-at-least(1)
@@ -539,7 +539,7 @@ my class List does Iterable does Positional { # declared in BOOTSTRAP
     }
 
     multi method EXISTS-POS(List:D: int $pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             nqp::isge_i($pos,0),
             nqp::if(
@@ -558,7 +558,7 @@ my class List does Iterable does Positional { # declared in BOOTSTRAP
         )
     }
     multi method EXISTS-POS(List:D: Int:D $pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             nqp::isge_i($pos,0),
             nqp::if(
@@ -961,7 +961,7 @@ my class List does Iterable does Positional { # declared in BOOTSTRAP
             $!todo.reify-until-lazy,
             nqp::if(
               $!todo.fully-reified,
-              nqp::p6bool($!todo := nqp::null),
+              nqp::hllbool(nqp::istrue($!todo := nqp::null)),
               True
             )
           ),
diff --git a/src/core/Main.pm6 b/src/core/Main.pm6
index 90030b026a8..e5a33a52d2e 100644
--- a/src/core/Main.pm6
+++ b/src/core/Main.pm6
@@ -228,7 +228,7 @@ my sub MAIN_HELPER($IN-as-ARGSFILES, $retval = 0) {
         if $IN-as-ARGSFILES {
             my $*ARGFILES := IO::ArgFiles.new: (my $in := $*IN),
                 :nl-in($in.nl-in), :chomp($in.chomp), :encoding($in.encoding),
-                :bin(nqp::p6bool(nqp::isfalse($in.encoding)));
+                :bin(nqp::hllbool(nqp::isfalse($in.encoding)));
             $m(|@($p), |%($n));
         }
         else {
diff --git a/src/core/Map.pm6 b/src/core/Map.pm6
index bdc0c712b53..eaad99a3ac6 100644
--- a/src/core/Map.pm6
+++ b/src/core/Map.pm6
@@ -74,7 +74,7 @@ my class Map does Iterable does Associative { # declared in BOOTSTRAP
     }
 
     multi method Bool(Map:D:) {
-        nqp::p6bool(nqp::elems($!storage));
+        nqp::hllbool(nqp::elems($!storage));
     }
     method elems(Map:D:) {
         nqp::p6box_i(nqp::elems($!storage));
@@ -159,10 +159,10 @@ my class Map does Iterable does Associative { # declared in BOOTSTRAP
     }
 
     multi method EXISTS-KEY(Map:D: Str:D \key) {
-        nqp::p6bool(nqp::existskey($!storage,key))
+        nqp::hllbool(nqp::existskey($!storage,key))
     }
     multi method EXISTS-KEY(Map:D: \key) {
-        nqp::p6bool(nqp::existskey($!storage,key.Str))
+        nqp::hllbool(nqp::existskey($!storage,key.Str))
     }
 
     multi method gist(Map:D:) {
@@ -561,7 +561,7 @@ multi sub infix:(Map:D \a, Map:D \b) {
 
     class NotEQV { }
 
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::unless(
         nqp::eqaddr(a,b),
         nqp::if(                                 # not comparing with self
@@ -582,7 +582,8 @@ multi sub infix:(Map:D \a, Map:D \b) {
                   ($elems = nqp::sub_i($elems,1))
                 ),
                 nqp::not_i($elems)               # ok if none left
-              )
+              ),
+              0
             ),
             nqp::isfalse(                        # nothing on left
               (my \map := nqp::getattr(nqp::decont(b),Map,'$!storage'))
diff --git a/src/core/Match.pm6 b/src/core/Match.pm6
index dea99b77265..bb87e5f1671 100644
--- a/src/core/Match.pm6
+++ b/src/core/Match.pm6
@@ -847,7 +847,7 @@ my class Match is Capture is Cool does NQPMatchRole {
 
     proto method Bool(|) {*}
     multi method Bool(Match:U:) { False }
-    multi method Bool(Match:D:) { nqp::p6bool($!pos >= $!from) }
+    multi method Bool(Match:D:) { nqp::hllbool($!pos >= $!from) }
 
     multi method Numeric(Match:D:) {
         self.Str.Numeric
diff --git a/src/core/Metamodel/Primitives.pm6 b/src/core/Metamodel/Primitives.pm6
index 12a9268e167..9ae6b7b30fa 100644
--- a/src/core/Metamodel/Primitives.pm6
+++ b/src/core/Metamodel/Primitives.pm6
@@ -61,7 +61,7 @@ my class Metamodel::Primitives {
     }
 
     method is_type(Mu \obj, Mu \type) {
-        nqp::p6bool(nqp::istype(obj, type))
+        nqp::hllbool(nqp::istype(obj, type))
     }
 }
 
diff --git a/src/core/Mu.pm6 b/src/core/Mu.pm6
index e3058b3b6da..68b09ee509e 100644
--- a/src/core/Mu.pm6
+++ b/src/core/Mu.pm6
@@ -14,10 +14,10 @@ my class Mu { # declared in BOOTSTRAP
 
     proto method ACCEPTS(|) {*}
     multi method ACCEPTS(Mu:U: Any \topic) {
-        nqp::p6bool(nqp::istype(topic, self))
+        nqp::hllbool(nqp::istype(topic, self))
     }
     multi method ACCEPTS(Mu:U: Mu:U \topic) {
-        nqp::p6bool(nqp::istype(topic, self))
+        nqp::hllbool(nqp::istype(topic, self))
     }
 
     method WHERE() {
@@ -106,7 +106,7 @@ Perhaps it can be found at https://docs.perl6.org/type/$name"
     method not() { self ?? False !! True }
 
     method defined() {
-        nqp::p6bool(nqp::isconcrete(self))
+        nqp::hllbool(nqp::isconcrete(self))
     }
 
     proto method new(|) {*}
@@ -709,7 +709,7 @@ Perhaps it can be found at https://docs.perl6.org/type/$name"
 
     proto method isa(|) {*}
     multi method isa(Mu \SELF: Mu $type) {
-        nqp::p6bool(SELF.^isa($type.WHAT))
+        nqp::hllbool(SELF.^isa($type.WHAT))
     }
     multi method isa(Mu \SELF: Str:D $name) {
         my @mro = SELF.^mro;
@@ -724,7 +724,7 @@ Perhaps it can be found at https://docs.perl6.org/type/$name"
     }
 
     method does(Mu \SELF: Mu $type) {
-        nqp::p6bool(nqp::istype(SELF, $type.WHAT))
+        nqp::hllbool(nqp::istype(SELF, $type.WHAT))
     }
 
     method can(Mu \SELF: $name) {
@@ -959,7 +959,7 @@ multi sub infix:(Mu \topic, Mu \matcher) {
 proto sub infix:<=:=>(Mu $?, Mu $?, *%) is pure {*}
 multi sub infix:<=:=>($?)      { Bool::True }
 multi sub infix:<=:=>(Mu \a, Mu \b) {
-    nqp::p6bool(nqp::eqaddr(a, b));
+    nqp::hllbool(nqp::eqaddr(a, b));
 }
 
 proto sub infix:(Any $?, Any $?, *%) is pure {*}
@@ -969,19 +969,19 @@ multi sub infix:($?)            { Bool::True }
 # please do not change this to be faster but wronger.  (Instead, add
 # specialized multis for datatypes that can be tested piecemeal.)
 multi sub infix:(Any:U \a, Any:U \b) {
-    nqp::p6bool(nqp::eqaddr(nqp::decont(a),nqp::decont(b)))
+    nqp::hllbool(nqp::eqaddr(nqp::decont(a),nqp::decont(b)))
 }
 multi sub infix:(Any:D \a, Any:U \b) { False }
 multi sub infix:(Any:U \a, Any:D \b) { False }
 multi sub infix:(Any:D \a, Any:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b)
         || (nqp::eqaddr(a.WHAT,b.WHAT) && nqp::iseq_s(a.perl,b.perl))
     )
 }
 
 multi sub infix:(Iterable:D \a, Iterable:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::unless(
         nqp::eqaddr(nqp::decont(a),nqp::decont(b)),
         nqp::if(                                 # not same object
diff --git a/src/core/Num.pm6 b/src/core/Num.pm6
index 2ee938769a9..8af604a189a 100644
--- a/src/core/Num.pm6
+++ b/src/core/Num.pm6
@@ -19,7 +19,7 @@ my class Num does Real { # declared in BOOTSTRAP
           ValueObjAt
         )
     }
-    multi method Bool(Num:D:) { nqp::p6bool(nqp::isne_n(self,0e0)) }
+    multi method Bool(Num:D:) { nqp::hllbool(nqp::isne_n(self,0e0)) }
     method Capture() { die X::Cannot::Capture.new: :what(self) }
     method Num() { self }
     method Bridge(Num:D:) { self }
@@ -243,7 +243,7 @@ my class Num does Real { # declared in BOOTSTRAP
         (1e0 / self).atanh;
     }
     method is-prime(--> Bool:D) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             nqp::isnanorinf(self),
             False,
@@ -416,7 +416,7 @@ multi sub infix:«<=>»(num $a, num $b) {
 }
 
 multi sub infix:<===>(Num:D \a, Num:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
         nqp::eqaddr(a.WHAT,b.WHAT)
         && (
             ( # Both are NaNs
@@ -438,7 +438,7 @@ multi sub infix:<===>(Num:D \a, Num:D \b) {
     )
 }
 multi sub infix:<===>(num \a, num \b --> Bool:D) {
-    nqp::p6bool(
+    nqp::hllbool(
         nqp::eqaddr(a.WHAT,b.WHAT)
         && (
             ( # Both are NaNs
@@ -464,42 +464,42 @@ multi sub infix:<≅>( Inf,  Inf) { Bool::True }
 multi sub infix:<≅>(-Inf, -Inf) { Bool::True }
 
 multi sub infix:<==>(Num:D \a, Num:D \b --> Bool:D)  {
-    nqp::p6bool(nqp::iseq_n(nqp::unbox_n(a), nqp::unbox_n(b)))
+    nqp::hllbool(nqp::iseq_n(nqp::unbox_n(a), nqp::unbox_n(b)))
 }
 multi sub infix:<==>(num $a, num $b --> Bool:D)  {
-    nqp::p6bool(nqp::iseq_n($a, $b))
+    nqp::hllbool(nqp::iseq_n($a, $b))
 }
 
 multi sub infix:(num $a, num $b --> Bool:D) {
-    nqp::p6bool(nqp::isne_n($a, $b))
+    nqp::hllbool(nqp::isne_n($a, $b))
 }
 
 multi sub infix:«<»(Num:D \a, Num:D \b --> Bool:D) {
-    nqp::p6bool(nqp::islt_n(nqp::unbox_n(a), nqp::unbox_n(b)))
+    nqp::hllbool(nqp::islt_n(nqp::unbox_n(a), nqp::unbox_n(b)))
 }
 multi sub infix:«<»(num $a, num $b --> Bool:D) {
-    nqp::p6bool(nqp::islt_n($a, $b))
+    nqp::hllbool(nqp::islt_n($a, $b))
 }
 
 multi sub infix:«<=»(Num:D \a, Num:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isle_n(nqp::unbox_n(a), nqp::unbox_n(b)))
+    nqp::hllbool(nqp::isle_n(nqp::unbox_n(a), nqp::unbox_n(b)))
 }
 multi sub infix:«<=»(num $a, num $b --> Bool:D) {
-    nqp::p6bool(nqp::isle_n($a, $b))
+    nqp::hllbool(nqp::isle_n($a, $b))
 }
 
 multi sub infix:«>»(Num:D \a, Num:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isgt_n(nqp::unbox_n(a), nqp::unbox_n(b)))
+    nqp::hllbool(nqp::isgt_n(nqp::unbox_n(a), nqp::unbox_n(b)))
 }
 multi sub infix:«>»(num $a, num $b --> Bool:D) {
-    nqp::p6bool(nqp::isgt_n($a, $b))
+    nqp::hllbool(nqp::isgt_n($a, $b))
 }
 
 multi sub infix:«>=»(Num:D \a, Num:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isge_n(nqp::unbox_n(a), nqp::unbox_n(b)))
+    nqp::hllbool(nqp::isge_n(nqp::unbox_n(a), nqp::unbox_n(b)))
 }
 multi sub infix:«>=»(num $a, num $b --> Bool:D) {
-    nqp::p6bool(nqp::isge_n($a, $b))
+    nqp::hllbool(nqp::isge_n($a, $b))
 }
 
 proto sub rand(*%) {*}
diff --git a/src/core/Numeric.pm6 b/src/core/Numeric.pm6
index 1b0a3d612b4..5f741812a53 100644
--- a/src/core/Numeric.pm6
+++ b/src/core/Numeric.pm6
@@ -39,7 +39,7 @@ my role Numeric {
 multi sub infix:(Numeric:D \a, Numeric:D \b --> Bool:D) {
     # Use === for Nums, to properly handle signed zeros and NaNs
     # For Rationals, properly handle NaN-y Rationals
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b)
         || nqp::eqaddr(a.WHAT,b.WHAT)
         && nqp::if(
@@ -246,7 +246,7 @@ multi sub infix:<%%>(Int:D \a, Int:D \b) {
       ),
       nqp::if(
         nqp::isne_i(b,0),
-        nqp::p6bool(nqp::not_i(nqp::mod_i(nqp::decont(a),nqp::decont(b)))),
+        nqp::hllbool(nqp::not_i(nqp::mod_i(nqp::decont(a),nqp::decont(b)))),
         Failure.new(
           X::Numeric::DivideByZero.new(using => 'infix:<%%>', numerator => a)
         )
diff --git a/src/core/Pair.pm6 b/src/core/Pair.pm6
index 3b3fca17756..087428d96f5 100644
--- a/src/core/Pair.pm6
+++ b/src/core/Pair.pm6
@@ -123,7 +123,7 @@ my class Pair does Associative {
 }
 
 multi sub infix:(Pair:D \a, Pair:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b)
         || (nqp::eqaddr(a.WHAT,b.WHAT)
              && a.key   eqv b.key
diff --git a/src/core/Parameter.pm6 b/src/core/Parameter.pm6
index dbfad404542..98603d28050 100644
--- a/src/core/Parameter.pm6
+++ b/src/core/Parameter.pm6
@@ -120,49 +120,49 @@ my class Parameter { # declared in BOOTSTRAP
         )
     }
     method named() {
-        nqp::p6bool(
-          @!named_names || nqp::bitand_i($!flags,$SIG_ELEM_SLURPY_NAMED)
+        nqp::hllbool(
+          nqp::not_i(nqp::isnull(@!named_names)) || nqp::bitand_i($!flags,$SIG_ELEM_SLURPY_NAMED)
         )
     }
 
     method positional() {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::isnull(@!named_names)
           && nqp::iseq_i(nqp::bitand_i($!flags,$SIG_ELEM_IS_NOT_POSITIONAL),0)
         )
     }
 
     method slurpy() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_SLURPY))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_SLURPY))
     }
     method optional() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_OPTIONAL))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_OPTIONAL))
     }
     method raw() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_RAW))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_RAW))
     }
     method capture() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_CAPTURE))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_CAPTURE))
     }
     method rw() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_RW))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_RW))
     }
     method onearg() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_SLURPY_ONEARG))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_SLURPY_ONEARG))
     }
     method copy() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_IS_COPY))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_IS_COPY))
     }
     method readonly() {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::iseq_i(nqp::bitand_i($!flags,$SIG_ELEM_IS_NOT_READONLY),0)
         )
     }
     method invocant() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_INVOCANT))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_INVOCANT))
     }
     method multi-invocant() {
-        nqp::p6bool(nqp::bitand_i($!flags,$SIG_ELEM_MULTI_INVOCANT))
+        nqp::hllbool(nqp::bitand_i($!flags,$SIG_ELEM_MULTI_INVOCANT))
     }
     method default() {
         nqp::isnull($!default_value)
diff --git a/src/core/Promise.pm6 b/src/core/Promise.pm6
index e68c0e43a5d..915b52b1a84 100644
--- a/src/core/Promise.pm6
+++ b/src/core/Promise.pm6
@@ -302,7 +302,7 @@ my class Promise does Awaitable {
 }
 
 multi sub infix:(Promise:D \a, Promise:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b) || a.result eqv b.result
     )
 }
diff --git a/src/core/PseudoStash.pm6 b/src/core/PseudoStash.pm6
index bbb39412947..fd5142f0abc 100644
--- a/src/core/PseudoStash.pm6
+++ b/src/core/PseudoStash.pm6
@@ -256,7 +256,7 @@ my class PseudoStash is Map {
     method EXISTS-KEY(PseudoStash:D: Str() $key) {
         nqp::unless(
           nqp::existskey($pseudoers,$key),
-          nqp::p6bool(
+          nqp::hllbool(
             nqp::if(
               nqp::bitand_i($!mode,PRECISE_SCOPE),
               nqp::existskey(
diff --git a/src/core/REPL.pm6 b/src/core/REPL.pm6
index 9ed2712feae..061a02887ec 100644
--- a/src/core/REPL.pm6
+++ b/src/core/REPL.pm6
@@ -385,12 +385,12 @@ do {
         }
 
         method input-incomplete(Mu $value --> Bool:D) {
-            nqp::p6bool(nqp::can($value, 'WHERE'))
+            nqp::hllbool(nqp::can($value, 'WHERE'))
               and $value.WHERE == $!need-more-input.WHERE
         }
 
         method input-toplevel-control(Mu $value --> Bool:D) {
-            nqp::p6bool(nqp::can($value, 'WHERE'))
+            nqp::hllbool(nqp::can($value, 'WHERE'))
               and $value.WHERE == $!control-not-allowed.WHERE
         }
 
diff --git a/src/core/Rakudo/Internals.pm6 b/src/core/Rakudo/Internals.pm6
index 9f7370edfb8..f2c18fac0af 100644
--- a/src/core/Rakudo/Internals.pm6
+++ b/src/core/Rakudo/Internals.pm6
@@ -664,7 +664,7 @@ my class Rakudo::Internals {
           nqp::atkey(nqp::backendconfig,'osname')
 #?endif
         )," ","");
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::iseq_s($os,'mswin32')
             || nqp::iseq_s($os,'mingw')
             || nqp::iseq_s($os,'msys')
@@ -888,7 +888,7 @@ my class Rakudo::Internals {
     my int $elems = nqp::elems($dates);
 
     method is-leap-second-date(\date) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::stmts(
             (my str $date = date),
             (my int $i = -1),
@@ -930,7 +930,7 @@ my class Rakudo::Internals {
             nqp::null
           ),
           (tai - nqp::add_i($initial-offset,$i),
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i($i,$elems)
                 && nqp::iseq_i(nqp::atpos_i($posixes,$i),nqp::sub_i($t,$i))
             )
diff --git a/src/core/Rakudo/Iterator.pm6 b/src/core/Rakudo/Iterator.pm6
index 0916cb0e34c..b88fa3b6680 100644
--- a/src/core/Rakudo/Iterator.pm6
+++ b/src/core/Rakudo/Iterator.pm6
@@ -62,7 +62,7 @@ class Rakudo::Iterator {
                 0))
         }
         method bool-only()  {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i($!i, nqp::sub_i(nqp::elems($!blob),1)))
         }
         method sink-all(--> IterationEnd) { $!i = nqp::elems($!blob) }
@@ -781,7 +781,7 @@ class Rakudo::Iterator {
                       (([*] ($!n ... 0) Z/ 1 .. min($!n - $!k, $!k)).Int)
                       - $!pulled-count
                   }
-                  method bool-only(--> Bool) { nqp::p6bool(self.count-only) }
+                  method bool-only(--> Bool) { nqp::hllbool(self.count-only != 0) }
               }.new($n,$k,$b)
             )
           )
@@ -1044,7 +1044,7 @@ class Rakudo::Iterator {
                     )
                   )
               }
-              method is-lazy() { nqp::p6bool($!lazy) }
+              method is-lazy() { nqp::hllbool($!lazy) }
           }.new(@iterables),
 
           # simpler cases
@@ -1319,7 +1319,7 @@ class Rakudo::Iterator {
                     )
                   )
               }
-              method is-lazy() { nqp::p6bool($!lazy) }
+              method is-lazy() { nqp::hllbool($!lazy) }
           }.new(@iterables,&mapper),
 
           # simpler cases
@@ -1524,7 +1524,7 @@ class Rakudo::Iterator {
             }
 
             # Is the source iterator considered exhausted?
-            method ended() { nqp::p6bool($!ended) }
+            method ended() { nqp::hllbool($!ended) }
 
             # Eat the iterator trying to find out the number of elements
             # produced by the iterator.  Intended to provide information
@@ -1756,7 +1756,7 @@ class Rakudo::Iterator {
             }
             method is-lazy(--> Bool:D) { $!is-lazy }
             method count-only() { nqp::p6box_i(nqp::sub_i($!last,$!i)) }
-            method bool-only()  { nqp::p6bool(nqp::isgt_i($!last,$!i)) }
+            method bool-only()  { nqp::hllbool(nqp::isgt_i($!last,$!i)) }
             method sink-all(--> IterationEnd) { $!i = $!last }
         }.new(from,to)
     }
@@ -2337,10 +2337,10 @@ class Rakudo::Iterator {
                 )
             }
             method skip-one() { nqp::if($!times,$!times--) }
-            method is-lazy() { nqp::p6bool($!is-lazy) }
+            method is-lazy() { nqp::hllbool($!is-lazy) }
             method sink-all(--> IterationEnd) { $!times = 0 }
             method count-only() { $!times }
-            method bool-only() { nqp::p6bool($!times) }
+            method bool-only() { nqp::hllbool(nqp::istrue($!times)) }
         }.new(value,times)
     }
 
@@ -2470,7 +2470,7 @@ class Rakudo::Iterator {
                 method count-only {
                     nqp::isge_i($!todo, 0) ?? nqp::p6box_i($!todo) !! 0
                 }
-                method bool-only { nqp::p6bool(nqp::isgt_i($!todo, 0)) }
+                method bool-only { nqp::hllbool(nqp::isgt_i($!todo, 0)) }
             }.new($n,$b)
           )
         )
@@ -2574,7 +2574,7 @@ class Rakudo::Iterator {
                     0))
             }
             method bool-only()  {
-                nqp::p6bool(
+                nqp::hllbool(
                   nqp::islt_i($!i, nqp::sub_i(nqp::elems($!reified),1)))
             }
             method sink-all(--> IterationEnd) { $!i = nqp::elems($!reified) }
@@ -2670,7 +2670,7 @@ class Rakudo::Iterator {
                     0))
             }
             method bool-only()  {
-                nqp::p6bool(
+                nqp::hllbool(
                   nqp::islt_i($!i, nqp::sub_i(nqp::elems($!reified),1)))
             }
             method sink-all(--> IterationEnd) { $!i = nqp::elems($!reified) }
@@ -2727,7 +2727,7 @@ class Rakudo::Iterator {
                 )
             }
             method count-only() { nqp::p6box_i($!i) }
-            method bool-only()  { nqp::p6bool($!i) }
+            method bool-only()  { nqp::hllbool($!i) }
             method sink-all(--> IterationEnd) { $!i = 0 }
         }.new(list)
     }
@@ -3111,7 +3111,7 @@ class Rakudo::Iterator {
                     )
                   )
               }
-              method is-lazy() { nqp::p6bool($!lazy) }
+              method is-lazy() { nqp::hllbool($!lazy) }
           }.new(@iterables),
           nqp::if(
             nqp::iseq_i($n,0),
@@ -3873,7 +3873,7 @@ class Rakudo::Iterator {
                     )
                   )
               }
-              method is-lazy() { nqp::p6bool($!lazy) }
+              method is-lazy() { nqp::hllbool($!lazy) }
           }.new(@iterables),
           nqp::if(
             nqp::iseq_i($n,0),
@@ -3961,7 +3961,7 @@ class Rakudo::Iterator {
                     )
                   )
               }
-              method is-lazy() { nqp::p6bool($!lazy) }
+              method is-lazy() { nqp::hllbool($!lazy) }
           }.new(@iterables,&mapper),
           nqp::if(
             nqp::iseq_i($n,0),
diff --git a/src/core/Rakudo/QuantHash.pm6 b/src/core/Rakudo/QuantHash.pm6
index 43ab2eec892..b578d758ae8 100644
--- a/src/core/Rakudo/QuantHash.pm6
+++ b/src/core/Rakudo/QuantHash.pm6
@@ -1527,7 +1527,7 @@ my class Rakudo::QuantHash {
                     nqp::unless($less,$less = $left < $right)
                   )
                 ),
-                nqp::p6bool($less)  # all checks worked out so far
+                nqp::hllbool($less)  # all checks worked out so far
               ),
               # nothing in B, all elems in A should be < 0
               Rakudo::QuantHash.MIX-ALL-NEGATIVE($araw)
diff --git a/src/core/Range.pm6 b/src/core/Range.pm6
index 5a86220e612..f69aa1cdda8 100644
--- a/src/core/Range.pm6
+++ b/src/core/Range.pm6
@@ -77,10 +77,10 @@ my class Range is Cool does Iterable does Positional {
     }
     multi method new(\min, \max) { nqp::create(self)!SET-SELF(min,max,0,0,0) }
 
-    method excludes-min() { nqp::p6bool($!excludes-min) }
-    method excludes-max() { nqp::p6bool($!excludes-max) }
-    method infinite()     { nqp::p6bool($!infinite)     }
-    method is-int()       { nqp::p6bool($!is-int)       }
+    method excludes-min() { nqp::hllbool($!excludes-min) }
+    method excludes-max() { nqp::hllbool($!excludes-max) }
+    method infinite()     { nqp::hllbool($!infinite)     }
+    method is-int()       { nqp::hllbool($!is-int)       }
 
     method !IS-NATIVE-INT() {
         $!is-int && nqp::not_i(nqp::isbig_I($!min) || nqp::isbig_I($!max))
@@ -173,7 +173,7 @@ my class Range is Cool does Iterable does Positional {
                            $!i = $i;
                        }
                        method count-only() { nqp::p6box_i($!n - $!i) }
-                       method bool-only() { nqp::p6bool(nqp::isgt_i($!n,$!i)) }
+                       method bool-only() { nqp::hllbool(nqp::isgt_i($!n,$!i)) }
                        method sink-all(--> IterationEnd) { $!i = $!n }
                    }.new($!min, $!max, $!excludes-min, $!excludes-max)
                 !! SEQUENCE(
@@ -253,7 +253,7 @@ my class Range is Cool does Iterable does Positional {
                     $!i = $i;
                 }
                 method count-only() { nqp::p6box_i($!i - $!n) }
-                method bool-only() { nqp::p6bool(nqp::isgt_i($!i,$!n)) }
+                method bool-only() { nqp::hllbool(nqp::isgt_i($!i,$!n)) }
                 method sink-all(--> IterationEnd)   { $!i = $!n }
             }.new($!max - $!excludes-max, $!min + $!excludes-min)
         }
@@ -309,7 +309,7 @@ my class Range is Cool does Iterable does Positional {
                            $!i = $i;
                        }
                        method count-only() { nqp::p6box_i($!i - $!n) }
-                       method bool-only() { nqp::p6bool(nqp::isgt_i($!i,$!n)) }
+                       method bool-only() { nqp::hllbool(nqp::isgt_i($!i,$!n)) }
                        method sink-all(--> IterationEnd) { $!i = $!n }
                    }.new($max, $!excludes-min ?? $!min.succ !! $!min)
                 !! SEQUENCE($max,$!min,:exclude_end($!excludes-min)).iterator
@@ -736,7 +736,7 @@ proto sub prefix:<^>($, *%) is pure {*}
 multi sub prefix:<^>($max) { Range.new(0, $max.Numeric, :excludes-max) }
 
 multi sub infix:(Range:D \a, Range:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b)
         || (nqp::eqaddr(a.WHAT,b.WHAT)
              && a.min eqv b.min
diff --git a/src/core/Rational.pm6 b/src/core/Rational.pm6
index 6624c325653..11b18a21f22 100644
--- a/src/core/Rational.pm6
+++ b/src/core/Rational.pm6
@@ -72,14 +72,14 @@ my role Rational[::NuT = Int, ::DeT = ::("NuT")] does Real {
                    :details('when coercing Rational to Int')
     }
 
-    multi method Bool(::?CLASS:D:) { nqp::p6bool($!numerator) }
+    multi method Bool(::?CLASS:D:) { nqp::hllbool(nqp::istrue($!numerator)) }
 
     method Bridge() { self.Num }
 
     method Range(::?CLASS:U:) { Range.new(-Inf, Inf) }
 
     method isNaN (--> Bool:D) {
-        nqp::p6bool(nqp::isfalse($!denominator) && nqp::isfalse($!numerator))
+        nqp::hllbool(nqp::isfalse($!denominator) && nqp::isfalse($!numerator))
     }
 
     method is-prime(--> Bool:D) {
diff --git a/src/core/Regex.pm6 b/src/core/Regex.pm6
index a02207525f5..fdfad070f6b 100644
--- a/src/core/Regex.pm6
+++ b/src/core/Regex.pm6
@@ -16,7 +16,7 @@ my class Regex { # declared in BOOTSTRAP
     # use of Any on topic to force autothreading
     # so that all(@foo) ~~ Type works as expected
     multi method ACCEPTS(Regex:U: Any \topic) {
-        nqp::p6bool(nqp::istype(topic, self))
+        nqp::hllbool(nqp::istype(topic, self))
     }
 
     multi method ACCEPTS(Regex:D \SELF: Any \topic) {
diff --git a/src/core/Routine.pm6 b/src/core/Routine.pm6
index 833e8b1563f..bfbdfe44dc1 100644
--- a/src/core/Routine.pm6
+++ b/src/core/Routine.pm6
@@ -20,7 +20,7 @@ my class Routine { # declared in BOOTSTRAP
     #     has @!dispatch_order;
     #     has Mu $!dispatch_cache;
 
-    method onlystar() { nqp::p6bool($!onlystar) }
+    method onlystar() { nqp::hllbool($!onlystar) }
 
     method candidates() {
         self.is_dispatcher ??
@@ -85,7 +85,7 @@ my class Routine { # declared in BOOTSTRAP
             has $!dispatcher;
             has $!wrapper;
             method restore() {
-                nqp::p6bool($!dispatcher.remove($!wrapper));
+                nqp::hllbool($!dispatcher.remove($!wrapper));
             }
         }
         my role Wrapped {
@@ -134,7 +134,7 @@ my class Routine { # declared in BOOTSTRAP
     }
 
     method yada() {
-        nqp::p6bool(nqp::getattr_i(self, Routine, '$!yada'))
+        nqp::hllbool(nqp::getattr_i(self, Routine, '$!yada'))
     }
 
     method package() { $!package }
diff --git a/src/core/Scalar.pm6 b/src/core/Scalar.pm6
index 7a74855ff00..449578cfc86 100644
--- a/src/core/Scalar.pm6
+++ b/src/core/Scalar.pm6
@@ -22,7 +22,7 @@ my class Scalar { # declared in BOOTSTRAP
     }
     method dynamic() {
         my $d := $!descriptor;
-        nqp::isnull($d) ?? False !! nqp::p6bool($d.dynamic);
+        nqp::isnull($d) ?? False !! nqp::hllbool($d.dynamic);
     }
 }
 
diff --git a/src/core/Semaphore.pm6 b/src/core/Semaphore.pm6
index 172c44fd3c7..599bbc90509 100644
--- a/src/core/Semaphore.pm6
+++ b/src/core/Semaphore.pm6
@@ -6,7 +6,7 @@ my class Semaphore is repr('Semaphore') {
         nqp::semacquire(self);
     }
     method try_acquire(--> Bool:D) {
-        nqp::p6bool(nqp::semtryacquire(self))
+        nqp::hllbool(nqp::semtryacquire(self))
     }
     method release() {
         nqp::semrelease(self);
diff --git a/src/core/Seq.pm6 b/src/core/Seq.pm6
index 9bf5092f677..a3b36c1f3e2 100644
--- a/src/core/Seq.pm6
+++ b/src/core/Seq.pm6
@@ -307,7 +307,7 @@ sub GATHER(&block) {
 }
 
 multi sub infix:(Seq:D \a, Seq:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::unless(
         nqp::eqaddr(a,b),
         nqp::if(
diff --git a/src/core/Set.pm6 b/src/core/Set.pm6
index 2a911f42b4d..85245a1b9c4 100644
--- a/src/core/Set.pm6
+++ b/src/core/Set.pm6
@@ -105,7 +105,7 @@ my class Set does Setty {
     }
 
     multi method AT-KEY(Set:D: \k --> Bool:D) {
-        nqp::p6bool($!elems && nqp::existskey($!elems,k.WHICH))
+        nqp::hllbool($!elems ?? nqp::existskey($!elems,k.WHICH) !! 0)
     }
     multi method ASSIGN-KEY(Set:D: \k,\v) {
         X::Assignment::RO.new(value => self).throw;
diff --git a/src/core/SetHash.pm6 b/src/core/SetHash.pm6
index f80aea05b42..0b612568bd5 100644
--- a/src/core/SetHash.pm6
+++ b/src/core/SetHash.pm6
@@ -85,7 +85,7 @@ my class SetHash does Setty {
 
           Proxy.new(
             FETCH => {
-                nqp::p6bool(nqp::existskey(elems,nqp::iterkey_s(iter)))
+                nqp::hllbool(nqp::existskey(elems,nqp::iterkey_s(iter)))
             },
             STORE => -> $, $value {
                 nqp::stmts(
@@ -198,7 +198,7 @@ my class SetHash does Setty {
     multi method AT-KEY(SetHash:D: \k --> Bool:D) is raw {
         Proxy.new(
           FETCH => {
-              nqp::p6bool($!elems && nqp::existskey($!elems,k.WHICH))
+              nqp::hllbool($!elems ?? nqp::existskey($!elems,k.WHICH) !! 0)
           },
           STORE => -> $, $value {
               nqp::stmts(
@@ -223,13 +223,14 @@ my class SetHash does Setty {
     }
 
     multi method DELETE-KEY(SetHash:D: \k --> Bool:D) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             $!elems && nqp::existskey($!elems,(my $which := k.WHICH)),
             nqp::stmts(
               nqp::deletekey($!elems,$which),
               1
-            )
+            ),
+            0
           )
         )
     }
diff --git a/src/core/Setty.pm6 b/src/core/Setty.pm6
index 43a6828e836..9a5c5c90f27 100644
--- a/src/core/Setty.pm6
+++ b/src/core/Setty.pm6
@@ -71,7 +71,7 @@ my role Setty does QuantHash {
     multi method minpairs(Setty:D:) { self.pairs }
     multi method maxpairs(Setty:D:) { self.pairs }
     multi method Bool(Setty:D: --> Bool:D) {
-        nqp::p6bool($!elems && nqp::elems($!elems))
+        nqp::hllbool($!elems ?? nqp::elems($!elems) !! 0)
     }
 
     method !HASHIFY(\type) {
@@ -105,7 +105,7 @@ my role Setty does QuantHash {
 
     multi method ACCEPTS(Setty:U: \other) { other.^does(self) }
     multi method ACCEPTS(Setty:D: Setty:D \other) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::unless(
             nqp::eqaddr(self,other),
             nqp::if(                                # not same object
@@ -261,7 +261,7 @@ my role Setty does QuantHash {
     }
 
     multi method EXISTS-KEY(Setty:D: \k --> Bool:D) {
-        nqp::p6bool($!elems && nqp::existskey($!elems,k.WHICH))
+        nqp::hllbool($!elems ?? nqp::existskey($!elems,k.WHICH) !! 0)
     }
 
     multi method Bag(Setty:D:) {
@@ -299,7 +299,7 @@ my role Setty does QuantHash {
 }
 
 multi sub infix:(Setty:D \a, Setty:D \b --> Bool:D) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a,b) || (nqp::eqaddr(a.WHAT,b.WHAT) && a.ACCEPTS(b))
     )
 }
diff --git a/src/core/Shaped1Array.pm6 b/src/core/Shaped1Array.pm6
index 2080a680c61..81c9fd87289 100644
--- a/src/core/Shaped1Array.pm6
+++ b/src/core/Shaped1Array.pm6
@@ -47,7 +47,7 @@
 
         multi method EXISTS-POS(::?CLASS:D: int \one) {
             my \reified := nqp::getattr(self,List,'$!reified');
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::elems(reified))
                 && nqp::not_i(nqp::isnull(nqp::atpos(reified,one)
               ))
@@ -55,7 +55,7 @@
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one) {
             my \reified := nqp::getattr(self,List,'$!reified');
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::elems(reified))
                 && nqp::not_i(nqp::isnull(nqp::atpos(reified,one)
               ))
@@ -210,7 +210,7 @@
                     )
                 }
                 method count-only() { nqp::p6box_i(nqp::elems($!reified)) }
-                method bool-only()  { nqp::p6bool(nqp::elems($!reified)) }
+                method bool-only()  { nqp::hllbool(nqp::elems($!reified)) }
                 method sink-all(--> IterationEnd) {
                     $!pos = nqp::elems($!reified)
                 }
diff --git a/src/core/Shaped2Array.pm6 b/src/core/Shaped2Array.pm6
index 03a408db681..61eebdb7248 100644
--- a/src/core/Shaped2Array.pm6
+++ b/src/core/Shaped2Array.pm6
@@ -44,7 +44,7 @@
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two) {
             my \reified := nqp::getattr(self,List,'$!reified');
             my \dims := nqp::dimensions(reified);
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::atpos_i(dims,0))
                 && nqp::islt_i(two,nqp::atpos_i(dims,1))
                   && nqp::not_i(nqp::isnull(nqp::atpos2d(reified,one,two)))
@@ -53,7 +53,7 @@
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two) {
             my \reified := nqp::getattr(self,List,'$!reified');
             my \dims := nqp::dimensions(reified);
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::atpos_i(dims,0))
                 && nqp::islt_i(two,nqp::atpos_i(dims,1))
                   && nqp::not_i(nqp::isnull(nqp::atpos2d(reified,one,two)))
diff --git a/src/core/Shaped3Array.pm6 b/src/core/Shaped3Array.pm6
index 8182b85ad2d..f203da89494 100644
--- a/src/core/Shaped3Array.pm6
+++ b/src/core/Shaped3Array.pm6
@@ -44,7 +44,7 @@
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two, int \three) {
             my \reified := nqp::getattr(self,List,'$!reified');
             my \dims := nqp::dimensions(reified);
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::atpos_i(dims,0))
                 && nqp::islt_i(two,nqp::atpos_i(dims,1))
                   && nqp::islt_i(three,nqp::atpos_i(dims,2))
@@ -56,7 +56,7 @@
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two, Int:D \three) {
             my \reified := nqp::getattr(self,List,'$!reified');
             my \dims := nqp::dimensions(reified);
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::islt_i(one,nqp::atpos_i(dims,0))
                 && nqp::islt_i(two,nqp::atpos_i(dims,1))
                   && nqp::islt_i(three,nqp::atpos_i(dims,2))
diff --git a/src/core/ShapedArray.pm6 b/src/core/ShapedArray.pm6
index 98f28887cb8..92fb0f12363 100644
--- a/src/core/ShapedArray.pm6
+++ b/src/core/ShapedArray.pm6
@@ -80,7 +80,7 @@
         }
 
         multi method EXISTS-POS(::?CLASS:D: **@indices) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::stmts(
                 (my int $numind = @indices.elems),     # reifies
                 (my \indices := nqp::getattr(@indices,List,'$!reified')),
diff --git a/src/core/Signature.pm6 b/src/core/Signature.pm6
index af2eeb50a50..565784fdc3d 100644
--- a/src/core/Signature.pm6
+++ b/src/core/Signature.pm6
@@ -9,10 +9,10 @@ my class Signature { # declared in BOOTSTRAP
     #   has Code $!code;
 
     multi method ACCEPTS(Signature:D: Mu \topic) {
-        nqp::p6bool(try self.ACCEPTS: topic.Capture)
+        nqp::hllbool(nqp::istrue(try self.ACCEPTS: topic.Capture))
     }
     multi method ACCEPTS(Signature:D: Capture $topic) {
-        nqp::p6bool(nqp::p6isbindable(self, nqp::decont($topic)));
+        nqp::hllbool(nqp::p6isbindable(self, nqp::decont($topic)));
     }
     multi method ACCEPTS(Signature:D: Signature:D $topic) {
         my $sclass = self.params.classify({.named});
diff --git a/src/core/Str.pm6 b/src/core/Str.pm6
index 5c703ad0775..f88e64dcbe4 100644
--- a/src/core/Str.pm6
+++ b/src/core/Str.pm6
@@ -38,7 +38,7 @@ my class Str does Stringy { # declared in BOOTSTRAP
     }
 
     multi method Bool(Str:D:) {
-        nqp::p6bool(nqp::chars($!value));
+        nqp::hllbool(nqp::chars($!value));
     }
     method Capture() { die X::Cannot::Capture.new: :what(self) }
 
@@ -106,10 +106,10 @@ my class Str does Stringy { # declared in BOOTSTRAP
     }
 
     multi method ACCEPTS(Str:D: Str:D \other) {
-        nqp::p6bool(nqp::iseq_s(nqp::unbox_s(other),$!value));
+        nqp::hllbool(nqp::iseq_s(nqp::unbox_s(other),$!value));
     }
     multi method ACCEPTS(Str:D: Any:D \other) {
-        nqp::p6bool(nqp::iseq_s(nqp::unbox_s(other.Str),$!value));
+        nqp::hllbool(nqp::iseq_s(nqp::unbox_s(other.Str),$!value));
     }
 
     method chomp(Str:D:) {
@@ -138,7 +138,7 @@ my class Str does Stringy { # declared in BOOTSTRAP
     proto method starts-with(|) {*}
     multi method starts-with(Str:D: Cool:D $needle) {self.starts-with: $needle.Str}
     multi method starts-with(Str:D: Str:D $needle) {
-        nqp::p6bool(nqp::eqat(self, $needle, 0))
+        nqp::hllbool(nqp::eqat(self, $needle, 0))
     }
 
     # TODO Use coercer in 1 candidate when RT131014
@@ -146,7 +146,7 @@ my class Str does Stringy { # declared in BOOTSTRAP
     multi method ends-with(Str:D: Cool:D $suffix) {self.ends-with: $suffix.Str}
     multi method ends-with(Str:D: Str:D $suffix) {
         my \value := nqp::getattr($suffix,Str,'$!value');
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::eqat(
             $!value,value,nqp::sub_i(nqp::chars($!value),nqp::chars(value))
           )
@@ -157,11 +157,11 @@ my class Str does Stringy { # declared in BOOTSTRAP
     proto method substr-eq(|) {*}
     multi method substr-eq(Str:D: Cool:D $needle) {self.substr-eq: $needle.Str}
     multi method substr-eq(Str:D: Str:D $needle) {
-        nqp::p6bool(nqp::eqat($!value,nqp::getattr($needle,Str,'$!value'),0))
+        nqp::hllbool(nqp::eqat($!value,nqp::getattr($needle,Str,'$!value'),0))
     }
     multi method substr-eq(Str:D: Cool:D $needle, Int:D $pos) {self.substr-eq: $needle.Str, $pos.Int}
     multi method substr-eq(Str:D: Str:D $needle, Int:D $pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             (nqp::isge_i($pos,0) && nqp::islt_i($pos,nqp::chars($!value))),
             nqp::eqat($!value,nqp::getattr($needle,Str,'$!value'),$pos)
@@ -173,13 +173,13 @@ my class Str does Stringy { # declared in BOOTSTRAP
     proto method contains(|) {*}
     multi method contains(Str:D: Cool:D $needle) {self.contains: $needle.Str}
     multi method contains(Str:D: Str:D $needle) {
-        nqp::p6bool(nqp::isne_i(
+        nqp::hllbool(nqp::isne_i(
           nqp::index($!value,nqp::getattr($needle,Str,'$!value'),0),-1
         ))
     }
     multi method contains(Str:D: Cool:D $needle, Int(Cool:D) $pos) {self.contains: $needle.Str, $pos}
     multi method contains(Str:D: Str:D $needle, Int:D $pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::if(
             (nqp::isge_i($pos,0) && nqp::islt_i($pos,nqp::chars($!value))),
             nqp::isne_i(
@@ -1689,7 +1689,7 @@ my class Str does Stringy { # declared in BOOTSTRAP
                     $target.push("") if $!last;
                 }
                 method count-only() { nqp::p6box_i($!todo + $!first + $!last) }
-                method bool-only() { nqp::p6bool($!todo + $!first + $!last) }
+                method bool-only() { nqp::hllbool($!todo + $!first + $!last) }
                 method sink-all(--> IterationEnd) { }
             }.new(self,$limit,$skip-empty));
         }
@@ -2971,13 +2971,13 @@ multi sub infix:(str $a, str $b --> Order:D) {
 }
 
 multi sub infix:<===>(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(a.WHAT,b.WHAT)
       && nqp::iseq_s(nqp::unbox_s(a), nqp::unbox_s(b))
     )
 }
 multi sub infix:<===>(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::iseq_s($a, $b))
+    nqp::hllbool(nqp::iseq_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Order:D) {
@@ -2988,45 +2988,45 @@ multi sub infix:(str $a, str $b --> Order:D) {
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::iseq_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::iseq_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::iseq_s($a, $b))
+    nqp::hllbool(nqp::iseq_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isne_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::isne_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::isne_s($a, $b))
+    nqp::hllbool(nqp::isne_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::islt_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::islt_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::islt_s($a, $b))
+    nqp::hllbool(nqp::islt_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isle_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::isle_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::isle_s($a, $b))
+    nqp::hllbool(nqp::isle_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isgt_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::isgt_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::isgt_s($a, $b))
+    nqp::hllbool(nqp::isgt_s($a, $b))
 }
 
 multi sub infix:(Str:D \a, Str:D \b --> Bool:D) {
-    nqp::p6bool(nqp::isge_s(nqp::unbox_s(a), nqp::unbox_s(b)))
+    nqp::hllbool(nqp::isge_s(nqp::unbox_s(a), nqp::unbox_s(b)))
 }
 multi sub infix:(str $a, str $b --> Bool:D) {
-    nqp::p6bool(nqp::isle_s($a, $b))
+    nqp::hllbool(nqp::isle_s($a, $b))
 }
 
 multi sub infix:<~|>(Str:D \a, Str:D \b --> Str:D) {
@@ -3161,7 +3161,7 @@ multi sub substr-rw(\what, \from) is rw         { what.substr-rw(from)       }
 multi sub substr-rw(\what, \from, \chars) is rw { what.substr-rw(from,chars) }
 
 multi sub infix:(Str:D \a, Str:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::unless(
         nqp::eqaddr(nqp::decont(a),nqp::decont(b)),
         nqp::eqaddr(a.WHAT,b.WHAT) && nqp::iseq_s(a,b)
diff --git a/src/core/Stringy.pm6 b/src/core/Stringy.pm6
index 1034a3681ff..96b29567c9d 100644
--- a/src/core/Stringy.pm6
+++ b/src/core/Stringy.pm6
@@ -3,7 +3,7 @@ my class X::NYI { ... }
 my role Stringy { }
 
 multi sub infix:(Stringy:D \a, Stringy:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::unless(
         nqp::eqaddr(a,b),
         nqp::eqaddr(a.WHAT,b.WHAT) && nqp::iseq_i(a cmp b,0)  # XXX RT #128092
diff --git a/src/core/Thread.pm6 b/src/core/Thread.pm6
index 91663b40ca0..56e7665bc51 100644
--- a/src/core/Thread.pm6
+++ b/src/core/Thread.pm6
@@ -136,7 +136,7 @@ my class Thread {
     }
 
     method is-initial-thread(--> Bool) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::iseq_i(
             nqp::threadid(
               nqp::if(nqp::isconcrete(self),$!vm_thread,nqp::currentthread)
diff --git a/src/core/ThreadPoolScheduler.pm6 b/src/core/ThreadPoolScheduler.pm6
index 81ab91b60d7..9c2333593a1 100644
--- a/src/core/ThreadPoolScheduler.pm6
+++ b/src/core/ThreadPoolScheduler.pm6
@@ -40,7 +40,7 @@ my class ThreadPoolScheduler does Scheduler {
         }
 
         sub holding-locks() {
-            nqp::p6bool(nqp::threadlockcount(nqp::currentthread()))
+            nqp::hllbool(nqp::threadlockcount(nqp::currentthread()))
         }
 
         method await(Awaitable:D $a) {
diff --git a/src/core/Uni.pm6 b/src/core/Uni.pm6
index 57666114f25..e383a31f391 100644
--- a/src/core/Uni.pm6
+++ b/src/core/Uni.pm6
@@ -48,7 +48,7 @@ my class Uni does Positional[uint32] does Stringy is repr('VMArray') is array_ty
                     nqp::sub_i(nqp::elems($!uni), nqp::add_i($!i, 1)),
                     0))
             }
-            method bool-only { nqp::p6bool(self.count-only) }
+            method bool-only { nqp::hllbool(self.count-only) }
         }.new: self
     }
 
@@ -77,7 +77,7 @@ my class Uni does Positional[uint32] does Stringy is repr('VMArray') is array_ty
     }
 
     multi method Bool(Uni:D:) {
-        nqp::p6bool(nqp::elems(self));
+        nqp::hllbool(nqp::elems(self));
     }
 
     method codes(Uni:D:)   { nqp::elems(self) }
@@ -86,7 +86,7 @@ my class Uni does Positional[uint32] does Stringy is repr('VMArray') is array_ty
     method Int(Uni:D:)     { nqp::elems(self) }
 
     multi method EXISTS-POS(Uni:D: int \pos) {
-        nqp::p6bool(
+        nqp::hllbool(
           nqp::islt_i(pos,nqp::elems(self)) && nqp::isge_i(pos,0)
         );
     }
diff --git a/src/core/Version.pm6 b/src/core/Version.pm6
index 6a00efc52cb..86b4d822274 100644
--- a/src/core/Version.pm6
+++ b/src/core/Version.pm6
@@ -126,7 +126,7 @@ class Version {
 
                 # if whatever there, no more to check this iteration
                 unless nqp::istype($o,Whatever) {
-                    return nqp::p6bool($!plus) if $o after  $v;
+                    return nqp::hllbool($!plus) if $o after  $v;
                     return False               if $o before $v;
                 }
             }
@@ -151,12 +151,12 @@ class Version {
     }
 
     method parts() { nqp::hllize($!parts) }
-    method plus()  { nqp::p6bool($!plus) }
+    method plus()  { nqp::hllbool($!plus) }
 }
 
 
 multi sub infix:(Version:D \a, Version:D \b) {
-    nqp::p6bool(
+    nqp::hllbool(
       nqp::eqaddr(nqp::decont(a),nqp::decont(b))
         || (nqp::eqaddr(a.WHAT,b.WHAT)
              && nqp::iseq_s(
diff --git a/src/core/metaops.pm6 b/src/core/metaops.pm6
index 7affa92f1c9..490858e7c59 100644
--- a/src/core/metaops.pm6
+++ b/src/core/metaops.pm6
@@ -469,7 +469,7 @@ multi sub METAOP_REDUCE_CHAIN(\op) {
                 && op.($current,$next),
               $current := $next
             ),
-            nqp::p6bool(nqp::eqaddr($next,IterationEnd))
+            nqp::hllbool(nqp::eqaddr($next,IterationEnd))
           )
         )
     }
diff --git a/src/core/native_array.pm6 b/src/core/native_array.pm6
index 54e07e5b2f5..7651ef58f1d 100644
--- a/src/core/native_array.pm6
+++ b/src/core/native_array.pm6
@@ -473,7 +473,7 @@ my class array does Iterable {
         }
 
         multi method ACCEPTS(strarray:D: strarray:D \other) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::unless(
                 nqp::eqaddr(self,other),
                 nqp::if(
@@ -956,7 +956,7 @@ my class array does Iterable {
         }
 
         multi method ACCEPTS(intarray:D: intarray:D \other) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::unless(
                 nqp::eqaddr(self,other),
                 nqp::if(
@@ -1491,7 +1491,7 @@ my class array does Iterable {
         }
 
         multi method ACCEPTS(numarray:D: numarray:D \other) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::unless(
                 nqp::eqaddr(self,other),
                 nqp::if(
@@ -1625,7 +1625,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: **@indices) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::stmts(
                 (my int $numdims = nqp::numdimensions(self)),
                 (my int $numind  = @indices.elems),      # reifies
@@ -1962,12 +1962,12 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
@@ -2046,7 +2046,7 @@ my class array does Iterable {
                     )
                 }
                 method count-only() { nqp::p6box_i(nqp::elems($!list)) }
-                method bool-only()  { nqp::p6bool(nqp::elems($!list)) }
+                method bool-only()  { nqp::hllbool(nqp::elems($!list)) }
                 method sink-all(--> IterationEnd) {
                     $!pos = nqp::elems($!list)
                 }
@@ -2142,7 +2142,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -2150,7 +2150,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -2185,7 +2185,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two, int \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -2195,7 +2195,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two, Int:D \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -2513,12 +2513,12 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
@@ -2597,7 +2597,7 @@ my class array does Iterable {
                     )
                 }
                 method count-only() { nqp::p6box_i(nqp::elems($!list)) }
-                method bool-only()  { nqp::p6bool(nqp::elems($!list)) }
+                method bool-only()  { nqp::hllbool(nqp::elems($!list)) }
                 method sink-all(--> IterationEnd) {
                     $!pos = nqp::elems($!list)
                 }
@@ -2693,7 +2693,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -2701,7 +2701,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -2736,7 +2736,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two, int \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -2746,7 +2746,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two, Int:D \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -3064,12 +3064,12 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
@@ -3148,7 +3148,7 @@ my class array does Iterable {
                     )
                 }
                 method count-only() { nqp::p6box_i(nqp::elems($!list)) }
-                method bool-only()  { nqp::p6bool(nqp::elems($!list)) }
+                method bool-only()  { nqp::hllbool(nqp::elems($!list)) }
                 method sink-all(--> IterationEnd) {
                     $!pos = nqp::elems($!list)
                 }
@@ -3244,7 +3244,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -3252,7 +3252,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -3287,7 +3287,7 @@ my class array does Iterable {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two, int \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -3297,7 +3297,7 @@ my class array does Iterable {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two, Int:D \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -3390,7 +3390,7 @@ my class array does Iterable {
         $idx >= 0 && $idx < nqp::elems(self)
     }
 
-    multi method Bool(array:D:)    { nqp::p6bool(nqp::elems(self)) }
+    multi method Bool(array:D:)    { nqp::hllbool(nqp::elems(self)) }
     multi method Numeric(array:D:) { nqp::elems(self) }
     multi method Str(array:D:)     { self.join(' ') }
 
diff --git a/src/core/set_elem.pm6 b/src/core/set_elem.pm6
index af1d3914f90..3357987af82 100644
--- a/src/core/set_elem.pm6
+++ b/src/core/set_elem.pm6
@@ -8,37 +8,41 @@
 
 proto sub infix:<(elem)>($, $, *% --> Bool:D) is pure {*}
 multi sub infix:<(elem)>(Str:D $a, Map:D $b --> Bool:D) {
-    nqp::p6bool(
-      nqp::elems(my \storage := nqp::getattr(nqp::decont($b),Map,'$!storage'))
-        && nqp::if(
-             nqp::eqaddr($b.keyof,Str(Any)),
-             nqp::atkey(storage,$a),                      # normal hash
-             nqp::getattr(                                # object hash
-               nqp::ifnull(
-                 nqp::atkey(storage,$a.WHICH),
-                 BEGIN   # provide virtual value False    # did not exist
-                   nqp::p6bindattrinvres(nqp::create(Pair),Pair,'$!value',False)
-               ),
-               Pair,
-              '$!value'
-             )
-           )
+    nqp::hllbool(
+        nqp::istrue(
+            nqp::elems(my \storage := nqp::getattr(nqp::decont($b),Map,'$!storage'))
+              && nqp::if(
+                   nqp::eqaddr($b.keyof,Str(Any)),
+                   nqp::atkey(storage,$a),                      # normal hash
+                   nqp::getattr(                                # object hash
+                     nqp::ifnull(
+                       nqp::atkey(storage,$a.WHICH),
+                       BEGIN   # provide virtual value False    # did not exist
+                         nqp::p6bindattrinvres(nqp::create(Pair),Pair,'$!value',False)
+                     ),
+                     Pair,
+                    '$!value'
+                   )
+                 )
+        )
     )
 }
 multi sub infix:<(elem)>(Any $a, Map:D $b --> Bool:D) {
-    nqp::p6bool(
-      nqp::elems(                                       # haz a haystack
-        my \storage := nqp::getattr(nqp::decont($b),Map,'$!storage')
-      ) && nqp::not_i(nqp::eqaddr($b.keyof,Str(Any)))   # is object hash
-        && nqp::getattr(
-             nqp::ifnull(
-               nqp::atkey(storage,$a.WHICH),            # exists
-               BEGIN   # provide virtual value False    # did not exist
-                 nqp::p6bindattrinvres(nqp::create(Pair),Pair,'$!value',False)
-             ),
-             Pair,
-             '$!value'
-           )
+    nqp::hllbool(
+        nqp::istrue(
+            nqp::elems(                                       # haz a haystack
+              my \storage := nqp::getattr(nqp::decont($b),Map,'$!storage')
+            ) && nqp::not_i(nqp::eqaddr($b.keyof,Str(Any)))   # is object hash
+              && nqp::getattr(
+                   nqp::ifnull(
+                     nqp::atkey(storage,$a.WHICH),            # exists
+                     BEGIN   # provide virtual value False    # did not exist
+                       nqp::p6bindattrinvres(nqp::create(Pair),Pair,'$!value',False)
+                   ),
+                   Pair,
+                   '$!value'
+                 )
+        )
     )
 }
 multi sub infix:<(elem)>(Int:D $a, Range:D $b --> Bool:D) {
@@ -68,8 +72,8 @@ multi sub infix:<(elem)>(Any $a, Iterator:D $b --> Bool:D) {
     )
 }
 multi sub infix:<(elem)>(Any $a, QuantHash:D $b --> Bool:D) {
-    nqp::p6bool(
-      (my \elems := $b.RAW-HASH) && nqp::existskey(elems,$a.WHICH)
+    nqp::hllbool(
+      (my \elems := $b.RAW-HASH) ?? nqp::existskey(elems,$a.WHICH) !! 0
     )
 }
 
diff --git a/src/core/set_precedes.pm6 b/src/core/set_precedes.pm6
index 0e803194df7..ffdc8962052 100644
--- a/src/core/set_precedes.pm6
+++ b/src/core/set_precedes.pm6
@@ -26,7 +26,7 @@ multi sub infix:<<(<+)>>(Setty:D \a, QuantHash:D \b --> Bool:D) {
             iter && nqp::existskey(braw,nqp::iterkey_s(nqp::shift(iter))),
             nqp::null
           ),
-          nqp::p6bool(nqp::isfalse(iter))
+          nqp::hllbool(nqp::isfalse(iter))
         ),
         False
       ),
diff --git a/src/core/set_proper_subset.pm6 b/src/core/set_proper_subset.pm6
index 65ebc220a13..dae362c17b6 100644
--- a/src/core/set_proper_subset.pm6
+++ b/src/core/set_proper_subset.pm6
@@ -86,7 +86,7 @@ multi sub infix:<<(<)>>(Baggy:D $a, Baggy:D $b --> Bool:D) {
                   nqp::unless($less,$less = left < right)
                 )
               ),
-              nqp::p6bool(      # ok so far, must have lower total or fewer keys
+              nqp::hllbool(      # ok so far, must have lower total or fewer keys
                 $less || nqp::islt_i(nqp::elems(araw),nqp::elems(braw))
               )
             ),
@@ -94,8 +94,8 @@ multi sub infix:<<(<)>>(Baggy:D $a, Baggy:D $b --> Bool:D) {
           ),
           False                 # keys on left, no keys on right
         ),
-        nqp::p6bool(            # no keys on left
-          (my \raw := $b.RAW-HASH) && nqp::elems(raw)
+        nqp::hllbool(            # no keys on left
+          (my \raw := $b.RAW-HASH) ?? nqp::elems(raw) !! 0
         )
       )
     )
diff --git a/src/vm/moar/Perl6/Ops.nqp b/src/vm/moar/Perl6/Ops.nqp
index e8de48921fd..58fcdd71e93 100644
--- a/src/vm/moar/Perl6/Ops.nqp
+++ b/src/vm/moar/Perl6/Ops.nqp
@@ -121,8 +121,7 @@ $ops.add_hll_op('perl6', 'p6definite', -> $qastcomp, $op {
     my $res_reg := $*REGALLOC.fresh_o();
     nqp::push(@ops, MAST::Op.new( :op('decont'), $res_reg, $value_res.result_reg ));
     nqp::push(@ops, MAST::Op.new( :op('isconcrete'), $tmp_reg, $res_reg ));
-    nqp::push(@ops, MAST::ExtOp.new( :op('p6bool'), :cu($qastcomp.mast_compunit),
-        $res_reg, $tmp_reg ));
+    nqp::push(@ops, MAST::Op.new( :op('hllbool'), $res_reg, $tmp_reg ));
     $*REGALLOC.release_register($value_res.result_reg, $MVM_reg_obj);
     $*REGALLOC.release_register($tmp_reg, $MVM_reg_int64);
     MAST::InstructionList.new(@ops, $res_reg, $MVM_reg_obj)
diff --git a/tools/build/makeNATIVE_SHAPED_ARRAY.p6 b/tools/build/makeNATIVE_SHAPED_ARRAY.p6
index fbf7c62f28d..e337546b153 100755
--- a/tools/build/makeNATIVE_SHAPED_ARRAY.p6
+++ b/tools/build/makeNATIVE_SHAPED_ARRAY.p6
@@ -345,12 +345,12 @@ for $*IN.lines -> $line {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0) && nqp::islt_i(one,nqp::elems(self))
             )
         }
@@ -429,7 +429,7 @@ for $*IN.lines -> $line {
                     )
                 }
                 method count-only() { nqp::p6box_i(nqp::elems($!list)) }
-                method bool-only()  { nqp::p6bool(nqp::elems($!list)) }
+                method bool-only()  { nqp::hllbool(nqp::elems($!list)) }
                 method sink-all(--> IterationEnd) {
                     $!pos = nqp::elems($!list)
                 }
@@ -525,7 +525,7 @@ for $*IN.lines -> $line {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -533,7 +533,7 @@ for $*IN.lines -> $line {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::islt_i(one,nqp::atpos_i(nqp::dimensions(self),0))
@@ -568,7 +568,7 @@ for $*IN.lines -> $line {
         }
 
         multi method EXISTS-POS(::?CLASS:D: int \one, int \two, int \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)
@@ -578,7 +578,7 @@ for $*IN.lines -> $line {
             )
         }
         multi method EXISTS-POS(::?CLASS:D: Int:D \one, Int:D \two, Int:D \three) {
-            nqp::p6bool(
+            nqp::hllbool(
               nqp::isge_i(one,0)
                 && nqp::isge_i(two,0)
                 && nqp::isge_i(three,0)