e7b90fa691
A recent diff called my attention to the logic in enterDebuggerDummyEnv() and exitDebuggerDummyEnv() and I noticed it didn't look quite right. The first time enterDebuggerDummyEnv() is called it creates a frame on an empty call stack, but then exitDebuggerDummyEnv() does not correctly tear down this frame and null out m_fp and m_pc, and this leads to subtle issues. For example, invokeFunc() checks if m_fp is null to decide whether to call enterVM() or reenterVM(). I found a case with the "flow_gen_excep.php" test where invokeFunc was incorrectly calling reenterVM (because m_fp hadn't been nulled out) and it was pushing bogus VM state info into m_nestedVMs. This in turn was causing the logic in CmdNext::onBeginInterrupt() to get confused when comparing the original stack depth with the current stack depth. This diff updates exitDebuggerDummyEnv() to correctly tear down the frame and null out m_fp and m_pc, and it updates enterDebuggerDummyEnv() to assume the callstack is always empty (which should be the case). I've also beefed up the asserts in both of these methods.