Luke Littler is through to the semi-finals of the Grand Slam of Darts after a battling 16-12 victory in a high-quality clash with Josh Rock in Wolverhampton.