             return nil
         }
         if let promotion = promotion {
-            try! _execute(uncheckedMove: move, promotion: { promotion })
+            try! execute(uncheckedMove: move, promotion: { promotion })
         } else {
-            try! _execute(uncheckedMove: move)
+            try! execute(uncheckedMove: move)
         }
         attackersToKing = attackers
         return move


        let player = playerTurn
        for moveSquare in movesBitboard {
            try! _execute(uncheckedMove: square >>> moveSquare)
            if board.attackersToKing(for: player) != 0 {
                movesBitboard[moveSquare] = false
            }

        return Bitboard(square: move.end).intersects(moves)
    }

    /// Executes `move` without checking its legality, updating the state for `self`.
    ///
    /// - warning: Can cause unwanted effects. Should only be used with moves that are known to be legal.
    ///
    /// - parameter move: The move to be executed.
    /// - parameter promotion: A closure returning a promotion piece kind if a pawn promotion occurs.
    ///
    /// - throws: `ExecutionError` if no piece exists at `move.start` or if `promotion` is invalid.
    public func execute(uncheckedMove move: Move, promotion: @noescape () -> Piece.Kind) throws {
        guard let piece = board[move.start] else {
            throw ExecutionError.missingPiece(move.start)
        }
