JVM IR: remove unused code, minor cleanup
This commit is contained in:
@@ -18,8 +18,6 @@ package org.jetbrains.kotlin.backend.jvm
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOriginImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOriginImpl
|
|
||||||
|
|
||||||
interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
||||||
object CLASS_STATIC_INITIALIZER : IrDeclarationOriginImpl("CLASS_STATIC_INITIALIZER")
|
object CLASS_STATIC_INITIALIZER : IrDeclarationOriginImpl("CLASS_STATIC_INITIALIZER")
|
||||||
@@ -43,8 +41,3 @@ interface JvmLoweredDeclarationOrigin : IrDeclarationOrigin {
|
|||||||
object SYNTHETIC_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("SYNTHETIC_INLINE_CLASS_MEMBER", isSynthetic = true)
|
object SYNTHETIC_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("SYNTHETIC_INLINE_CLASS_MEMBER", isSynthetic = true)
|
||||||
object GENERATED_ASSERTION_ENABLED_FIELD : IrDeclarationOriginImpl("GENERATED_ASSERTION_ENABLED_FIELD", isSynthetic = true)
|
object GENERATED_ASSERTION_ENABLED_FIELD : IrDeclarationOriginImpl("GENERATED_ASSERTION_ENABLED_FIELD", isSynthetic = true)
|
||||||
}
|
}
|
||||||
|
|
||||||
interface JvmLoweredStatementOrigin : IrStatementOrigin {
|
|
||||||
object DEFAULT_IMPLS_DELEGATION : IrStatementOriginImpl("DEFAULT_IMPL_DELEGATION")
|
|
||||||
object TO_ARRAY : IrDeclarationOriginImpl("TO_ARRAY")
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -291,12 +291,6 @@ class JvmSymbols(
|
|||||||
val getOrCreateKotlinPackage: IrSimpleFunctionSymbol =
|
val getOrCreateKotlinPackage: IrSimpleFunctionSymbol =
|
||||||
reflection.functionByName("getOrCreateKotlinPackage")
|
reflection.functionByName("getOrCreateKotlinPackage")
|
||||||
|
|
||||||
val getOrCreateKotlinClass: IrSimpleFunctionSymbol =
|
|
||||||
reflection.functionByName("getOrCreateKotlinClass")
|
|
||||||
|
|
||||||
val getOrCreateKotlinClasses: IrSimpleFunctionSymbol =
|
|
||||||
reflection.functionByName("getOrCreateKotlinClasses")
|
|
||||||
|
|
||||||
val desiredAssertionStatus: IrSimpleFunctionSymbol by lazy {
|
val desiredAssertionStatus: IrSimpleFunctionSymbol by lazy {
|
||||||
javaLangClass.functionByName("desiredAssertionStatus")
|
javaLangClass.functionByName("desiredAssertionStatus")
|
||||||
}
|
}
|
||||||
|
|||||||
-111
@@ -1,111 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
|
||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.backend.jvm.intrinsics
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
|
||||||
import org.jetbrains.kotlin.codegen.Callable
|
|
||||||
import org.jetbrains.kotlin.codegen.CallableMethod
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
|
||||||
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
|
|
||||||
import java.lang.UnsupportedOperationException
|
|
||||||
|
|
||||||
open class IntrinsicCallable(
|
|
||||||
override val returnType: Type,
|
|
||||||
override val valueParameterTypes: List<Type>,
|
|
||||||
override val dispatchReceiverType: Type?,
|
|
||||||
override val extensionReceiverType: Type?,
|
|
||||||
private val invoke: IntrinsicCallable.(v: InstructionAdapter) -> Unit = { throw UnsupportedOperationException() }
|
|
||||||
) : Callable {
|
|
||||||
|
|
||||||
constructor(
|
|
||||||
callable: CallableMethod,
|
|
||||||
invoke: IntrinsicCallable.(v: InstructionAdapter) -> Unit = {}
|
|
||||||
) : this(
|
|
||||||
callable.returnType,
|
|
||||||
callable.valueParameterTypes,
|
|
||||||
callable.dispatchReceiverType,
|
|
||||||
callable.extensionReceiverType,
|
|
||||||
invoke
|
|
||||||
)
|
|
||||||
|
|
||||||
override fun genInvokeInstruction(v: InstructionAdapter) {
|
|
||||||
invokeIntrinsic(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
open fun invokeIntrinsic(v: InstructionAdapter) {
|
|
||||||
invoke(v)
|
|
||||||
}
|
|
||||||
|
|
||||||
override val parameterTypes: Array<Type>
|
|
||||||
get() = throw UnsupportedOperationException()
|
|
||||||
|
|
||||||
override val dispatchReceiverKotlinType: KotlinType?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
override val extensionReceiverKotlinType: KotlinType?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
override val returnKotlinType: KotlinType?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
override fun isStaticCall() = false
|
|
||||||
|
|
||||||
override val generateCalleeType: Type?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
override val owner: Type
|
|
||||||
get() = throw UnsupportedOperationException()
|
|
||||||
|
|
||||||
fun calcReceiverType(): Type =
|
|
||||||
extensionReceiverType ?: dispatchReceiverType!!
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createBinaryIntrinsicCallable(
|
|
||||||
returnType: Type,
|
|
||||||
valueParameterType: Type,
|
|
||||||
thisType: Type? = null,
|
|
||||||
receiverType: Type? = null,
|
|
||||||
lambda: IntrinsicCallable.(v: InstructionAdapter) -> Unit
|
|
||||||
): IntrinsicCallable {
|
|
||||||
assert(AsmUtil.isPrimitive(returnType)) { "Return type of BinaryOp intrinsic should be of primitive type: $returnType" }
|
|
||||||
|
|
||||||
return object : IntrinsicCallable(returnType, listOf(valueParameterType), thisType, receiverType) {
|
|
||||||
override fun invokeIntrinsic(v: InstructionAdapter) {
|
|
||||||
lambda(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createUnaryIntrinsicCallable(
|
|
||||||
callable: CallableMethod,
|
|
||||||
newReturnType: Type? = null,
|
|
||||||
needPrimitiveCheck: Boolean = false,
|
|
||||||
newThisType: Type? = null,
|
|
||||||
invoke: IntrinsicCallable.(v: InstructionAdapter) -> Unit
|
|
||||||
): IntrinsicCallable {
|
|
||||||
val intrinsic = IntrinsicCallable(
|
|
||||||
newReturnType ?: callable.returnType,
|
|
||||||
callable.valueParameterTypes,
|
|
||||||
newThisType ?: callable.dispatchReceiverType,
|
|
||||||
callable.extensionReceiverType,
|
|
||||||
invoke
|
|
||||||
)
|
|
||||||
assert(intrinsic.valueParameterTypes.isEmpty()) { "Unary operation should not have any parameters" }
|
|
||||||
if (needPrimitiveCheck) {
|
|
||||||
assert(AsmUtil.isPrimitive(intrinsic.returnType)) {
|
|
||||||
"Return type of UnaryPlus intrinsic should be of primitive type: ${intrinsic.returnType}"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return intrinsic
|
|
||||||
}
|
|
||||||
|
|
||||||
fun createIntrinsicCallable(
|
|
||||||
callable: CallableMethod,
|
|
||||||
invoke: IntrinsicCallable.(v: InstructionAdapter) -> Unit
|
|
||||||
): IntrinsicCallable {
|
|
||||||
return IntrinsicCallable(callable, invoke)
|
|
||||||
}
|
|
||||||
-5
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.codegen.Callable
|
|||||||
import org.jetbrains.kotlin.codegen.StackValue
|
import org.jetbrains.kotlin.codegen.StackValue
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
|
import org.jetbrains.kotlin.ir.expressions.IrFunctionAccessExpression
|
||||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
import org.jetbrains.kotlin.resolve.calls.components.isVararg
|
||||||
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
import org.jetbrains.kotlin.resolve.jvm.jvmSignature.JvmMethodSignature
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -145,7 +144,3 @@ fun IrFunctionAccessExpression.receiverAndArgs(): List<IrExpression> {
|
|||||||
return (arrayListOf(this.dispatchReceiver, this.extensionReceiver) +
|
return (arrayListOf(this.dispatchReceiver, this.extensionReceiver) +
|
||||||
symbol.owner.valueParameters.mapIndexed { i, _ -> getValueArgument(i) }).filterNotNull()
|
symbol.owner.valueParameters.mapIndexed { i, _ -> getValueArgument(i) }).filterNotNull()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun List<IrExpression>.asmTypes(context: JvmBackendContext): List<Type> {
|
|
||||||
return map { context.state.typeMapper.mapType(it.type.toKotlinType()) }
|
|
||||||
}
|
|
||||||
+7
-10
@@ -33,39 +33,36 @@ import org.jetbrains.kotlin.lexer.KtTokens
|
|||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.types.SimpleType
|
import org.jetbrains.kotlin.types.SimpleType
|
||||||
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
import org.jetbrains.kotlin.types.expressions.OperatorConventions
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
|
||||||
import org.jetbrains.org.objectweb.asm.Opcodes.*
|
import org.jetbrains.org.objectweb.asm.Opcodes.*
|
||||||
import org.jetbrains.org.objectweb.asm.Type
|
import org.jetbrains.org.objectweb.asm.Type
|
||||||
|
|
||||||
class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) {
|
class IrIntrinsicMethods(val irBuiltIns: IrBuiltIns, val symbols: JvmSymbols) {
|
||||||
|
private val kotlinJvm = FqName("kotlin.jvm")
|
||||||
private val KOTLIN_INTERNAL_IR = FqName("kotlin.internal.ir")
|
private val kotlinJvmInternalUnsafe = FqName("kotlin.jvm.internal.unsafe")
|
||||||
private val KOTLIN_JVM = FqName("kotlin.jvm")
|
|
||||||
private val KOTLIN_JVM_INTERNAL_UNSAFE = FqName("kotlin.jvm.internal.unsafe")
|
|
||||||
|
|
||||||
private val intrinsicsMap = (
|
private val intrinsicsMap = (
|
||||||
listOf(
|
listOf(
|
||||||
Key(KOTLIN_JVM, FqName("T"), "<get-javaClass>", emptyList()) to JavaClassProperty,
|
Key(kotlinJvm, FqName("T"), "<get-javaClass>", emptyList()) to JavaClassProperty,
|
||||||
Key(
|
Key(
|
||||||
KOTLIN_JVM,
|
kotlinJvm,
|
||||||
KotlinBuiltIns.FQ_NAMES.kClass.toSafe(),
|
KotlinBuiltIns.FQ_NAMES.kClass.toSafe(),
|
||||||
"<get-java>",
|
"<get-java>",
|
||||||
emptyList()
|
emptyList()
|
||||||
) to KClassJavaProperty,
|
) to KClassJavaProperty,
|
||||||
Key(
|
Key(
|
||||||
KOTLIN_JVM_INTERNAL_UNSAFE,
|
kotlinJvmInternalUnsafe,
|
||||||
null,
|
null,
|
||||||
"monitorEnter",
|
"monitorEnter",
|
||||||
listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe())
|
listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe())
|
||||||
) to MonitorInstruction.MONITOR_ENTER,
|
) to MonitorInstruction.MONITOR_ENTER,
|
||||||
Key(
|
Key(
|
||||||
KOTLIN_JVM_INTERNAL_UNSAFE,
|
kotlinJvmInternalUnsafe,
|
||||||
null,
|
null,
|
||||||
"monitorExit",
|
"monitorExit",
|
||||||
listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe())
|
listOf(KotlinBuiltIns.FQ_NAMES.any.toSafe())
|
||||||
) to MonitorInstruction.MONITOR_EXIT,
|
) to MonitorInstruction.MONITOR_EXIT,
|
||||||
Key(
|
Key(
|
||||||
KOTLIN_JVM,
|
kotlinJvm,
|
||||||
KotlinBuiltIns.FQ_NAMES.array.toSafe(),
|
KotlinBuiltIns.FQ_NAMES.array.toSafe(),
|
||||||
"isArrayOf",
|
"isArrayOf",
|
||||||
emptyList()
|
emptyList()
|
||||||
|
|||||||
+4
-3
@@ -35,7 +35,10 @@ import org.jetbrains.kotlin.ir.symbols.impl.IrEnumEntrySymbolImpl
|
|||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrExternalPackageFragmentSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.typeWith
|
import org.jetbrains.kotlin.ir.types.typeWith
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.defaultType
|
||||||
|
import org.jetbrains.kotlin.ir.util.getAnnotation
|
||||||
|
import org.jetbrains.kotlin.ir.util.hasAnnotation
|
||||||
|
import org.jetbrains.kotlin.ir.util.isAnnotationClass
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
@@ -112,8 +115,6 @@ private class AdditionalClassAnnotationLowering(private val context: JvmBackendC
|
|||||||
private val etField = buildEnumEntry(elementTypeEnum, "FIELD")
|
private val etField = buildEnumEntry(elementTypeEnum, "FIELD")
|
||||||
private val etLocalVariable = buildEnumEntry(elementTypeEnum, "LOCAL_VARIABLE")
|
private val etLocalVariable = buildEnumEntry(elementTypeEnum, "LOCAL_VARIABLE")
|
||||||
private val etMethod = buildEnumEntry(elementTypeEnum, "METHOD")
|
private val etMethod = buildEnumEntry(elementTypeEnum, "METHOD")
|
||||||
private val etModule = buildEnumEntry(elementTypeEnum, "MODULE")
|
|
||||||
private val etPackage = buildEnumEntry(elementTypeEnum, "PACKAGE")
|
|
||||||
private val etParameter = buildEnumEntry(elementTypeEnum, "PARAMETER")
|
private val etParameter = buildEnumEntry(elementTypeEnum, "PARAMETER")
|
||||||
private val etType = buildEnumEntry(elementTypeEnum, "TYPE")
|
private val etType = buildEnumEntry(elementTypeEnum, "TYPE")
|
||||||
private val etTypeParameter = buildEnumEntry(elementTypeEnum, "TYPE_PARAMETER")
|
private val etTypeParameter = buildEnumEntry(elementTypeEnum, "TYPE_PARAMETER")
|
||||||
|
|||||||
-3
@@ -397,7 +397,4 @@ internal class CallableReferenceLowering(private val context: JvmBackendContext)
|
|||||||
|
|
||||||
private val functionGetOwner =
|
private val functionGetOwner =
|
||||||
context.ir.symbols.functionReference.functionByName("getOwner")
|
context.ir.symbols.functionReference.functionByName("getOwner")
|
||||||
|
|
||||||
private val functionNInvokeFun =
|
|
||||||
context.ir.symbols.functionN.functionByName("invoke")
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-6
@@ -10,7 +10,10 @@ import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
|||||||
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrConst
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrStringConcatenation
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrStringConcatenationImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrStringConcatenationImpl
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
@@ -45,18 +48,14 @@ class FoldConstantLowering(private val context: JvmBackendContext) : IrElementTr
|
|||||||
val operatorName: String
|
val operatorName: String
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@Suppress("unused")
|
||||||
private data class PrimitiveType<T>(val name: String)
|
private data class PrimitiveType<T>(val name: String)
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
private val BYTE = PrimitiveType<Byte>("Byte")
|
|
||||||
private val SHORT = PrimitiveType<Short>("Short")
|
|
||||||
private val INT = PrimitiveType<Int>("Int")
|
private val INT = PrimitiveType<Int>("Int")
|
||||||
private val LONG = PrimitiveType<Long>("Long")
|
private val LONG = PrimitiveType<Long>("Long")
|
||||||
private val DOUBLE = PrimitiveType<Double>("Double")
|
private val DOUBLE = PrimitiveType<Double>("Double")
|
||||||
private val FLOAT = PrimitiveType<Float>("Float")
|
private val FLOAT = PrimitiveType<Float>("Float")
|
||||||
private val CHAR = PrimitiveType<Char>("Char")
|
|
||||||
private val BOOLEAN = PrimitiveType<Boolean>("Boolean")
|
|
||||||
private val STRING = PrimitiveType<String>("String")
|
|
||||||
|
|
||||||
private val BINARY_OP_TO_EVALUATOR = HashMap<BinaryOp, Function2<Any?, Any?, Any>>()
|
private val BINARY_OP_TO_EVALUATOR = HashMap<BinaryOp, Function2<Any?, Any?, Any>>()
|
||||||
|
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.backend.jvm.lower
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull
|
|
||||||
import org.jetbrains.annotations.Nullable
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.FunctionDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
|
|
||||||
interface LoweredFunction: FunctionDescriptor
|
|
||||||
|
|
||||||
class LoweredFunctionImpl(containingDeclaration: DeclarationDescriptor,
|
|
||||||
original: FunctionDescriptor,
|
|
||||||
annotations: Annotations,
|
|
||||||
name: Name,
|
|
||||||
kind: CallableMemberDescriptor.Kind,
|
|
||||||
source: SourceElement) :
|
|
||||||
FunctionDescriptorImpl(containingDeclaration, original, annotations, name, kind, source), LoweredFunction {
|
|
||||||
override fun getDispatchReceiverParameter(): ReceiverParameterDescriptor? {
|
|
||||||
return super.getDispatchReceiverParameter()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun createSubstitutedCopy(newOwner: DeclarationDescriptor, original: FunctionDescriptor?, kind: CallableMemberDescriptor.Kind, newName: Name?, annotations: Annotations, source: SourceElement): FunctionDescriptorImpl {
|
|
||||||
TODO("not implemented")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+3
-1
@@ -63,7 +63,9 @@ internal class PropertyReferenceLowering(val context: JvmBackendContext) : Class
|
|||||||
get() = "${JvmAbi.getterName(name.asString())}()${context.state.typeMapper.mapReturnType(descriptor)}"
|
get() = "${JvmAbi.getterName(name.asString())}()${context.state.typeMapper.mapReturnType(descriptor)}"
|
||||||
|
|
||||||
private val IrMemberAccessExpression.signature: String
|
private val IrMemberAccessExpression.signature: String
|
||||||
get() = getter?.let { getter -> localPropertyIndices[getter]?.let { "<v#$it>" } } ?: getter?.owner?.signature ?: field!!.owner.signature
|
get() = getter?.let { getter ->
|
||||||
|
localPropertyIndices[getter]?.let { "<v#$it>" }
|
||||||
|
} ?: getter?.owner?.signature ?: field!!.owner.signature
|
||||||
|
|
||||||
private val arrayItemGetter =
|
private val arrayItemGetter =
|
||||||
context.ir.symbols.array.owner.functions.single { it.name.asString() == "get" }
|
context.ir.symbols.array.owner.functions.single { it.name.asString() == "get" }
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.backend.jvm.lower
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.lower.InitializersLowering
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.SimpleFunctionDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ValueParameterDescriptorImpl
|
|
||||||
import org.jetbrains.kotlin.name.Name
|
|
||||||
|
|
||||||
fun FunctionDescriptor.toStatic(
|
|
||||||
newOwner: ClassOrPackageFragmentDescriptor,
|
|
||||||
name: Name = this.name,
|
|
||||||
dispatchReceiverClass: ClassDescriptor? = this.containingDeclaration as? ClassDescriptor
|
|
||||||
): FunctionDescriptor {
|
|
||||||
val newFunction = SimpleFunctionDescriptorImpl.create(
|
|
||||||
newOwner, Annotations.EMPTY,
|
|
||||||
name,
|
|
||||||
CallableMemberDescriptor.Kind.DECLARATION, this.source
|
|
||||||
)
|
|
||||||
|
|
||||||
var offset = 0
|
|
||||||
val dispatchReceiver = dispatchReceiverParameter?.let {
|
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
|
||||||
newFunction, null, offset++, Annotations.EMPTY, Name.identifier("this"),
|
|
||||||
dispatchReceiverClass!!.defaultType, false, false, false, null, dispatchReceiverClass.source, null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val extensionReceiver = extensionReceiverParameter?.let {
|
|
||||||
ValueParameterDescriptorImpl.createWithDestructuringDeclarations(
|
|
||||||
newFunction, null, offset++, Annotations.EMPTY, Name.identifier("receiver"),
|
|
||||||
it.value.type, false, false, false, null, it.source, null
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
val valueParameters = listOfNotNull(dispatchReceiver, extensionReceiver) +
|
|
||||||
valueParameters.map { it.copy(newFunction, it.name, it.index + offset) }
|
|
||||||
|
|
||||||
newFunction.initialize(
|
|
||||||
null, null, emptyList()/*TODO: type parameters*/,
|
|
||||||
valueParameters, returnType, Modality.FINAL, Visibilities.PUBLIC
|
|
||||||
)
|
|
||||||
return newFunction
|
|
||||||
}
|
|
||||||
|
|
||||||
fun FunctionDescriptor.isClInit(): Boolean = this.name == InitializersLowering.clinitName
|
|
||||||
Reference in New Issue
Block a user