mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 22:17:45 +00:00
LibJS: Begin implementing console.dir
The intent of the spec is that the output of console.dir is interactable within the console. Our Printer implementation currently just prints the provided object as a string, and doesn't check the provided `options` argument. But having console.dir defined prevents exceptions from being thrown on real websites.
This commit is contained in:
parent
9f8e5f0b1c
commit
396655d145
5 changed files with 31 additions and 0 deletions
|
@ -168,6 +168,26 @@ ThrowCompletionOr<Value> Console::warn()
|
||||||
return js_undefined();
|
return js_undefined();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1.1.10. dir(item, options), https://console.spec.whatwg.org/#dir
|
||||||
|
ThrowCompletionOr<Value> Console::dir()
|
||||||
|
{
|
||||||
|
auto& vm = realm().vm();
|
||||||
|
|
||||||
|
// 1. Let object be item with generic JavaScript object formatting applied.
|
||||||
|
// NOTE: Generic formatting is performed by ConsoleClient::printer().
|
||||||
|
auto object = vm.argument(0);
|
||||||
|
|
||||||
|
// 2. Perform Printer("dir", « object », options).
|
||||||
|
if (m_client) {
|
||||||
|
MarkedVector<Value> printer_arguments { vm.heap() };
|
||||||
|
TRY_OR_THROW_OOM(vm, printer_arguments.try_append(object));
|
||||||
|
|
||||||
|
return m_client->printer(LogLevel::Dir, move(printer_arguments));
|
||||||
|
}
|
||||||
|
|
||||||
|
return js_undefined();
|
||||||
|
}
|
||||||
|
|
||||||
static ThrowCompletionOr<String> label_or_fallback(VM& vm, StringView fallback)
|
static ThrowCompletionOr<String> label_or_fallback(VM& vm, StringView fallback)
|
||||||
{
|
{
|
||||||
return vm.argument_count() > 0
|
return vm.argument_count() > 0
|
||||||
|
|
|
@ -73,6 +73,7 @@ public:
|
||||||
ThrowCompletionOr<Value> log();
|
ThrowCompletionOr<Value> log();
|
||||||
ThrowCompletionOr<Value> trace();
|
ThrowCompletionOr<Value> trace();
|
||||||
ThrowCompletionOr<Value> warn();
|
ThrowCompletionOr<Value> warn();
|
||||||
|
ThrowCompletionOr<Value> dir();
|
||||||
ThrowCompletionOr<Value> count();
|
ThrowCompletionOr<Value> count();
|
||||||
ThrowCompletionOr<Value> count_reset();
|
ThrowCompletionOr<Value> count_reset();
|
||||||
ThrowCompletionOr<Value> group();
|
ThrowCompletionOr<Value> group();
|
||||||
|
|
|
@ -151,6 +151,7 @@ namespace JS {
|
||||||
P(deref) \
|
P(deref) \
|
||||||
P(description) \
|
P(description) \
|
||||||
P(difference) \
|
P(difference) \
|
||||||
|
P(dir) \
|
||||||
P(direction) \
|
P(direction) \
|
||||||
P(disambiguation) \
|
P(disambiguation) \
|
||||||
P(disposed) \
|
P(disposed) \
|
||||||
|
|
|
@ -31,6 +31,7 @@ ThrowCompletionOr<void> ConsoleObject::initialize(Realm& realm)
|
||||||
define_native_function(realm, vm.names.log, log, 0, attr);
|
define_native_function(realm, vm.names.log, log, 0, attr);
|
||||||
define_native_function(realm, vm.names.trace, trace, 0, attr);
|
define_native_function(realm, vm.names.trace, trace, 0, attr);
|
||||||
define_native_function(realm, vm.names.warn, warn, 0, attr);
|
define_native_function(realm, vm.names.warn, warn, 0, attr);
|
||||||
|
define_native_function(realm, vm.names.dir, dir, 0, attr);
|
||||||
define_native_function(realm, vm.names.count, count, 0, attr);
|
define_native_function(realm, vm.names.count, count, 0, attr);
|
||||||
define_native_function(realm, vm.names.countReset, count_reset, 0, attr);
|
define_native_function(realm, vm.names.countReset, count_reset, 0, attr);
|
||||||
define_native_function(realm, vm.names.group, group, 0, attr);
|
define_native_function(realm, vm.names.group, group, 0, attr);
|
||||||
|
@ -99,6 +100,13 @@ JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::warn)
|
||||||
return console_object.console().warn();
|
return console_object.console().warn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 1.1.10. dir(item, options), https://console.spec.whatwg.org/#warn
|
||||||
|
JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::dir)
|
||||||
|
{
|
||||||
|
auto& console_object = *vm.current_realm()->intrinsics().console_object();
|
||||||
|
return console_object.console().dir();
|
||||||
|
}
|
||||||
|
|
||||||
// 1.2.1. count(label), https://console.spec.whatwg.org/#count
|
// 1.2.1. count(label), https://console.spec.whatwg.org/#count
|
||||||
JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count)
|
JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,6 +30,7 @@ private:
|
||||||
JS_DECLARE_NATIVE_FUNCTION(log);
|
JS_DECLARE_NATIVE_FUNCTION(log);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(trace);
|
JS_DECLARE_NATIVE_FUNCTION(trace);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(warn);
|
JS_DECLARE_NATIVE_FUNCTION(warn);
|
||||||
|
JS_DECLARE_NATIVE_FUNCTION(dir);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(count);
|
JS_DECLARE_NATIVE_FUNCTION(count);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(count_reset);
|
JS_DECLARE_NATIVE_FUNCTION(count_reset);
|
||||||
JS_DECLARE_NATIVE_FUNCTION(group);
|
JS_DECLARE_NATIVE_FUNCTION(group);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue