         (not (zero? (bit-and nodemap bit)))
         (let [sub-node (aget arr (node-at arr nodemap bit))
               sub-node-new (.inode-without sub-node wedit (+ shift 5) hash key changed?)]
-          (if (.-modified changed?)
-            (if (.single-kv? sub-node-new)
+          (if ^boolean (.-modified changed?)
+            (if ^boolean (.single-kv? sub-node-new)
               (if (and (zero? datamap) (== 1 (bit-count nodemap)))
                 sub-node-new
                 (.copy-and-migrate-to-inline inode wedit bit sub-node-new))

          (if (identical? node root)
            nil
            (set! root node))
          (if (.-modified removed-leaf?)
            (set! count (dec count)))
          tcoll))
      (throw (js/Error. "dissoc! after persistent!"))))


  (copy-and-set-value [inode e bit val]
    (let [idx (inc (* 2 (bitmap-indexed-node-index datamap bit)))]
      (if ^boolean (can-edit e edit)
        (do
          (aset arr idx val)
          inode)
