Exception.cpp 936 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, Linus Groh <mail@linusgroh.de>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include <AK/String.h>
  8. #include <LibJS/AST.h>
  9. #include <LibJS/Interpreter.h>
  10. #include <LibJS/Runtime/Exception.h>
  11. #include <LibJS/Runtime/VM.h>
  12. namespace JS {
  13. Exception::Exception(Value value)
  14. : m_value(value)
  15. {
  16. auto& vm = this->vm();
  17. m_traceback.ensure_capacity(vm.call_stack().size());
  18. for (auto* call_frame : vm.call_stack()) {
  19. auto function_name = call_frame->function_name;
  20. if (function_name.is_empty())
  21. function_name = "<anonymous>";
  22. m_traceback.prepend({
  23. .function_name = move(function_name),
  24. .source_range = call_frame->current_node->source_range(),
  25. });
  26. }
  27. }
  28. void Exception::visit_edges(Visitor& visitor)
  29. {
  30. Cell::visit_edges(visitor);
  31. visitor.visit(m_value);
  32. }
  33. }