Why push on an empty list and keep track of the blocks? Can't you push on `0` and increment/decrement the value in `pushBlock` and `popBlock`?