Browse Source

LibJS: Convert to_u16() to ThrowCompletionOr

Idan Horowitz 3 years ago
parent
commit
7bbb92dfe9

+ 1 - 3
Meta/Lagom/Tools/CodeGenerators/LibWeb/WrapperGenerator.cpp

@@ -1121,9 +1121,7 @@ static void generate_to_cpp(SourceGenerator& generator, ParameterType& parameter
 )~~~");
     } else if (parameter.type->name == "unsigned short") {
         scoped_generator.append(R"~~~(
-    auto @cpp_name@ = @js_name@@js_suffix@.to_u16(global_object);
-    if (vm.exception())
-        @return_statement@
+    auto @cpp_name@ = TRY_OR_DISCARD(@js_name@@js_suffix@.to_u16(global_object));
 )~~~");
     } else if (parameter.type->name == "long") {
         scoped_generator.append(R"~~~(

+ 1 - 1
Userland/Libraries/LibJS/Runtime/ArrayBuffer.h

@@ -178,7 +178,7 @@ static ByteBuffer numeric_to_raw_bytes(GlobalObject& global_object, Value value,
             if constexpr (sizeof(UnderlyingBufferDataType) == 4)
                 int_value = MUST(value.to_u32(global_object));
             else if constexpr (sizeof(UnderlyingBufferDataType) == 2)
-                int_value = value.to_u16(global_object);
+                int_value = MUST(value.to_u16(global_object));
             else if constexpr (!IsSame<T, ClampedU8>)
                 int_value = value.to_u8(global_object);
             else

+ 2 - 6
Userland/Libraries/LibJS/Runtime/StringConstructor.cpp

@@ -105,12 +105,8 @@ JS_DEFINE_NATIVE_FUNCTION(StringConstructor::from_char_code)
     Vector<u16, 1> string;
     string.ensure_capacity(vm.argument_count());
 
-    for (size_t i = 0; i < vm.argument_count(); ++i) {
-        auto code_unit = vm.argument(i).to_u16(global_object);
-        if (vm.exception())
-            return {};
-        string.append(code_unit);
-    }
+    for (size_t i = 0; i < vm.argument_count(); ++i)
+        string.append(TRY_OR_DISCARD(vm.argument(i).to_u16(global_object)));
 
     return js_string(vm, Utf16String(move(string)));
 }

+ 2 - 2
Userland/Libraries/LibJS/Runtime/Value.cpp

@@ -624,9 +624,9 @@ ThrowCompletionOr<i16> Value::to_i16(GlobalObject& global_object) const
 }
 
 // 7.1.9 ToUint16 ( argument ), https://tc39.es/ecma262/#sec-touint16
-u16 Value::to_u16(GlobalObject& global_object) const
+ThrowCompletionOr<u16> Value::to_u16(GlobalObject& global_object) const
 {
-    double value = TRY_OR_DISCARD(to_number(global_object)).as_double();
+    double value = TRY(to_number(global_object)).as_double();
     if (!isfinite(value) || value == 0)
         return 0;
     auto int_val = floor(fabs(value));

+ 1 - 1
Userland/Libraries/LibJS/Runtime/Value.h

@@ -318,7 +318,7 @@ public:
     ThrowCompletionOr<i32> to_i32(GlobalObject& global_object) const;
     ThrowCompletionOr<u32> to_u32(GlobalObject&) const;
     ThrowCompletionOr<i16> to_i16(GlobalObject&) const;
-    u16 to_u16(GlobalObject&) const;
+    ThrowCompletionOr<u16> to_u16(GlobalObject&) const;
     i8 to_i8(GlobalObject&) const;
     u8 to_u8(GlobalObject&) const;
     u8 to_u8_clamp(GlobalObject&) const;