diff --git a/runtime/src/main/cpp/Natives.cpp b/runtime/src/main/cpp/Natives.cpp index 3641451cd65..b28137369a2 100644 --- a/runtime/src/main/cpp/Natives.cpp +++ b/runtime/src/main/cpp/Natives.cpp @@ -22,11 +22,6 @@ KInt Kotlin_Any_hashCode(KConstRef thiz) { return reinterpret_cast(thiz); } -OBJ_GETTER(Kotlin_Any_toString, KConstRef thiz) { - // TODO: make it more sensible, such as address and type info. - return nullptr; -} - // io/Console.kt void Kotlin_io_Console_print(KString message) { RuntimeAssert(message->type_info() == theStringTypeInfo, "Must use a string"); @@ -61,8 +56,8 @@ OBJ_GETTER0(Kotlin_io_Console_readLine) { // String.kt KInt Kotlin_String_compareTo(KString thiz, KString other) { return memcmp(ByteArrayAddressOfElementAt(thiz, 0), - ByteArrayAddressOfElementAt(other, 0), - thiz->count_ < other->count_ ? thiz->count_ : other->count_); + ByteArrayAddressOfElementAt(other, 0), + thiz->count_ < other->count_ ? thiz->count_ : other->count_); } KChar Kotlin_String_get(KString thiz, KInt index) { @@ -112,7 +107,7 @@ OBJ_GETTER(Kotlin_String_fromCharArray, KConstRef thiz, KInt start, KInt size) { ArrayHeader* result = ArrayContainer(theStringTypeInfo, size).GetPlace(); for (KInt index = 0; index < size; ++index) { *ByteArrayAddressOfElementAt(result, index) = - *PrimitiveArrayAddressOfElementAt(array, start + index); + *PrimitiveArrayAddressOfElementAt(array, start + index); } RETURN_OBJ(result->obj()); } @@ -123,7 +118,7 @@ OBJ_GETTER(Kotlin_String_toCharArray, KString string) { theCharArrayTypeInfo, string->count_).GetPlace(); for (int index = 0; index < string->count_; ++index) { *PrimitiveArrayAddressOfElementAt(result, index) = - *ByteArrayAddressOfElementAt(string, index); + *ByteArrayAddressOfElementAt(string, index); } RETURN_OBJ(result->obj()); } @@ -156,8 +151,8 @@ KBoolean Kotlin_String_equals(KString thiz, KConstRef other) { if (thiz == otherString) return true; return thiz->count_ == otherString->count_ && memcmp(ByteArrayAddressOfElementAt(thiz, 0), - ByteArrayAddressOfElementAt(otherString, 0), - thiz->count_) == 0; + ByteArrayAddressOfElementAt(otherString, 0), + thiz->count_) == 0; } KInt Kotlin_String_hashCode(KString thiz) { @@ -178,8 +173,8 @@ OBJ_GETTER(Kotlin_String_subSequence, KString thiz, KInt startIndex, KInt endInd KInt length = endIndex - startIndex; ArrayHeader* result = ArrayContainer(theStringTypeInfo, length).GetPlace(); memcpy(ByteArrayAddressOfElementAt(result, 0), - ByteArrayAddressOfElementAt(thiz, startIndex), - length); + ByteArrayAddressOfElementAt(thiz, startIndex), + length); RETURN_OBJ(result->obj()); } diff --git a/runtime/src/main/cpp/ToString.cpp b/runtime/src/main/cpp/ToString.cpp index 89979d1cd4c..313e02bfc47 100644 --- a/runtime/src/main/cpp/ToString.cpp +++ b/runtime/src/main/cpp/ToString.cpp @@ -24,6 +24,14 @@ OBJ_GETTER(makeString, const char* cstring) { extern "C" { +OBJ_GETTER(Kotlin_Any_toString, KConstRef thiz) { + char cstring[80]; + snprintf(cstring, sizeof(cstring), "%s %p type %p", + IsArray(thiz) ? "array" : "object", + thiz, thiz->type_info_); + RETURN_RESULT_OF(makeString, cstring); +} + OBJ_GETTER(Kotlin_Byte_toString, KByte value) { char cstring[8]; snprintf(cstring, sizeof(cstring), "%d", value);