Fix KT-26478: Objective-C-objects-class-name-is-null-in-ClassCastExceptions-message

#KT-26478 Fixed

Merge-request: KT-MR-6405
Merged-by: Vladimir Sukharev <Vladimir.Sukharev@jetbrains.com>
This commit is contained in:
Vladimir Sukharev
2022-06-09 12:57:11 +00:00
committed by Space
parent a31d383b4d
commit 83d7524232
7 changed files with 144 additions and 5 deletions
@@ -134,6 +134,24 @@ void DisposeCString(char* cstring) {
if (cstring) std_support::free(cstring);
}
ObjHeader* CreatePermanentStringFromCString(const char* nullTerminatedUTF8) {
const char* end = nullTerminatedUTF8 + strlen(nullTerminatedUTF8);
size_t count = utf8::with_replacement::utf16_length(nullTerminatedUTF8, end);
size_t headerSize = alignUp(sizeof(ArrayHeader), alignof(char16_t));
size_t arraySize = headerSize + count * sizeof(char16_t);
ArrayHeader* header = (ArrayHeader*)std_support::calloc(arraySize, 1);
header->obj()->typeInfoOrMeta_ = setPointerBits((TypeInfo *)theStringTypeInfo, OBJECT_TAG_PERMANENT_CONTAINER);
header->count_ = count;
utf8::with_replacement::utf8to16(nullTerminatedUTF8, end, CharArrayAddressOfElementAt(header, 0));
return header->obj();
}
void FreePermanentStringForTests(ArrayHeader* header) {
std_support::free(header);
}
// String.kt
OBJ_GETTER(Kotlin_String_replace, KString thiz, KChar oldChar, KChar newChar) {
auto count = thiz->count_;