vm_obj scope_trace(vm_obj const &, vm_obj const & line, vm_obj const & col, vm_obj const & fn) { pos_info_provider * pip = get_pos_info_provider(); if (pip) { scope_traces_as_messages traces_as_messages(pip->get_file_name(), pos_info(force_to_unsigned(line), force_to_unsigned(col))); return invoke(fn, mk_vm_unit()); } else { return invoke(fn, mk_vm_unit()); } }
void dump_pos_info(expr const & v) { std::cout << v << "\n\n"; for_each(v, [&](expr const & e, unsigned) { auto pip = get_pos_info_provider(); if (!pip) return false; if (auto p = pip->get_pos_info(e)) std::cout << "pos[" << ((unsigned)e.kind()) << "]: " << p->first << ":" << p->second << "\n" << e << "\n"; return true; }); std::cout << "------------\n"; }
format nested_elaborator_exception::pp() const { format r = m_exception->pp(); if (dynamic_cast<nested_elaborator_exception*>(m_exception.get()) == nullptr) { r += line() + format("Additional information:"); } pos_info_provider * pip = get_pos_info_provider(); r += line(); if (pip) { r += format(pip->get_file_name()) + colon(); if (m_pos) { r += format(m_pos->first) + colon() + format(m_pos->second) + colon(); } r += space(); } r += format("context: ") + m_fmt; return r; }