mirror of
https://github.com/SerenityOS/serenity.git
synced 2025-01-23 09:51:57 -05: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();
|
||||
}
|
||||
|
||||
// 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)
|
||||
{
|
||||
return vm.argument_count() > 0
|
||||
|
|
|
@ -73,6 +73,7 @@ public:
|
|||
ThrowCompletionOr<Value> log();
|
||||
ThrowCompletionOr<Value> trace();
|
||||
ThrowCompletionOr<Value> warn();
|
||||
ThrowCompletionOr<Value> dir();
|
||||
ThrowCompletionOr<Value> count();
|
||||
ThrowCompletionOr<Value> count_reset();
|
||||
ThrowCompletionOr<Value> group();
|
||||
|
|
|
@ -151,6 +151,7 @@ namespace JS {
|
|||
P(deref) \
|
||||
P(description) \
|
||||
P(difference) \
|
||||
P(dir) \
|
||||
P(direction) \
|
||||
P(disambiguation) \
|
||||
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.trace, trace, 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.countReset, count_reset, 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();
|
||||
}
|
||||
|
||||
// 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
|
||||
JS_DEFINE_NATIVE_FUNCTION(ConsoleObject::count)
|
||||
{
|
||||
|
|
|
@ -30,6 +30,7 @@ private:
|
|||
JS_DECLARE_NATIVE_FUNCTION(log);
|
||||
JS_DECLARE_NATIVE_FUNCTION(trace);
|
||||
JS_DECLARE_NATIVE_FUNCTION(warn);
|
||||
JS_DECLARE_NATIVE_FUNCTION(dir);
|
||||
JS_DECLARE_NATIVE_FUNCTION(count);
|
||||
JS_DECLARE_NATIVE_FUNCTION(count_reset);
|
||||
JS_DECLARE_NATIVE_FUNCTION(group);
|
||||
|
|
Loading…
Add table
Reference in a new issue