7
7
8
8
#include < AK/Checked.h>
9
9
#include < AK/Function.h>
10
- #include < AK/StringBuilder.h>
11
10
#include < AK/Utf16View.h>
12
11
#include < LibJS/Heap/Heap.h>
13
12
#include < LibJS/Runtime/AbstractOperations.h>
24
23
#include < LibJS/Runtime/StringIterator.h>
25
24
#include < LibJS/Runtime/StringObject.h>
26
25
#include < LibJS/Runtime/StringPrototype.h>
26
+ #include < LibJS/Runtime/ThrowableStringBuilder.h>
27
27
#include < LibJS/Runtime/Utf16String.h>
28
28
#include < LibJS/Runtime/Value.h>
29
29
#include < LibLocale/Locale.h>
@@ -528,11 +528,11 @@ static ThrowCompletionOr<Value> pad_string(VM& vm, Utf16String string, PadPlacem
528
528
auto fill_code_units = fill_string.length_in_code_units ();
529
529
auto fill_length = max_length - string_length;
530
530
531
- StringBuilder filler_builder;
531
+ ThrowableStringBuilder filler_builder (vm) ;
532
532
for (size_t i = 0 ; i < fill_length / fill_code_units; ++i)
533
- filler_builder.append (fill_string.view ());
533
+ TRY ( filler_builder.append (fill_string.view () ));
534
534
535
- filler_builder.append (fill_string.substring_view (0 , fill_length % fill_code_units));
535
+ TRY ( filler_builder.append (fill_string.substring_view (0 , fill_length % fill_code_units) ));
536
536
auto filler = filler_builder.build ();
537
537
538
538
auto formatted = placement == PadPlacement::Start
@@ -575,9 +575,9 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::repeat)
575
575
if (string.is_empty ())
576
576
return PrimitiveString::create (vm, DeprecatedString::empty ());
577
577
578
- StringBuilder builder;
578
+ ThrowableStringBuilder builder (vm) ;
579
579
for (size_t i = 0 ; i < n; ++i)
580
- builder.append (string);
580
+ TRY ( builder.append (string) );
581
581
return PrimitiveString::create (vm, builder.to_deprecated_string ());
582
582
}
583
583
@@ -615,10 +615,10 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::replace)
615
615
replacement = TRY (get_substitution (vm, search_string.view (), string.view (), *position, {}, js_undefined (), replace_value));
616
616
}
617
617
618
- StringBuilder builder;
619
- builder.append (preserved);
620
- builder.append (replacement);
621
- builder.append (string.substring_view (*position + search_string.length_in_code_units ()));
618
+ ThrowableStringBuilder builder (vm) ;
619
+ TRY ( builder.append (preserved) );
620
+ TRY ( builder.append (replacement) );
621
+ TRY ( builder.append (string.substring_view (*position + search_string.length_in_code_units () )));
622
622
623
623
return PrimitiveString::create (vm, builder.build ());
624
624
}
@@ -667,7 +667,7 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::replace_all)
667
667
}
668
668
669
669
size_t end_of_last_match = 0 ;
670
- StringBuilder result;
670
+ ThrowableStringBuilder result (vm) ;
671
671
672
672
for (auto position : match_positions) {
673
673
auto preserved = string.substring_view (end_of_last_match, position - end_of_last_match);
@@ -680,14 +680,14 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::replace_all)
680
680
replacement = TRY (get_substitution (vm, search_string.view (), string.view (), position, {}, js_undefined (), replace_value));
681
681
}
682
682
683
- result.append (preserved);
684
- result.append (replacement);
683
+ TRY ( result.append (preserved) );
684
+ TRY ( result.append (replacement) );
685
685
686
686
end_of_last_match = position + search_length;
687
687
}
688
688
689
689
if (end_of_last_match < string_length)
690
- result.append (string.substring_view (end_of_last_match));
690
+ TRY ( result.append (string.substring_view (end_of_last_match) ));
691
691
692
692
return PrimitiveString::create (vm, result.build ());
693
693
}
@@ -995,7 +995,7 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::to_well_formed)
995
995
size_t k = 0 ;
996
996
997
997
// 5. Let result be the empty String.
998
- StringBuilder result;
998
+ ThrowableStringBuilder result (vm) ;
999
999
1000
1000
// 6. Repeat, while k < strLen,
1001
1001
while (k < length) {
@@ -1005,12 +1005,12 @@ JS_DEFINE_NATIVE_FUNCTION(StringPrototype::to_well_formed)
1005
1005
// b. If cp.[[IsUnpairedSurrogate]] is true, then
1006
1006
if (code_point.is_unpaired_surrogate ) {
1007
1007
// i. Set result to the string-concatenation of result and 0xFFFD (REPLACEMENT CHARACTER).
1008
- result.append_code_point (0xfffd );
1008
+ TRY ( result.append_code_point (0xfffd ) );
1009
1009
}
1010
1010
// c. Else,
1011
1011
else {
1012
1012
// i. Set result to the string-concatenation of result and UTF16EncodeCodePoint(cp.[[CodePoint]]).
1013
- result.append_code_point (code_point.code_point );
1013
+ TRY ( result.append_code_point (code_point.code_point ) );
1014
1014
}
1015
1015
1016
1016
// d. Set k to k + cp.[[CodeUnitCount]].
@@ -1119,22 +1119,22 @@ static ThrowCompletionOr<Value> create_html(VM& vm, Value string, DeprecatedStri
1119
1119
{
1120
1120
TRY (require_object_coercible (vm, string));
1121
1121
auto str = TRY (string.to_string (vm));
1122
- StringBuilder builder;
1123
- builder.append (' <' );
1124
- builder.append (tag);
1122
+ ThrowableStringBuilder builder (vm) ;
1123
+ TRY ( builder.append (' <' ) );
1124
+ TRY ( builder.append (tag) );
1125
1125
if (!attribute.is_empty ()) {
1126
1126
auto value_string = TRY (value.to_string (vm));
1127
- builder.append (' ' );
1128
- builder.append (attribute);
1129
- builder.append (" =\" " sv);
1130
- builder.append (value_string.replace (" \" " sv, " "" sv, ReplaceMode::All));
1131
- builder.append (' "' );
1127
+ TRY ( builder.append (' ' ) );
1128
+ TRY ( builder.append (attribute) );
1129
+ TRY ( builder.append (" =\" " sv) );
1130
+ TRY ( builder.append (value_string.replace (" \" " sv, " "" sv, ReplaceMode::All) ));
1131
+ TRY ( builder.append (' "' ) );
1132
1132
}
1133
- builder.append (' >' );
1134
- builder.append (str);
1135
- builder.append (" </" sv);
1136
- builder.append (tag);
1137
- builder.append (' >' );
1133
+ TRY ( builder.append (' >' ) );
1134
+ TRY ( builder.append (str) );
1135
+ TRY ( builder.append (" </" sv) );
1136
+ TRY ( builder.append (tag) );
1137
+ TRY ( builder.append (' >' ) );
1138
1138
return PrimitiveString::create (vm, builder.build ());
1139
1139
}
1140
1140
0 commit comments