From dab43d9862381cd28d623c16fe1e15350782f55c Mon Sep 17 00:00:00 2001 From: Alexander Gorshenev Date: Mon, 7 Nov 2016 18:05:45 +0300 Subject: [PATCH] Added some type info to fun metadata --- .../backend/konan/llvm/BinaryMetadata.proto | 6 ++++ .../backend/konan/llvm/MetadataGenerator.kt | 30 +++++++++++++++---- 2 files changed, 30 insertions(+), 6 deletions(-) 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 index 45680031844..4c2b6eca0e6 100644 --- 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 @@ -4,8 +4,14 @@ 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 1efac2d8efc..52d72e8b953 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,8 +4,8 @@ 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.BinaryMetadata -import org.jetbrains.kotlin.backend.BinaryMetadata.FunMetadata +import org.jetbrains.kotlin.backend.konan.llvm.BinaryMetadata.* +import org.jetbrains.kotlin.types.KotlinType internal class MetadataGenerator(override val context: Context): ContextUtils { @@ -31,15 +31,33 @@ internal class MetadataGenerator(override val context: Context): ContextUtils { LLVMAddNamedMetadataOperand(context.llvmModule, name, md) } - private fun serializeFunSignature(declaration:IrFunction): String { - val builder = FunMetadata.newBuilder() + private fun protobufType(type:KotlinType): TypeMetadata { + val builder = TypeMetadata.newBuilder() + val name = type.toString() + val proto = builder + .setName(name) + .build() + + return proto + } + + private fun serializeFunSignature(declaration: IrFunction): String { + val func = declaration.descriptor val hash = "0x123456 some hash" - val name = declaration.descriptor.name.asString() + val name = func.name.asString() - val proto = builder + val ktype = func.getReturnType()!! + val rettype = protobufType(ktype) + + val params = func.getValueParameters() + val argtypes = params.map{ protobufType(it.getType()) } + + val proto = FunMetadata.newBuilder() .setHash(hash) .setName(name) + .setRettype(rettype) + .addAllArg(argtypes) .build() // Convert it to ProtoBuf's TextFormat representation.