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) (:5:5)
}
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) (:5:5)
}
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) (:5:5)
}
f(5);#


Debugger.resume called
