TemporaryClearException.h 603 B

12345678910111213141516171819202122232425262728293031323334
  1. /*
  2. * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibJS/Runtime/Exception.h>
  8. #include <LibJS/Runtime/VM.h>
  9. namespace JS {
  10. class TemporaryClearException {
  11. public:
  12. explicit TemporaryClearException(VM& vm)
  13. : m_vm(vm)
  14. , m_previous_exception(vm.exception())
  15. {
  16. m_vm.clear_exception();
  17. }
  18. ~TemporaryClearException()
  19. {
  20. if (m_previous_exception)
  21. m_vm.set_exception(*m_previous_exception);
  22. }
  23. private:
  24. VM& m_vm;
  25. Exception* m_previous_exception;
  26. };
  27. }