| 6991 | } |
| 6992 | |
| 6993 | static void pure_debug_backtrace(ostream& out) |
| 6994 | { |
| 6995 | interpreter& interp = *interpreter::g_interp; |
| 6996 | list<DebugInfo>::iterator it = interp.debug_info.begin(), |
| 6997 | end = interp.debug_info.end(); |
| 6998 | if (it == end) return; |
| 6999 | size_t save_sz = interp.sstk_sz; |
| 7000 | interp.sstk_sz = interp.debug_info.back().sz; |
| 7001 | get_vars(interp, interp.debug_info.rend()); |
| 7002 | for (; it != end; ++it) { |
| 7003 | DebugInfo& d = *it; |
| 7004 | if (d.r) { |
| 7005 | out << stacklab(interp, it) << " [" << d.n << "] " |
| 7006 | << pname(interp, d.e) << ": " << *d.r << ";\n"; |
| 7007 | } else if (d.e->tag > 0 && |
| 7008 | interp.externals.find(d.e->tag) != interp.externals.end()) { |
| 7009 | ExternInfo &info = interp.externals[d.e->tag]; |
| 7010 | out << stacklab(interp, it) << " [" << d.n << "] " |
| 7011 | << pname(interp, d.e) << ": " << info << ";\n"; |
| 7012 | } else { |
| 7013 | out << stacklab(interp, it) << " [" << d.n << "] " |
| 7014 | << pname(interp, d.e) << ":\n"; |
| 7015 | } |
| 7016 | print_vars(out, interp, d); |
| 7017 | } |
| 7018 | interp.sstk_sz = save_sz; |
| 7019 | } |
| 7020 | |
| 7021 | extern "C" |
| 7022 | void pure_debug_rule(void *_e, void *_r) |
no test coverage detected