1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-06-01 12:08:14 +00:00

WebContent: Add $_ variable to browser console

This holds the return value of the expression that was last entered into
the browser console. If that last expression returned an error of some
kind, `$_` will be `undefined`. This matches the behaviour in Firefox.
This commit is contained in:
Sam Atkins 2022-10-03 14:41:41 +01:00 committed by Linus Groh
parent 3ec13fdb86
commit c793beb0cc
3 changed files with 15 additions and 1 deletions

View file

@ -22,6 +22,7 @@ void ConsoleGlobalObject::initialize(JS::Realm& realm)
Base::initialize(realm);
define_native_accessor(realm, "$0", $0_getter, nullptr, 0);
define_native_accessor(realm, "$_", $__getter, nullptr, 0);
}
void ConsoleGlobalObject::visit_edges(Visitor& visitor)
@ -110,4 +111,10 @@ JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::$0_getter)
return inspected_node;
}
JS_DEFINE_NATIVE_FUNCTION(ConsoleGlobalObject::$__getter)
{
auto* console_global_object = TRY(get_console(vm));
return console_global_object->m_most_recent_result;
}
}

View file

@ -33,13 +33,18 @@ public:
virtual JS::ThrowCompletionOr<bool> internal_delete(JS::PropertyKey const& name) override;
virtual JS::ThrowCompletionOr<JS::MarkedVector<JS::Value>> internal_own_property_keys() const override;
void set_most_recent_result(JS::Value result) { m_most_recent_result = move(result); }
private:
virtual void visit_edges(Visitor&) override;
// $0, the DOM node currently selected in the inspector
JS_DECLARE_NATIVE_FUNCTION($0_getter);
// $_, the value of the most recent expression entered into the console
JS_DECLARE_NATIVE_FUNCTION($__getter);
Web::HTML::Window* m_window_object;
JS::Value m_most_recent_result { JS::js_undefined() };
};
}

View file

@ -77,8 +77,10 @@ void WebContentConsoleClient::handle_input(String const& js_source)
auto result = script->run();
if (result.value().has_value())
if (result.value().has_value()) {
m_console_global_object->set_most_recent_result(result.value().value());
print_html(JS::MarkupGenerator::html_from_value(*result.value()));
}
}
void WebContentConsoleClient::report_exception(JS::Error const& exception, bool in_promise)