mate_weak_or

以下、Bonanza v6 の mate_weak_or() の一部を掲載。

  if ( turn )
    {
      if ( IsDiscoverWK( from, to ) ) { return 0; }

      pc     = -BOARD[from];
      pc_cap =  BOARD[to];
      MOVE_CURR = ( To2Move(to) | From2Move(from)
                      | Piece2Move(pc) | Cap2Move(pc_cap) );
      if ( ( pc == bishop || pc == rook )
           && ( to > I4 || from > I4 ) ) { MOVE_CURR |= FLAG_PROMO; }
    }
  else {
    if ( IsDiscoverBK( from, to ) ) { return 0; }
    
    pc     =  BOARD[from];
    pc_cap = -BOARD[to];
    MOVE_CURR = ( To2Move(to) | From2Move(from) | Piece2Move(pc)
                  | Cap2Move(pc_cap) );
    if ( ( pc == bishop || pc == rook )
         && ( to < A6 || from < A6 ) ) { MOVE_CURR |= FLAG_PROMO; }
  }

  MakeMove( turn, MOVE_CURR, ply );
  if ( I2From(MOVE_LAST) < nsquare )
    {
      if ( InCheck(turn) )
        {
          UnMakeMove( turn, MOVE_CURR, ply );
          return 0;
        }
      flag = 1;
    }
  else {
    assert( ! InCheck(turn) );
    flag = 2;
  }


IsDiscoverWK, IsDiscoverBK マクロで pin チェックしてから、
MakeMove で手を進めているのに、どうして手を進めた後に
InCheck で自玉に王手が掛かっているか調べているのか分からん……