[JS IR BE] Fix parameters parents

This commit is contained in:
Svyatoslav Kuzmich
2018-11-13 15:02:56 +03:00
parent d5f8c63130
commit ba0f652e02
4 changed files with 16 additions and 16 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.descriptors.WrappedSimpleFunctionDescriptor
import org.jetbrains.kotlin.backend.common.ir.copyTo
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrStatement
import org.jetbrains.kotlin.ir.builders.*
@@ -227,11 +228,6 @@ class InlineClassLowering(val context: BackendContext) {
private fun createStaticBodilessMethod(function: IrFunction): IrSimpleFunction {
val descriptor = WrappedSimpleFunctionDescriptor()
val returnType = when (function) {
is IrSimpleFunction -> function.returnType
is IrConstructor -> function.parentAsClass.defaultType
else -> error("Unknown function type")
}
return IrFunctionImpl(
function.startOffset,
@@ -241,7 +237,7 @@ class InlineClassLowering(val context: BackendContext) {
function.name.toInlineClassImplementationName(),
function.visibility,
Modality.FINAL,
returnType,
function.returnType,
function.isInline,
function.isExternal,
(function is IrSimpleFunction && function.isTailrec),
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.backend.common.ClassLoweringPass
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
import org.jetbrains.kotlin.backend.common.bridges.generateBridges
import org.jetbrains.kotlin.backend.common.ir.copyTo
import org.jetbrains.kotlin.backend.common.ir.isStatic
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
import org.jetbrains.kotlin.backend.common.ir.isSuspend
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
@@ -120,7 +120,7 @@ class BridgesConstruction(val context: JsIrBackendContext) : ClassLoweringPass {
IrValueParameterImpl(startOffset, endOffset, origin, descriptor, type, varargElementType).also { it.parent = this@apply }
}
extensionReceiverParameter = bridge.extensionReceiverParameter?.copyTo(this)
typeParameters += bridge.typeParameters
copyTypeParametersFrom(bridge)
valueParameters += bridge.valueParameters.map { p -> p.copyTo(this) }
annotations += bridge.annotations
overriddenSymbols.addAll(delegateTo.overriddenSymbols)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.atMostOne
import org.jetbrains.kotlin.backend.common.descriptors.WrappedPropertyDescriptor
import org.jetbrains.kotlin.backend.common.ir.copyTo
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.IrStatement
@@ -183,7 +184,7 @@ class ThrowableSuccessorsLowering(context: JsIrBackendContext) : FileLoweringPas
val function = JsIrBuilder.buildFunction(name, fakeAccessor.returnType, fakeAccessor.parent).apply {
overriddenSymbols += fakeAccessor.overriddenSymbols
correspondingProperty = fakeAccessor.correspondingProperty
dispatchReceiverParameter = fakeAccessor.dispatchReceiverParameter
dispatchReceiverParameter = fakeAccessor.dispatchReceiverParameter?.copyTo(this)
}
val thisReceiver = JsIrBuilder.buildGetValue(function.dispatchReceiverParameter!!.symbol)
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.coroutines
import org.jetbrains.kotlin.backend.common.*
import org.jetbrains.kotlin.backend.common.descriptors.*
import org.jetbrains.kotlin.backend.common.ir.copyParameterDeclarationsFrom
import org.jetbrains.kotlin.backend.common.ir.copyTo
import org.jetbrains.kotlin.backend.common.ir.isSuspend
import org.jetbrains.kotlin.backend.common.lower.SymbolWithIrBuilder
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
@@ -507,8 +508,10 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo
descriptor.bind(declaration)
declaration.parent = coroutineClass
declaration.valueParameters += functionParameters.map {
JsIrBuilder.buildValueParameter(it.name, it.index, it.type, it.origin).also { p -> p.parent = declaration }
declaration.valueParameters += functionParameters.mapIndexed { index: Int, parameter: IrValueParameter ->
JsIrBuilder.buildValueParameter(parameter.name, index, parameter.type, parameter.origin).also { p ->
p.parent = declaration
}
}
declaration.valueParameters += JsIrBuilder.buildValueParameter(
completion.name,
@@ -637,7 +640,7 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo
descriptor.bind(declaration)
declaration.parent = coroutineClass
declaration.returnType = coroutineClass.defaultType
declaration.dispatchReceiverParameter = coroutineClassThis
declaration.dispatchReceiverParameter = coroutineClassThis.copyTo(declaration)
unboundArgs.mapIndexedTo(declaration.valueParameters) { i, p ->
JsIrBuilder.buildValueParameter(p.name, i, p.type, p.origin).also { it.parent = declaration }
@@ -656,7 +659,7 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo
declaration.overriddenSymbols += superFunctionDeclaration.symbol
}
val thisReceiver = coroutineClassThis
val thisReceiver = declaration.dispatchReceiverParameter!!
val irBuilder = context.createIrBuilder(symbol, irFunction.startOffset, irFunction.endOffset)
declaration.body = irBuilder.irBlockBody(irFunction.startOffset, irFunction.endOffset) {
+irReturn(
@@ -726,7 +729,7 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo
val resultSetter = context.coroutineImplResultSymbol.setter!!
val exceptionSetter = context.coroutineImplExceptionProperty.setter!!
val thisReceiver = coroutineClassThis
val thisReceiver = declaration.dispatchReceiverParameter!!
val irBuilder = context.createIrBuilder(symbol, irFunction.startOffset, irFunction.endOffset)
declaration.body = irBuilder.irBlockBody(irFunction.startOffset, irFunction.endOffset) {
val dispatchReceiverCall = irCall(createFunction).apply {
@@ -806,12 +809,12 @@ internal class SuspendFunctionsLowering(val context: JsIrBackendContext): FileLo
function.overriddenSymbols += doResumeFunction.symbol
function.parent = coroutineClass
function.returnType = context.irBuiltIns.anyNType
function.dispatchReceiverParameter = coroutineClassThis
function.dispatchReceiverParameter = coroutineClassThis.copyTo(function)
doResumeFunction.valueParameters.mapTo(function.valueParameters) {
JsIrBuilder.buildValueParameter(it.name, it.index, it.type, it.origin).also { p -> p.parent = function }
}
val thisReceiver = JsIrBuilder.buildGetValue(coroutineClassThis.symbol)
val thisReceiver = JsIrBuilder.buildGetValue(function.dispatchReceiverParameter!!.symbol)
suspendResult = JsIrBuilder.buildVar(
context.irBuiltIns.anyNType,
function,