Previously, we had been doing exactly two passes over the event log to caculate the stack object reference map at each trace point. It turns out the correct number of passes depends on how many incorrect assumptions we make about what the stack looks like at instructions with multiple predecessors (i.e. targets of jumps and branches). Each time we detect we've made one or more incorrect assumptions during a pass, we must do another pass to correct those assumptions. That pass may in turn reveal further incorrect assumptions, and so on.
…g outside [0,1)