Checks stepping over tail calls.

Running test: testStepOver
f (:2:14)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
function f(x) {
  if (x == 2) #debugger;
  if (x-- > 0) return f(x);

Debugger.stepOver called
f (:3:2)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  #if (x-- > 0) return f(x);
}

Debugger.stepOver called
f (:3:15)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) #return f(x);
}

Debugger.stepOver called
f (:3:27)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOver called
f (:3:27)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOver called
f (:3:27)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOver called
f (:3:27)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOver called
(anonymous) (:6:0)
f(5);
#

Debugger.resume called

Running test: testStepOut
f (:2:14)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
function f(x) {
  if (x == 2) #debugger;
  if (x-- > 0) return f(x);

Debugger.stepOut called
f (:3:27)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
f (:3:27)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
f (:3:27)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
(anonymous) (:6:0)
f(5);
#

Debugger.resume called

Running test: testStepOutFromReturn
f (:2:14)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
function f(x) {
  if (x == 2) #debugger;
  if (x-- > 0) return f(x);

Debugger.stepOver called
f (:3:2)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  #if (x-- > 0) return f(x);
}

Debugger.stepOver called
f (:3:15)
f (:3:22)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) #return f(x);
}

Debugger.stepOut called
f (:3:27)
f (:3:22)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
f (:3:27)
f (:3:22)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
f (:3:27)
(anonymous) (:5:0)
  if (x == 2) debugger;
  if (x-- > 0) return f(x);#
}

Debugger.stepOut called
(anonymous) (:6:0)
f(5);
#

Debugger.resume called
