runtime: use @ExportTypeInfo

to import compiler-generated type infos into C++ code
This commit is contained in:
Svyatoslav Scherbina
2016-10-26 18:40:38 +03:00
committed by Nikolay Igotti
parent 991c8ea905
commit cc47ed98f3
5 changed files with 6 additions and 162 deletions
-162
View File
@@ -1,162 +0,0 @@
#include "Natives.h"
#include "Types.h"
namespace {
// Use 'echo -n "kotlin.ByteArray" | shasum -| xargs ~/bin/as_array' to generate hash.
const TypeInfo implAnyTypeInfo = {
// kotlin.Any
{ 0x6a, 0x97, 0xc2, 0x61, 0x64, 0x3a, 0xc6, 0x5e, 0x2a, 0x03,
0xf9, 0xc1, 0x4c, 0x1f, 0x66, 0x9a, 0x44, 0xb2, 0x6b, 0x11 },
0, // instanceSize_
nullptr, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
nullptr, // implementedInterfaces_
0, // implementedInterfacesCount_
nullptr, // vtable_
nullptr, // openMethods_
0, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
const TypeInfo implCloneableTypeInfo = {
// kotlin.Cloneable
{ 0x2d, 0x4b, 0x3d, 0x2f, 0x69, 0x0d, 0x1c, 0xb5, 0x6e, 0xc6,
0x67, 0xa7, 0x24, 0x57, 0x35, 0x98, 0xa4, 0x23, 0x0b, 0xc5 },
0, // instanceSize_
nullptr, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
nullptr, // implementedInterfaces_
0, // implementedInterfacesCount_
nullptr, // vtable_
nullptr, // openMethods_
0, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
void* const implByteArrayTypeInfoVTbl[] = {
reinterpret_cast<void*>(Kotlin_ByteArray_clone)
};
const MethodTableRecord implByteArrayTypeInfoMethods[] = {
// TODO: fill in hash.
{ 0, reinterpret_cast<void*>(Kotlin_ByteArray_clone) }
};
const TypeInfo* implByteArrayTypeInfoIfaces[] = {
&implCloneableTypeInfo
};
const TypeInfo implByteArrayTypeInfo = {
// kotlin.ByteArray
{ 0x9e, 0x23, 0xa6, 0xa6, 0x91, 0x9b, 0x6b, 0x0a, 0x00, 0xc5,
0x35, 0xe8, 0xd9, 0xd1, 0xa3, 0xb6, 0xc5, 0xc6, 0xd7, 0x65 },
-1, // instanceSize_, array of 1 byte elements
&implAnyTypeInfo, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
implByteArrayTypeInfoIfaces, // implementedInterfaces_
1, // implementedInterfacesCount_
implByteArrayTypeInfoVTbl, // vtable_
implByteArrayTypeInfoMethods, // openMethods_
1, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
void* const implCharArrayTypeInfoVTbl[] = {
reinterpret_cast<void*>(Kotlin_CharArray_clone)
};
const MethodTableRecord implCharArrayTypeInfoMethods[] = {
// TODO: fill in hash.
{ 0, reinterpret_cast<void*>(Kotlin_CharArray_clone) }
};
const TypeInfo* implCharArrayTypeInfoIfaces[] = {
&implCloneableTypeInfo
};
const TypeInfo implCharArrayTypeInfo = {
// kotlin.CharArray
{ 0x70, 0x88, 0xd4, 0x20, 0x91, 0x6e, 0x25, 0x80, 0x33, 0x64,
0x5a, 0x8d, 0x56, 0xaf, 0x99, 0x19, 0x14, 0xde, 0x5b, 0x71 },
-2, // instanceSize_, array of 2 byte elements
&implAnyTypeInfo, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
implCharArrayTypeInfoIfaces, // implementedInterfaces_
1, // implementedInterfacesCount_
implCharArrayTypeInfoVTbl, // vtable_
implCharArrayTypeInfoMethods, // openMethods_
1, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
void* const implIntArrayTypeInfoVTbl[] = {
reinterpret_cast<void*>(Kotlin_IntArray_clone)
};
const MethodTableRecord implIntArrayTypeInfoMethods[] = {
// TODO: fill in hash.
{ 0, reinterpret_cast<void*>(Kotlin_IntArray_clone) }
};
const TypeInfo* implIntArrayTypeInfoIfaces[] = {
&implCloneableTypeInfo
};
const TypeInfo implIntArrayTypeInfo = {
// kotlin.IntArray
{ 0xdd, 0x69, 0x38, 0x31, 0x3e, 0x03, 0xc6, 0xfd, 0x88, 0x8f,
0x1c, 0x83, 0x18, 0x06, 0xcc, 0xcb, 0x8d, 0x71, 0xd1, 0x4c },
-4, // instanceSize_, array of 4 byte elements
&implAnyTypeInfo, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
implIntArrayTypeInfoIfaces, // implementedInterfaces_
1, // implementedInterfacesCount_
implIntArrayTypeInfoVTbl, // vtable_
implIntArrayTypeInfoMethods, // openMethods_
1, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
const TypeInfo implStringTypeInfo = {
{ 0x5b, 0xac, 0x68, 0xed, 0x43, 0xd4, 0x81, 0x4a, 0x14, 0x18,
0x10, 0xfa, 0x65, 0x09, 0xb9, 0xef, 0x20, 0x0a, 0xba, 0x78 }, // kotlin.String
-1, // instanceSize_, Strings are treated as array of 1 byte elements
&implAnyTypeInfo, // superType_
nullptr, // objOffsets
0, // objOffsetsCount_
nullptr, // implementedInterfaces_
0, // implementedInterfacesCount_
nullptr, // vtable_
nullptr, // openMethods_
0, // openMethodsCount_
nullptr, // fields_
0 // fieldsCount_
};
} // namespace
#ifdef __cplusplus
extern "C" {
#endif
const TypeInfo* theAnyTypeInfo = &implAnyTypeInfo;
const TypeInfo* theCloneableTypeInfo = &implCloneableTypeInfo;
const TypeInfo* theByteArrayTypeInfo = &implByteArrayTypeInfo;
const TypeInfo* theCharArrayTypeInfo = &implCharArrayTypeInfo;
const TypeInfo* theIntArrayTypeInfo = &implIntArrayTypeInfo;
const TypeInfo* theStringTypeInfo = &implStringTypeInfo;
#ifdef __cplusplus
}
#endif
@@ -1,5 +1,6 @@
package kotlin_native
@ExportTypeInfo("theAnyTypeInfo")
public open class Any0 {
// @SymbolName("Kotlin_Any_equals")
// external public open operator fun equals0(other: Any0?): Boolean
@@ -1,5 +1,6 @@
package kotlin_native
@ExportTypeInfo("theByteArrayTypeInfo")
class ByteArray : Cloneable {
// Constructors are handled with compiler magic.
private constructor() {}
@@ -20,6 +21,7 @@ class ByteArray : Cloneable {
external private fun getArrayLength(): Int
}
@ExportTypeInfo("theCharArrayTypeInfo")
class CharArray : Cloneable {
// Constructors are handled with the compiler magic.
private constructor() {}
@@ -40,6 +42,7 @@ class CharArray : Cloneable {
external private fun getArrayLength(): Int
}
@ExportTypeInfo("theIntArrayTypeInfo")
class IntArray : Cloneable {
// Constructors are handled with the compiler magic.
private constructor() {}
@@ -1,5 +1,6 @@
package kotlin_native
@ExportTypeInfo("theCloneableTypeInfo")
public interface Cloneable {
public fun clone(): Any
}
@@ -3,6 +3,7 @@ package kotlin_native
@SymbolName("Kotlin_String_fromUtf8Array")
external fun fromUtf8Array(array: ByteArray) : String
@ExportTypeInfo("theStringTypeInfo")
class String {
@SymbolName("Kotlin_String_hashCode")
external public override fun hashCode(): Int