- return ( bit_is_set(pos.attacks_from(pc, from), to)
- && pos.pl_move_is_legal(m, pinned)
- && !move_is_promotion(m));
+ return bit_is_set(pos.attacks_from(pc, from), to)
+ && (pos.is_check() ? pos.pl_move_is_evasion(m, pinned) : pos.pl_move_is_legal(m, pinned))
+ && !move_is_promotion(m);