mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-21 03:55:24 +00:00
LibJS: Simplify various StringPrototype functions
This commit is contained in:
parent
73eef31f49
commit
71ec72bddf
Notes:
sideshowbarker
2024-07-19 06:33:47 +09:00
1 changed files with 31 additions and 62 deletions
|
@ -113,9 +113,9 @@ Value StringPrototype::repeat(Interpreter& interpreter)
|
|||
return interpreter.throw_exception<RangeError>("repeat count must be a positive number");
|
||||
if (count_value.is_infinity())
|
||||
return interpreter.throw_exception<RangeError>("repeat count must be a finite number");
|
||||
auto count = count_value.to_i32();
|
||||
auto count = count_value.to_size_t();
|
||||
StringBuilder builder;
|
||||
for (i32 i = 0; i < count; ++i)
|
||||
for (size_t i = 0; i < count; ++i)
|
||||
builder.append(string);
|
||||
return js_string(interpreter, builder.to_string());
|
||||
}
|
||||
|
@ -130,15 +130,14 @@ Value StringPrototype::starts_with(Interpreter& interpreter)
|
|||
auto search_string = interpreter.argument(0).to_string(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
auto search_string_length = static_cast<i32>(search_string.length());
|
||||
i32 position = 0;
|
||||
auto string_length = string.length();
|
||||
auto search_string_length = search_string.length();
|
||||
size_t start = 0;
|
||||
if (interpreter.argument_count() > 1) {
|
||||
auto number = interpreter.argument(1).to_number();
|
||||
if (!number.is_nan())
|
||||
position = number.to_i32();
|
||||
start = min(number.to_size_t(), string_length);
|
||||
}
|
||||
auto string_length = static_cast<i32>(string.length());
|
||||
auto start = min(max(position, 0), string_length);
|
||||
if (start + search_string_length > string_length)
|
||||
return Value(false);
|
||||
if (search_string_length == 0)
|
||||
|
@ -151,10 +150,7 @@ Value StringPrototype::index_of(Interpreter& interpreter)
|
|||
auto string = string_from(interpreter);
|
||||
if (string.is_null())
|
||||
return {};
|
||||
Value needle_value = js_undefined();
|
||||
if (interpreter.argument_count() >= 1)
|
||||
needle_value = interpreter.argument(0);
|
||||
auto needle = needle_value.to_string(interpreter);
|
||||
auto needle = interpreter.argument(0).to_string(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
return Value((i32)string.index_of(needle).value_or(-1));
|
||||
|
@ -199,11 +195,7 @@ enum class PadPlacement {
|
|||
|
||||
static Value pad_string(Interpreter& interpreter, const String& string, PadPlacement placement)
|
||||
{
|
||||
auto max_length_value = interpreter.argument(0).to_number();
|
||||
if (max_length_value.is_nan() || max_length_value.is_undefined() || max_length_value.as_double() < 0)
|
||||
return js_string(interpreter, string);
|
||||
|
||||
auto max_length = static_cast<size_t>(max_length_value.to_i32());
|
||||
auto max_length = interpreter.argument(0).to_size_t();
|
||||
if (max_length <= string.length())
|
||||
return js_string(interpreter, string);
|
||||
|
||||
|
@ -212,9 +204,9 @@ static Value pad_string(Interpreter& interpreter, const String& string, PadPlace
|
|||
fill_string = interpreter.argument(1).to_string(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
if (fill_string.is_empty())
|
||||
return js_string(interpreter, string);
|
||||
}
|
||||
if (fill_string.is_empty())
|
||||
return js_string(interpreter, string);
|
||||
|
||||
auto fill_length = max_length - string.length();
|
||||
|
||||
|
@ -292,35 +284,22 @@ Value StringPrototype::substring(Interpreter& interpreter)
|
|||
if (interpreter.argument_count() == 0)
|
||||
return js_string(interpreter, string);
|
||||
|
||||
i32 string_length = static_cast<i32>(string.length());
|
||||
i32 index_start = interpreter.argument(0).to_number().to_i32();
|
||||
i32 index_end = string_length;
|
||||
auto string_length = string.length();
|
||||
auto index_start = min(interpreter.argument(0).to_size_t(), string_length);
|
||||
auto index_end = string_length;
|
||||
|
||||
if (index_start > string_length)
|
||||
index_start = string_length;
|
||||
else if (index_start < 0)
|
||||
index_start = 0;
|
||||
|
||||
if (interpreter.argument_count() >= 2) {
|
||||
index_end = interpreter.argument(1).to_number().to_i32();
|
||||
|
||||
if (index_end > string_length)
|
||||
index_end = string_length;
|
||||
else if (index_end < 0)
|
||||
index_end = 0;
|
||||
}
|
||||
if (interpreter.argument_count() >= 2)
|
||||
index_end = min(interpreter.argument(1).to_size_t(), string_length);
|
||||
|
||||
if (index_start == index_end)
|
||||
return js_string(interpreter, String(""));
|
||||
|
||||
if (index_start > index_end) {
|
||||
if (interpreter.argument_count() == 1) {
|
||||
if (interpreter.argument_count() == 1)
|
||||
return js_string(interpreter, String(""));
|
||||
} else {
|
||||
i32 temp_index_start = index_start;
|
||||
index_start = index_end;
|
||||
index_end = temp_index_start;
|
||||
}
|
||||
auto temp_index_start = index_start;
|
||||
index_start = index_end;
|
||||
index_end = temp_index_start;
|
||||
}
|
||||
|
||||
auto part_length = index_end - index_start;
|
||||
|
@ -336,16 +315,12 @@ Value StringPrototype::includes(Interpreter& interpreter)
|
|||
auto search_string = interpreter.argument(0).to_string(interpreter);
|
||||
if (interpreter.exception())
|
||||
return {};
|
||||
i32 position = 0;
|
||||
|
||||
size_t position = 0;
|
||||
if (interpreter.argument_count() >= 2) {
|
||||
position = interpreter.argument(1).to_i32();
|
||||
|
||||
if (position >= static_cast<i32>(string.length()))
|
||||
position = interpreter.argument(1).to_size_t();
|
||||
if (position >= string.length())
|
||||
return Value(false);
|
||||
|
||||
if (position < 0)
|
||||
position = 0;
|
||||
}
|
||||
|
||||
if (position == 0)
|
||||
|
@ -365,9 +340,9 @@ Value StringPrototype::slice(Interpreter& interpreter)
|
|||
if (interpreter.argument_count() == 0)
|
||||
return js_string(interpreter, string);
|
||||
|
||||
i32 string_length = static_cast<i32>(string.length());
|
||||
i32 index_start = interpreter.argument(0).to_i32();
|
||||
i32 index_end = string_length;
|
||||
auto string_length = static_cast<i32>(string.length());
|
||||
auto index_start = interpreter.argument(0).to_i32();
|
||||
auto index_end = string_length;
|
||||
|
||||
auto negative_min_index = -(string_length - 1);
|
||||
if (index_start < negative_min_index)
|
||||
|
@ -410,21 +385,15 @@ Value StringPrototype::last_index_of(Interpreter& interpreter)
|
|||
if (search_string.length() > string.length())
|
||||
return Value(-1);
|
||||
|
||||
ssize_t max_index = string.length() - search_string.length();
|
||||
ssize_t from_index = max_index;
|
||||
if (interpreter.argument_count() >= 2) {
|
||||
from_index = static_cast<ssize_t>(interpreter.argument(1).to_i32());
|
||||
auto max_index = string.length() - search_string.length();
|
||||
auto from_index = max_index;
|
||||
if (interpreter.argument_count() >= 2)
|
||||
from_index = min(interpreter.argument(1).to_size_t(), max_index);
|
||||
|
||||
if (from_index < 0)
|
||||
from_index = 0;
|
||||
if (from_index > max_index)
|
||||
from_index = max_index;
|
||||
}
|
||||
|
||||
for (ssize_t i = from_index; i >= 0; --i) {
|
||||
for (i32 i = from_index; i >= 0; --i) {
|
||||
auto part_view = string.substring_view(i, search_string.length());
|
||||
if (part_view == search_string)
|
||||
return Value((i32)i);
|
||||
return Value(i);
|
||||
}
|
||||
|
||||
return Value(-1);
|
||||
|
|
Loading…
Add table
Reference in a new issue