Error.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2021, Linus Groh <linusg@serenityos.org>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #include <LibJS/Runtime/Error.h>
  8. #include <LibJS/Runtime/GlobalObject.h>
  9. namespace JS {
  10. Error* Error::create(GlobalObject& global_object, const String& message)
  11. {
  12. auto& vm = global_object.vm();
  13. auto* error = global_object.heap().allocate<Error>(global_object, *global_object.error_prototype());
  14. if (!message.is_null())
  15. error->define_property(vm.names.message, js_string(vm, message));
  16. return error;
  17. }
  18. Error::Error(Object& prototype)
  19. : Object(prototype)
  20. {
  21. }
  22. #define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, ArrayType) \
  23. ClassName* ClassName::create(GlobalObject& global_object, const String& message) \
  24. { \
  25. auto& vm = global_object.vm(); \
  26. auto* error = global_object.heap().allocate<ClassName>(global_object, *global_object.snake_name##_prototype()); \
  27. if (!message.is_null()) \
  28. error->define_property(vm.names.message, js_string(vm, message)); \
  29. return error; \
  30. } \
  31. \
  32. ClassName::ClassName(Object& prototype) \
  33. : Error(prototype) \
  34. { \
  35. }
  36. JS_ENUMERATE_ERROR_SUBCLASSES
  37. #undef __JS_ENUMERATE
  38. }