ConsoleObject.cpp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. /*
  2. * Copyright (c) 2020, Andreas Kling <andreas@ladybird.org>
  3. * Copyright (c) 2020-2023, Linus Groh <linusg@serenityos.org>
  4. * Copyright (c) 2020, Emanuele Torre <torreemanuele6@gmail.com>
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #include <LibJS/Console.h>
  9. #include <LibJS/Runtime/ConsoleObject.h>
  10. #include <LibJS/Runtime/ConsoleObjectPrototype.h>
  11. #include <LibJS/Runtime/GlobalObject.h>
  12. namespace JS {
  13. JS_DEFINE_ALLOCATOR(ConsoleObject);
  14. static NonnullGCPtr<ConsoleObjectPrototype> create_console_prototype(Realm& realm)
  15. {
  16. return realm.create<ConsoleObjectPrototype>(realm);
  17. }
  18. ConsoleObject::ConsoleObject(Realm& realm)
  19. : Object(ConstructWithPrototypeTag::Tag, create_console_prototype(realm))
  20. {
  21. }
  22. ConsoleObject::~ConsoleObject() = default;
  23. void ConsoleObject::visit_edges(Visitor& visitor)
  24. {
  25. Base::visit_edges(visitor);
  26. visitor.visit(m_console);
  27. }
  28. void ConsoleObject::initialize(Realm& realm)
  29. {
  30. auto& vm = this->vm();
  31. Base::initialize(realm);
  32. m_console = realm.create<Console>(realm);
  33. u8 attr = Attribute::Writable | Attribute::Enumerable | Attribute::Configurable;
  34. define_native_function(realm, vm.names.assert, assert_, 0, attr);
  35. define_native_function(realm, vm.names.clear, clear, 0, attr);
  36. define_native_function(realm, vm.names.debug, debug, 0, attr);
  37. define_native_function(realm, vm.names.error, error, 0, attr);
  38. define_native_function(realm, vm.names.info, info, 0, attr);
  39. define_native_function(realm, vm.names.log, log, 0, attr);
  40. define_native_function(realm, vm.names.table, table, 0, attr);
  41. define_native_function(realm, vm.names.trace, trace, 0, attr);
  42. define_native_function(realm, vm.names.warn, warn, 0, attr);
  43. define_native_function(realm, vm.names.dir, dir, 0, attr);
  44. define_native_function(realm, vm.names.count, count, 0, attr);
  45. define_native_function(realm, vm.names.countReset, count_reset, 0, attr);
  46. define_native_function(realm, vm.names.group, group, 0, attr);
  47. define_native_function(realm, vm.names.groupCollapsed, group_collapsed, 0, attr);
  48. define_native_function(realm, vm.names.groupEnd, group_end, 0, attr);
  49. define_native_function(realm, vm.names.time, time, 0, attr);
  50. define_native_function(realm, vm.names.timeLog, time_log, 0, attr);
  51. define_native_function(realm, vm.names.timeEnd, time_end, 0, attr);
  52. define_direct_property(vm.well_known_symbol_to_string_tag(), PrimitiveString::create(vm, "console"_string), Attribute::Configurable);
  53. }
  54. // 1.1.1. assert(condition, ...data), https://console.spec.whatwg.org/#assert
  55. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::assert_)
  56. {
  57. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  58. return console_object.console().assert_();
  59. }
  60. // 1.1.2. clear(), https://console.spec.whatwg.org/#clear
  61. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::clear)
  62. {
  63. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  64. return console_object.console().clear();
  65. }
  66. // 1.1.3. debug(...data), https://console.spec.whatwg.org/#debug
  67. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::debug)
  68. {
  69. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  70. return console_object.console().debug();
  71. }
  72. // 1.1.4. error(...data), https://console.spec.whatwg.org/#error
  73. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::error)
  74. {
  75. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  76. return console_object.console().error();
  77. }
  78. // 1.1.5. info(...data), https://console.spec.whatwg.org/#info
  79. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::info)
  80. {
  81. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  82. return console_object.console().info();
  83. }
  84. // 1.1.6. log(...data), https://console.spec.whatwg.org/#log
  85. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::log)
  86. {
  87. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  88. return console_object.console().log();
  89. }
  90. // 1.1.7. table(tabularData, properties), https://console.spec.whatwg.org/#table
  91. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::table)
  92. {
  93. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  94. return console_object.console().table();
  95. }
  96. // 1.1.8. trace(...data), https://console.spec.whatwg.org/#trace
  97. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::trace)
  98. {
  99. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  100. return console_object.console().trace();
  101. }
  102. // 1.1.9. warn(...data), https://console.spec.whatwg.org/#warn
  103. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::warn)
  104. {
  105. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  106. return console_object.console().warn();
  107. }
  108. // 1.1.10. dir(item, options), https://console.spec.whatwg.org/#warn
  109. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::dir)
  110. {
  111. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  112. return console_object.console().dir();
  113. }
  114. // 1.2.1. count(label), https://console.spec.whatwg.org/#count
  115. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count)
  116. {
  117. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  118. return console_object.console().count();
  119. }
  120. // 1.2.2. countReset(label), https://console.spec.whatwg.org/#countreset
  121. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count_reset)
  122. {
  123. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  124. return console_object.console().count_reset();
  125. }
  126. // 1.3.1. group(...data), https://console.spec.whatwg.org/#group
  127. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::group)
  128. {
  129. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  130. return console_object.console().group();
  131. }
  132. // 1.3.2. groupCollapsed(...data), https://console.spec.whatwg.org/#groupcollapsed
  133. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::group_collapsed)
  134. {
  135. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  136. return console_object.console().group_collapsed();
  137. }
  138. // 1.3.3. groupEnd(), https://console.spec.whatwg.org/#groupend
  139. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::group_end)
  140. {
  141. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  142. return console_object.console().group_end();
  143. }
  144. // 1.4.1. time(label), https://console.spec.whatwg.org/#time
  145. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::time)
  146. {
  147. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  148. return console_object.console().time();
  149. }
  150. // 1.4.2. timeLog(label, ...data), https://console.spec.whatwg.org/#timelog
  151. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::time_log)
  152. {
  153. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  154. return console_object.console().time_log();
  155. }
  156. // 1.4.3. timeEnd(label), https://console.spec.whatwg.org/#timeend
  157. JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::time_end)
  158. {
  159. auto& console_object = *vm.current_realm()->intrinsics().console_object();
  160. return console_object.console().time_end();
  161. }
  162. }