@@ -872,84 +872,82 @@ static GDExtensionPtrUtilityFunction gdextension_variant_get_ptr_utility_functio
872
872
// string helpers
873
873
874
874
static void gdextension_string_new_with_latin1_chars (GDExtensionUninitializedStringPtr r_dest, const char *p_contents) {
875
- memnew_placement (r_dest, String (p_contents));
875
+ String *dest = memnew_placement (r_dest, String);
876
+ dest->parse_latin1 (Span<char >(p_contents, p_contents ? strlen (p_contents) : 0 ));
876
877
}
877
878
878
879
static void gdextension_string_new_with_utf8_chars (GDExtensionUninitializedStringPtr r_dest, const char *p_contents) {
879
- memnew_placement (r_dest, String);
880
- String *dest = reinterpret_cast <String *>(r_dest);
880
+ String *dest = memnew_placement (r_dest, String);
881
881
dest->parse_utf8 (p_contents);
882
882
}
883
883
884
884
static void gdextension_string_new_with_utf16_chars (GDExtensionUninitializedStringPtr r_dest, const char16_t *p_contents) {
885
- memnew_placement (r_dest, String);
886
- String *dest = reinterpret_cast <String *>(r_dest);
885
+ String *dest = memnew_placement (r_dest, String);
887
886
dest->parse_utf16 (p_contents);
888
887
}
889
888
890
889
static void gdextension_string_new_with_utf32_chars (GDExtensionUninitializedStringPtr r_dest, const char32_t *p_contents) {
891
- memnew_placement (r_dest, String ((const char32_t *)p_contents));
890
+ String *dest = memnew_placement (r_dest, String);
891
+ dest->parse_utf32 (Span (p_contents, p_contents ? strlen (p_contents) : 0 ));
892
892
}
893
893
894
894
static void gdextension_string_new_with_wide_chars (GDExtensionUninitializedStringPtr r_dest, const wchar_t *p_contents) {
895
895
if constexpr (sizeof (wchar_t ) == 2 ) {
896
- // wchar_t is 16 bit, parse.
897
- memnew_placement (r_dest, String);
898
- String *dest = reinterpret_cast <String *>(r_dest);
896
+ // wchar_t is 16 bit (UTF-16).
897
+ String *dest = memnew_placement (r_dest, String);
899
898
dest->parse_utf16 ((const char16_t *)p_contents);
900
899
} else {
901
- // wchar_t is 32 bit, copy.
902
- memnew_placement (r_dest, String ((const char32_t *)p_contents));
900
+ // wchar_t is 32 bit (UTF-32).
901
+ String *string = memnew_placement (r_dest, String);
902
+ string->parse_utf32 (Span ((const char32_t *)p_contents, p_contents ? strlen (p_contents) : 0 ));
903
903
}
904
904
}
905
905
906
906
static void gdextension_string_new_with_latin1_chars_and_len (GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GDExtensionInt p_size) {
907
- memnew_placement (r_dest, String (p_contents, p_size));
907
+ String *dest = memnew_placement (r_dest, String);
908
+ dest->parse_latin1 (Span (p_contents, p_contents ? _strlen_clipped (p_contents, p_size) : 0 ));
908
909
}
909
910
910
911
static void gdextension_string_new_with_utf8_chars_and_len (GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GDExtensionInt p_size) {
911
- memnew_placement (r_dest, String);
912
- String *dest = reinterpret_cast <String *>(r_dest);
912
+ String *dest = memnew_placement (r_dest, String);
913
913
dest->parse_utf8 (p_contents, p_size);
914
914
}
915
915
916
916
static GDExtensionInt gdextension_string_new_with_utf8_chars_and_len2 (GDExtensionUninitializedStringPtr r_dest, const char *p_contents, GDExtensionInt p_size) {
917
- memnew_placement (r_dest, String);
918
- String *dest = reinterpret_cast <String *>(r_dest);
917
+ String *dest = memnew_placement (r_dest, String);
919
918
return (GDExtensionInt)dest->parse_utf8 (p_contents, p_size);
920
919
}
921
920
922
921
static void gdextension_string_new_with_utf16_chars_and_len (GDExtensionUninitializedStringPtr r_dest, const char16_t *p_contents, GDExtensionInt p_char_count) {
923
- memnew_placement (r_dest, String);
924
- String *dest = reinterpret_cast <String *>(r_dest);
922
+ String *dest = memnew_placement (r_dest, String);
925
923
dest->parse_utf16 (p_contents, p_char_count);
926
924
}
927
925
928
926
static GDExtensionInt gdextension_string_new_with_utf16_chars_and_len2 (GDExtensionUninitializedStringPtr r_dest, const char16_t *p_contents, GDExtensionInt p_char_count, GDExtensionBool p_default_little_endian) {
929
- memnew_placement (r_dest, String);
930
- String *dest = reinterpret_cast <String *>(r_dest);
927
+ String *dest = memnew_placement (r_dest, String);
931
928
return (GDExtensionInt)dest->parse_utf16 (p_contents, p_char_count, p_default_little_endian);
932
929
}
933
930
934
931
static void gdextension_string_new_with_utf32_chars_and_len (GDExtensionUninitializedStringPtr r_dest, const char32_t *p_contents, GDExtensionInt p_char_count) {
935
- memnew_placement (r_dest, String ((const char32_t *)p_contents, p_char_count));
932
+ String *string = memnew_placement (r_dest, String);
933
+ string->parse_utf32 (Span (p_contents, p_contents ? _strlen_clipped (p_contents, p_char_count) : 0 ));
936
934
}
937
935
938
936
static void gdextension_string_new_with_wide_chars_and_len (GDExtensionUninitializedStringPtr r_dest, const wchar_t *p_contents, GDExtensionInt p_char_count) {
939
937
if constexpr (sizeof (wchar_t ) == 2 ) {
940
- // wchar_t is 16 bit, parse.
941
- memnew_placement (r_dest, String);
942
- String *dest = reinterpret_cast <String *>(r_dest);
938
+ // wchar_t is 16 bit (UTF-16).
939
+ String *dest = memnew_placement (r_dest, String);
943
940
dest->parse_utf16 ((const char16_t *)p_contents, p_char_count);
944
941
} else {
945
- // wchar_t is 32 bit, copy.
946
- memnew_placement (r_dest, String ((const char32_t *)p_contents, p_char_count));
942
+ // wchar_t is 32 bit (UTF-32).
943
+ String *string = memnew_placement (r_dest, String);
944
+ string->parse_utf32 (Span ((const char32_t *)p_contents, p_contents ? _strlen_clipped ((const char32_t *)p_contents, p_char_count) : 0 ));
947
945
}
948
946
}
949
947
950
948
static GDExtensionInt gdextension_string_to_latin1_chars (GDExtensionConstStringPtr p_self, char *r_text, GDExtensionInt p_max_write_length) {
951
949
String *self = (String *)p_self;
952
- CharString cs = self->ascii ( true );
950
+ CharString cs = self->latin1 ( );
953
951
GDExtensionInt len = cs.length ();
954
952
if (r_text) {
955
953
const char *s_text = cs.ptr ();
0 commit comments