From 9a5454c333898c151d80e50d6bb2952513b3d946 Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 7 Nov 2016 18:47:34 +0300 Subject: [PATCH] Disentangled class metadata and llvm metadata. It was decided to call class data 'link data'. And retain the metadata name for LLVM metadata. --- .../backend/konan/llvm/BinaryLinkdata.proto | 17 ++++++++++ .../backend/konan/llvm/BinaryMetadata.proto | 17 ---------- .../backend/konan/llvm/MetadataGenerator.kt | 33 +++++++++---------- 3 files changed, 33 insertions(+), 34 deletions(-) create mode 100644 backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryLinkdata.proto delete mode 100644 backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryMetadata.proto diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryLinkdata.proto b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryLinkdata.proto new file mode 100644 index 00000000000..158243a0676 --- /dev/null +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryLinkdata.proto @@ -0,0 +1,17 @@ + +syntax="proto2"; +package org.jetbrains.kotlin.backend.konan.llvm; + +option java_outer_classname = "BinaryLinkdata"; + +message TypeLinkdata { + required string name = 1; +} + +message FunLinkdata { + required string hash = 1; + required string name = 2; + required TypeLinkdata returnType = 3; + repeated TypeLinkdata arg = 4; +} + diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryMetadata.proto b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryMetadata.proto deleted file mode 100644 index 4c2b6eca0e6..00000000000 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/BinaryMetadata.proto +++ /dev/null @@ -1,17 +0,0 @@ - -syntax="proto2"; -package org.jetbrains.kotlin.backend.konan.llvm; - -option java_outer_classname = "BinaryMetadata"; - -message TypeMetadata { - required string name = 1; -} - -message FunMetadata { - required string hash = 1; - required string name = 2; - required TypeMetadata rettype = 3; - repeated TypeMetadata arg = 4; -} - diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/MetadataGenerator.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/MetadataGenerator.kt index 52d72e8b953..bd3c306f2af 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/MetadataGenerator.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/MetadataGenerator.kt @@ -4,7 +4,7 @@ package org.jetbrains.kotlin.backend.native.llvm import kotlin_native.interop.* import llvm.* import org.jetbrains.kotlin.ir.declarations.IrFunction -import org.jetbrains.kotlin.backend.konan.llvm.BinaryMetadata.* +import org.jetbrains.kotlin.backend.konan.llvm.BinaryLinkdata.* import org.jetbrains.kotlin.types.KotlinType internal class MetadataGenerator(override val context: Context): ContextUtils { @@ -13,16 +13,16 @@ internal class MetadataGenerator(override val context: Context): ContextUtils { return LLVMMDString(str, str.length)!! } - private fun metadataNode(args: MutableList): LLVMOpaqueValue { + private fun metadataNode(args: List): LLVMOpaqueValue { memScoped { - val rargs = alloc(array[args.size](Ref to LLVMOpaqueValue)) - args.forEachIndexed { i, llvmOpaqueValue -> rargs[i].value = args[i]} - return LLVMMDNode(rargs[0], args.size)!! + val references = alloc(array[args.size](Ref to LLVMOpaqueValue)) + args.forEachIndexed { i, llvmOpaqueValue -> references[i].value = args[i]} + return LLVMMDNode(references[0], args.size)!! } } private fun metadataFun(fn: LLVMOpaqueValue?, info: String): LLVMOpaqueValue { - val args: MutableList = mutableListOf(fn, metadataString(info)); + val args = listOf(fn, metadataString(info)); val md = metadataNode(args) return md } @@ -31,8 +31,8 @@ internal class MetadataGenerator(override val context: Context): ContextUtils { LLVMAddNamedMetadataOperand(context.llvmModule, name, md) } - private fun protobufType(type:KotlinType): TypeMetadata { - val builder = TypeMetadata.newBuilder() + private fun protobufType(type:KotlinType): TypeLinkdata { + val builder = TypeLinkdata.newBuilder() val name = type.toString() val proto = builder .setName(name) @@ -47,24 +47,23 @@ internal class MetadataGenerator(override val context: Context): ContextUtils { val hash = "0x123456 some hash" val name = func.name.asString() - val ktype = func.getReturnType()!! - val rettype = protobufType(ktype) + val kotlinType = func.getReturnType()!! + val returnType = protobufType(kotlinType) - val params = func.getValueParameters() - val argtypes = params.map{ protobufType(it.getType()) } + val parameters = func.getValueParameters() + val argumentTypes = parameters.map{ protobufType(it.getType()) } - val proto = FunMetadata.newBuilder() + val proto = FunLinkdata.newBuilder() .setHash(hash) .setName(name) - .setRettype(rettype) - .addAllArg(argtypes) + .setReturnType(returnType) + .addAllArg(argumentTypes) .build() // Convert it to ProtoBuf's TextFormat representation. // Use TextFormat.merge(str, builder) to parse it back val str = proto.toString() - - return str + return str } internal fun function(declaration: IrFunction) {