瀏覽代碼

LibWeb: Support passing more parameter types to HTML::report_exception()

We now allow any JS::ThrowCompletion<T>, as well as JS::Completion
directly (although we'll VERIFY() that it's a throw completion.)
Andreas Kling 3 年之前
父節點
當前提交
4db5406d62

+ 4 - 3
Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.cpp

@@ -12,12 +12,13 @@
 namespace Web::HTML {
 namespace Web::HTML {
 
 
 // https://html.spec.whatwg.org/#report-the-exception
 // https://html.spec.whatwg.org/#report-the-exception
-void report_exception(JS::ThrowCompletionOr<JS::Value> const& result)
+void report_exception(JS::Completion const& throw_completion)
 {
 {
     // FIXME: This is just old code, and does not strictly follow the spec of report an exception.
     // FIXME: This is just old code, and does not strictly follow the spec of report an exception.
     // FIXME: We should probably also report these exceptions to the JS console.
     // FIXME: We should probably also report these exceptions to the JS console.
-    VERIFY(result.throw_completion().value().has_value());
-    auto thrown_value = *result.throw_completion().value();
+    VERIFY(throw_completion.type() == JS::Completion::Type::Throw);
+    VERIFY(throw_completion.value().has_value());
+    auto thrown_value = *throw_completion.value();
     if (thrown_value.is_object()) {
     if (thrown_value.is_object()) {
         auto& object = thrown_value.as_object();
         auto& object = thrown_value.as_object();
         auto& vm = object.vm();
         auto& vm = object.vm();

+ 8 - 1
Userland/Libraries/LibWeb/HTML/Scripting/ExceptionReporter.h

@@ -10,6 +10,13 @@
 
 
 namespace Web::HTML {
 namespace Web::HTML {
 
 
-void report_exception(JS::ThrowCompletionOr<JS::Value> const& value);
+void report_exception(JS::Completion const&);
+
+template<typename T>
+inline void report_exception(JS::ThrowCompletionOr<T> const& result)
+{
+    VERIFY(result.is_throw_completion());
+    report_exception(result.throw_completion());
+}
 
 
 }
 }