JS: report inline suspend functions to IC
* Also inline suspend lambda'a * Also use correct JsName's in exported suspend inline fun's * Also use less unused imports
This commit is contained in:
-3
@@ -18,7 +18,6 @@ package org.jetbrains.kotlin.js.translate.callTranslator
|
||||
|
||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionType
|
||||
import org.jetbrains.kotlin.builtins.isSuspendFunctionTypeOrSubtype
|
||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
@@ -32,8 +31,6 @@ import org.jetbrains.kotlin.js.translate.reference.CallExpressionTranslator
|
||||
import org.jetbrains.kotlin.js.translate.utils.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.Call.CallType
|
||||
import org.jetbrains.kotlin.psi.KtExpression
|
||||
import org.jetbrains.kotlin.psi.KtWhenConditionInRange
|
||||
import org.jetbrains.kotlin.resolve.calls.callResolverUtil.isInvokeCallOnVariable
|
||||
import org.jetbrains.kotlin.resolve.calls.callUtil.isSafeCall
|
||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||
|
||||
+8
-4
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.js.backend.ast.JsName
|
||||
import org.jetbrains.kotlin.js.backend.ast.metadata.coroutineMetadata
|
||||
import org.jetbrains.kotlin.js.backend.ast.metadata.isInlineableCoroutineBody
|
||||
import org.jetbrains.kotlin.js.descriptorUtils.shouldBeExported
|
||||
import org.jetbrains.kotlin.js.translate.callTranslator.CallTranslator
|
||||
import org.jetbrains.kotlin.js.translate.context.TranslationContext
|
||||
import org.jetbrains.kotlin.js.translate.expression.InlineMetadata
|
||||
import org.jetbrains.kotlin.js.translate.expression.translateAndAliasParameters
|
||||
@@ -100,17 +101,20 @@ abstract class AbstractDeclarationVisitor : TranslatorVisitor<Unit>() {
|
||||
else {
|
||||
null
|
||||
}
|
||||
addFunction(descriptor, functionAndContext?.first, expression)
|
||||
|
||||
if (descriptor.isSuspend && descriptor.isInline && descriptor.shouldBeExported(context.config) && functionAndContext != null) {
|
||||
val exportFunction = functionAndContext.first as JsFunction
|
||||
exportFunction.fillCoroutineMetadata(context, descriptor, exportFunction.coroutineMetadata!!.hasController)
|
||||
addFunction(descriptor, exportFunction, expression)
|
||||
|
||||
val innerContext = functionAndContext.second
|
||||
val inlineFunction = functionAndContext.first.deepCopy() as JsFunction
|
||||
inlineFunction.name = null
|
||||
inlineFunction.coroutineMetadata = null
|
||||
inlineFunction.isInlineableCoroutineBody = true
|
||||
val metadata = InlineMetadata.compose(inlineFunction, descriptor, innerContext)
|
||||
val functionWithMetadata = metadata.functionWithMetadata(context, descriptor.source.getPsi())
|
||||
context.addDeclarationStatement(functionWithMetadata.makeStmt())
|
||||
context.addDeclarationStatement(innerContext.wrapWithInlineMetadata(context, inlineFunction, descriptor).makeStmt())
|
||||
} else {
|
||||
addFunction(descriptor, functionAndContext?.first, expression)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user