mirror of
https://github.com/RGBCube/serenity
synced 2025-05-28 16:15:10 +00:00
LibJS: Add some helpers and use them to re-implement Console functions
Also add const overloads for some getters. Also const-qualify Interpreter::join_arguments().
This commit is contained in:
parent
92815f313a
commit
bc7ed4524e
4 changed files with 47 additions and 21 deletions
|
@ -78,10 +78,8 @@ Value Console::trace()
|
||||||
StringBuilder message_text;
|
StringBuilder message_text;
|
||||||
message_text.append(m_interpreter.join_arguments());
|
message_text.append(m_interpreter.join_arguments());
|
||||||
|
|
||||||
auto call_stack = m_interpreter.call_stack();
|
auto trace = m_interpreter.get_trace();
|
||||||
// -2 to skip the console.trace() call frame
|
for (auto function_name : trace) {
|
||||||
for (ssize_t i = call_stack.size() - 2; i >= 0; --i) {
|
|
||||||
auto function_name = call_stack[i].function_name;
|
|
||||||
message_text.append("\n -> ");
|
message_text.append("\n -> ");
|
||||||
if (String(function_name).is_empty())
|
if (String(function_name).is_empty())
|
||||||
function_name = "<anonymous>";
|
function_name = "<anonymous>";
|
||||||
|
@ -96,16 +94,8 @@ Value Console::count()
|
||||||
{
|
{
|
||||||
auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default";
|
auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default";
|
||||||
|
|
||||||
auto counter_value = m_counters.get(label);
|
auto counter_value = counter_increment(label);
|
||||||
if (!counter_value.has_value()) {
|
dbg() << "log: " << label << ": " << counter_value;
|
||||||
dbg() << "log: " << label << ": 1";
|
|
||||||
m_counters.set(label, 1);
|
|
||||||
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();
|
return js_undefined();
|
||||||
}
|
}
|
||||||
|
@ -114,14 +104,34 @@ Value Console::count_reset()
|
||||||
{
|
{
|
||||||
auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default";
|
auto label = m_interpreter.argument_count() ? m_interpreter.argument(0).to_string() : "default";
|
||||||
|
|
||||||
if (m_counters.contains(label)) {
|
if (counter_reset(label))
|
||||||
|
dbg() << "log: " << label << ": 0";
|
||||||
|
else
|
||||||
dbg() << "warn: \"" << label << "\" doesn't have a count";
|
dbg() << "warn: \"" << label << "\" doesn't have a count";
|
||||||
return js_undefined();
|
|
||||||
}
|
|
||||||
|
|
||||||
m_counters.remove(label);
|
|
||||||
dbg() << "log: " << label << ": 0";
|
|
||||||
return js_undefined();
|
return js_undefined();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned Console::counter_increment(String label)
|
||||||
|
{
|
||||||
|
auto value = m_counters.get(label);
|
||||||
|
if (!value.has_value()) {
|
||||||
|
m_counters.set(label, 1);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto new_value = value.value() + 1;
|
||||||
|
m_counters.set(label, new_value);
|
||||||
|
return new_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Console::counter_reset(String label)
|
||||||
|
{
|
||||||
|
if (!m_counters.contains(label))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
m_counters.remove(label);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,8 +41,10 @@ public:
|
||||||
Console(Interpreter&);
|
Console(Interpreter&);
|
||||||
|
|
||||||
Interpreter& interpreter() { return m_interpreter; }
|
Interpreter& interpreter() { return m_interpreter; }
|
||||||
|
const Interpreter& interpreter() const { return m_interpreter; }
|
||||||
|
|
||||||
HashMap<String, unsigned>& counters() { return m_counters; }
|
HashMap<String, unsigned>& counters() { return m_counters; }
|
||||||
|
const HashMap<String, unsigned>& counters() const { return m_counters; }
|
||||||
|
|
||||||
Value debug();
|
Value debug();
|
||||||
Value error();
|
Value error();
|
||||||
|
@ -57,6 +59,9 @@ public:
|
||||||
Value count();
|
Value count();
|
||||||
Value count_reset();
|
Value count_reset();
|
||||||
|
|
||||||
|
unsigned counter_increment(String label);
|
||||||
|
bool counter_reset(String label);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Interpreter& m_interpreter;
|
Interpreter& m_interpreter;
|
||||||
|
|
||||||
|
|
|
@ -262,7 +262,7 @@ const GlobalObject& Interpreter::global_object() const
|
||||||
return static_cast<const GlobalObject&>(*m_global_object);
|
return static_cast<const GlobalObject&>(*m_global_object);
|
||||||
}
|
}
|
||||||
|
|
||||||
String Interpreter::join_arguments()
|
String Interpreter::join_arguments() const
|
||||||
{
|
{
|
||||||
StringBuilder joined_arguments;
|
StringBuilder joined_arguments;
|
||||||
for (size_t i = 0; i < argument_count(); ++i) {
|
for (size_t i = 0; i < argument_count(); ++i) {
|
||||||
|
@ -273,4 +273,13 @@ String Interpreter::join_arguments()
|
||||||
return joined_arguments.build();
|
return joined_arguments.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Vector<String> Interpreter::get_trace() const
|
||||||
|
{
|
||||||
|
Vector<String> trace;
|
||||||
|
// -2 to skip the console.trace() call frame
|
||||||
|
for (ssize_t i = m_call_stack.size() - 2; i >= 0; --i)
|
||||||
|
trace.append(m_call_stack[i].function_name);
|
||||||
|
return trace;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,8 +165,10 @@ public:
|
||||||
Value last_value() const { return m_last_value; }
|
Value last_value() const { return m_last_value; }
|
||||||
|
|
||||||
Console& console() { return m_console; }
|
Console& console() { return m_console; }
|
||||||
|
const Console& console() const { return m_console; }
|
||||||
|
|
||||||
String join_arguments();
|
String join_arguments() const;
|
||||||
|
Vector<String> get_trace() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Interpreter();
|
Interpreter();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue