Console.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * Copyright (c) 2020, Emanuele Torre <torreemanuele6@gmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Function.h>
  8. #include <AK/HashMap.h>
  9. #include <AK/Noncopyable.h>
  10. #include <LibJS/Forward.h>
  11. namespace JS {
  12. class ConsoleClient;
  13. class Console {
  14. AK_MAKE_NONCOPYABLE(Console);
  15. AK_MAKE_NONMOVABLE(Console);
  16. public:
  17. explicit Console(GlobalObject&);
  18. void set_client(ConsoleClient& client) { m_client = &client; }
  19. GlobalObject& global_object() { return m_global_object; }
  20. const GlobalObject& global_object() const { return m_global_object; }
  21. VM& vm();
  22. HashMap<String, unsigned>& counters() { return m_counters; }
  23. const HashMap<String, unsigned>& counters() const { return m_counters; }
  24. Value debug();
  25. Value error();
  26. Value info();
  27. Value log();
  28. Value warn();
  29. Value clear();
  30. Value trace();
  31. Value count();
  32. Value count_reset();
  33. Value assert_();
  34. unsigned counter_increment(String label);
  35. bool counter_reset(String label);
  36. private:
  37. GlobalObject& m_global_object;
  38. ConsoleClient* m_client { nullptr };
  39. HashMap<String, unsigned> m_counters;
  40. };
  41. class ConsoleClient {
  42. public:
  43. explicit ConsoleClient(Console& console)
  44. : m_console(console)
  45. {
  46. }
  47. virtual Value debug() = 0;
  48. virtual Value error() = 0;
  49. virtual Value info() = 0;
  50. virtual Value log() = 0;
  51. virtual Value warn() = 0;
  52. virtual Value clear() = 0;
  53. virtual Value trace() = 0;
  54. virtual Value count() = 0;
  55. virtual Value count_reset() = 0;
  56. virtual Value assert_() = 0;
  57. protected:
  58. virtual ~ConsoleClient() = default;
  59. VM& vm();
  60. GlobalObject& global_object() { return m_console.global_object(); }
  61. const GlobalObject& global_object() const { return m_console.global_object(); }
  62. Vector<String> get_trace() const;
  63. Console& m_console;
  64. };
  65. }