From 30519c22f6ca7ec902514c30f8d38457745a9d6b Mon Sep 17 00:00:00 2001 From: Emanuele Torre Date: Mon, 4 May 2020 13:20:25 +0200 Subject: [PATCH] LibJS: Re-implement console functions as wrappers around Console methods Console methods are now Value(void) functions. JavaScript functions in the JavaScript ConsoleObject are now implemented as simple wrappers around Console methods. This will make it possible for LibJS users to easily override the default behaviour of JS console functions (even their return value!) once we add a way to override Console behaviour. --- Libraries/LibJS/Console.cpp | 48 +++++++++++++++-------- Libraries/LibJS/Console.h | 18 ++++----- Libraries/LibJS/Runtime/ConsoleObject.cpp | 34 +++++----------- 3 files changed, 49 insertions(+), 51 deletions(-) diff --git a/Libraries/LibJS/Console.cpp b/Libraries/LibJS/Console.cpp index 25c8324dcee..f3ead48ec87 100644 --- a/Libraries/LibJS/Console.cpp +++ b/Libraries/LibJS/Console.cpp @@ -37,40 +37,46 @@ Console::Console(Interpreter& interpreter) { } -void Console::debug(String text) +Value Console::debug() { - dbg() << "debug: " << text; + dbg() << "debug: " << m_interpreter.join_arguments(); + return js_undefined(); } -void Console::error(String text) +Value Console::error() { - dbg() << "error: " << text; + dbg() << "error: " << m_interpreter.join_arguments(); + return js_undefined(); } -void Console::info(String text) +Value Console::info() { - dbg() << "info: " << text; + dbg() << "info: " << m_interpreter.join_arguments(); + return js_undefined(); } -void Console::log(String text) +Value Console::log() { - dbg() << "log: " << text; + dbg() << "log: " << m_interpreter.join_arguments(); + return js_undefined(); } -void Console::warn(String text) +Value Console::warn() { - dbg() << "warn: " << text; + dbg() << "warn: " << m_interpreter.join_arguments(); + return js_undefined(); } -void Console::clear() +Value Console::clear() { dbg() << "clear:"; + return js_undefined(); } -void Console::trace(String title) +Value Console::trace() { StringBuilder message_text; - message_text.append(title); + message_text.append(m_interpreter.join_arguments()); auto call_stack = m_interpreter.call_stack(); // -2 to skip the console.trace() call frame @@ -83,31 +89,39 @@ void Console::trace(String title) } dbg() << "log: " << message_text.build(); + return js_undefined(); } -void Console::count(String label) +Value Console::count() { + auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default"; + auto counter_value = m_counters.get(label); if (!counter_value.has_value()) { dbg() << "log: " << label << ": 1"; m_counters.set(label, 1); - return; + return js_undefined(); } auto new_counter_value = counter_value.value() + 1; dbg() << "log: " << label << ": " << new_counter_value; m_counters.set(label, new_counter_value); + + return js_undefined(); } -void Console::count_reset(String label) +Value Console::count_reset() { + auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default"; + if (m_counters.contains(label)) { dbg() << "warn: \"" << label << "\" doesn't have a count"; - return; + return js_undefined(); } m_counters.remove(label); dbg() << "log: " << label << ": 0"; + return js_undefined(); } } diff --git a/Libraries/LibJS/Console.h b/Libraries/LibJS/Console.h index c9789971183..1a203c04e49 100644 --- a/Libraries/LibJS/Console.h +++ b/Libraries/LibJS/Console.h @@ -44,18 +44,18 @@ public: HashMap& counters() { return m_counters; } - void debug(String text); - void error(String text); - void info(String text); - void log(String text); - void warn(String text); + Value debug(); + Value error(); + Value info(); + Value log(); + Value warn(); - void clear(); + Value clear(); - void trace(String title); + Value trace(); - void count(String label = "default"); - void count_reset(String label = "default"); + Value count(); + Value count_reset(); private: Interpreter& m_interpreter; diff --git a/Libraries/LibJS/Runtime/ConsoleObject.cpp b/Libraries/LibJS/Runtime/ConsoleObject.cpp index 0feec51a401..697e0edb38a 100644 --- a/Libraries/LibJS/Runtime/ConsoleObject.cpp +++ b/Libraries/LibJS/Runtime/ConsoleObject.cpp @@ -28,7 +28,6 @@ #include #include -#include #include #include #include @@ -56,62 +55,47 @@ ConsoleObject::~ConsoleObject() Value ConsoleObject::log(Interpreter& interpreter) { - interpreter.console().log(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().log(); } Value ConsoleObject::debug(Interpreter& interpreter) { - interpreter.console().debug(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().debug(); } Value ConsoleObject::info(Interpreter& interpreter) { - interpreter.console().info(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().info(); } Value ConsoleObject::warn(Interpreter& interpreter) { - interpreter.console().warn(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().warn(); } Value ConsoleObject::error(Interpreter& interpreter) { - interpreter.console().error(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().error(); } Value ConsoleObject::trace(Interpreter& interpreter) { - interpreter.console().trace(interpreter.join_arguments()); - return js_undefined(); + return interpreter.console().trace(); } Value ConsoleObject::count(Interpreter& interpreter) { - if (interpreter.argument_count()) - interpreter.console().count(interpreter.argument(0).to_string()); - else - interpreter.console().count(); - return js_undefined(); + return interpreter.console().count(); } Value ConsoleObject::count_reset(Interpreter& interpreter) { - if (interpreter.argument_count()) - interpreter.console().count_reset(interpreter.argument(0).to_string()); - else - interpreter.console().count_reset(); - return js_undefined(); + return interpreter.console().count_reset(); } Value ConsoleObject::clear(Interpreter& interpreter) { - interpreter.console().clear(); - return js_undefined(); + return interpreter.console().clear(); } }