     heap-size >= ; inline
 
 : left-bounds-check? ( m heap -- ? )
-    >r left r> heap-bounds-check? ; inline
+    [ left ] dip heap-bounds-check? ; inline
 
 : right-bounds-check? ( m heap -- ? )
-    >r right r> heap-bounds-check? ; inline
+    [ right ] dip heap-bounds-check? ; inline
 
 : continue? ( m up[m] heap -- ? )
     [ data-nth swap ] keep [ data-nth ] keep

    data>> nth-unsafe ; inline

: up-value ( n heap -- entry )
    >r up r> data-nth ; inline

: left-value ( n heap -- entry )
    >r left r> data-nth ; inline

: right-value ( n heap -- entry )
    >r right r> data-nth ; inline

: data-set-nth ( entry n heap -- )
    >r [ >>index drop ] 2keep r>
    data>> set-nth-unsafe ; inline

: data-push ( entry heap -- n )

DEFER: up-heap

: (up-heap) ( n heap -- )
    [ dup up ] dip
    3dup continue? [
        [ data-exchange ] 2keep up-heap
    ] [
