Restructure the unwinder a bit; use visitStackElems and simplify some things

Hopefully a little bit simpler, and duplicating less logic
with Stack::toString.  Contains some fixes to visitStackElems to make
it work for this (it is printing some stacks slightly incorrectly
right now, too ... :)
Esse commit está contido em:
Jordan DeLong
2013-06-04 22:51:47 -07:00
commit de sgolemon
commit 960f36f836
4 arquivos alterados com 260 adições e 248 exclusões
+20 -11
Ver Arquivo
@@ -1613,26 +1613,35 @@ resume:
always_assert(action == UnwindAction::Propagate);
}
// Here we have to propagate an exception out of this VM's nesting
// level.
/*
* Here we have to propagate an exception out of this VM's nesting
* level.
*/
if (g_vmContext->m_nestedVMs.empty()) {
m_fp = nullptr;
m_pc = nullptr;
}
assert(m_faults.size() > 0);
Fault fault = m_faults.back();
m_faults.pop_back();
switch (fault.m_faultType) {
case Fault::UserException: {
Object obj = fault.m_userException;
fault.m_userException->decRefCount();
throw obj;
}
case Fault::UserException:
{
Object obj = fault.m_userException;
fault.m_userException->decRefCount();
throw obj;
}
case Fault::CppException:
// throwException() will take care of deleting heap-allocated
// exception object for us
fault.m_cppException->throwException();
NOT_REACHED();
default:
not_implemented();
not_reached();
}
NOT_REACHED();
not_reached();
}
void VMExecutionContext::reenterVM(TypedValue* retval,