@@ -320,11 +320,13 @@ void String::append_latin1(const Span<char> &p_cstr) {
320
320
*dst = 0 ;
321
321
}
322
322
323
- void String::append_utf32 (const Span<char32_t > &p_cstr) {
323
+ Error String::append_utf32 (const Span<char32_t > &p_cstr) {
324
324
if (p_cstr.is_empty ()) {
325
- return ;
325
+ return OK ;
326
326
}
327
327
328
+ Error error = OK;
329
+
328
330
const int prev_length = length ();
329
331
resize (prev_length + p_cstr.size () + 1 );
330
332
const char32_t *src = p_cstr.ptr ();
@@ -337,28 +339,27 @@ void String::append_utf32(const Span<char32_t> &p_cstr) {
337
339
if ((chr & 0xfffff800 ) == 0xd800 ) {
338
340
print_unicode_error (vformat (" Unpaired surrogate (%x)" , (uint32_t )chr), true );
339
341
*dst = _replacement_char;
342
+ error = ERR_PARSE_ERROR;
340
343
continue ;
341
344
}
342
345
if (chr > 0x10ffff ) {
343
346
print_unicode_error (vformat (" Invalid unicode codepoint (%x)" , (uint32_t )chr), true );
344
347
*dst = _replacement_char;
348
+ error = ERR_PARSE_ERROR;
345
349
continue ;
346
350
}
347
351
*dst = chr;
348
352
}
349
353
*dst = 0 ;
354
+ return error;
350
355
}
351
356
352
- // assumes the following have already been validated:
353
- // p_char != nullptr
354
- // p_length > 0
355
- // p_length <= p_char strlen
356
- // p_char is a valid UTF32 string
357
- void String::copy_from_unchecked (const char32_t *p_char, const int p_length) {
358
- resize (p_length + 1 ); // + 1 for \0
359
- char32_t *dst = ptrw ();
360
- memcpy (dst, p_char, p_length * sizeof (char32_t ));
361
- *(dst + p_length) = _null;
357
+ void String::append_utf32_unchecked (const Span<char32_t > &p_span) {
358
+ const int prev_length = length ();
359
+ resize (prev_length + p_span.size () + 1 ); // + 1 for \0
360
+ char32_t *dst = ptrw () + prev_length;
361
+ memcpy (dst, p_span.ptr (), p_span.size () * sizeof (char32_t ));
362
+ *(dst + p_span.size ()) = _null;
362
363
}
363
364
364
365
String String::operator +(const String &p_str) const {
@@ -3182,7 +3183,7 @@ String String::substr(int p_from, int p_chars) const {
3182
3183
}
3183
3184
3184
3185
String s;
3185
- s.copy_from_unchecked (& get_data ()[ p_from] , p_chars);
3186
+ s.append_utf32_unchecked ( Span ( ptr () + p_from, p_chars) );
3186
3187
return s;
3187
3188
}
3188
3189
@@ -4254,7 +4255,7 @@ String String::left(int p_len) const {
4254
4255
}
4255
4256
4256
4257
String s;
4257
- s.copy_from_unchecked (& get_data ()[ 0 ] , p_len);
4258
+ s.append_utf32_unchecked ( Span ( ptr () , p_len) );
4258
4259
return s;
4259
4260
}
4260
4261
@@ -4272,7 +4273,7 @@ String String::right(int p_len) const {
4272
4273
}
4273
4274
4274
4275
String s;
4275
- s.copy_from_unchecked (& get_data ()[ length () - p_len] , p_len);
4276
+ s.append_utf32_unchecked ( Span ( ptr () + length () - p_len, p_len) );
4276
4277
return s;
4277
4278
}
4278
4279
0 commit comments