[JS IR] Use origins for bridge with and without stable names

^KT-44415 fixed
This commit is contained in:
Ilya Goncharov
2021-01-20 17:58:40 +03:00
parent 57fdabdace
commit aa1e23d9b0
5 changed files with 16 additions and 13 deletions
@@ -13,7 +13,8 @@ object JsLoweredDeclarationOrigin : IrDeclarationOrigin {
object JS_INTRINSICS_STUB : IrDeclarationOriginImpl("JS_INTRINSICS_STUB")
object JS_CLOSURE_BOX_CLASS : IrStatementOriginImpl("JS_CLOSURE_BOX_CLASS")
object JS_CLOSURE_BOX_CLASS_DECLARATION : IrDeclarationOriginImpl("JS_CLOSURE_BOX_CLASS_DECLARATION")
object BRIDGE_TO_EXTERNAL_FUNCTION : IrDeclarationOriginImpl("BRIDGE_TO_EXTERNAL_FUNCTION")
object BRIDGE_WITH_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITH_STABLE_NAME")
object BRIDGE_WITHOUT_STABLE_NAME : IrDeclarationOriginImpl("BRIDGE_WITHOUT_STABLE_NAME")
object OBJECT_GET_INSTANCE_FUNCTION : IrDeclarationOriginImpl("OBJECT_GET_INSTANCE_FUNCTION")
object JS_SHADOWED_EXPORT : IrDeclarationOriginImpl("JS_SHADOWED_EXPORT")
}
@@ -324,8 +324,8 @@ class ExportModelGenerator(val context: JsIrBackendContext) {
return Exportability.Prohibited("Suspend function")
if (function.isFakeOverride)
return Exportability.NotNeeded
if (function.origin == IrDeclarationOrigin.BRIDGE ||
function.origin == JsLoweredDeclarationOrigin.BRIDGE_TO_EXTERNAL_FUNCTION ||
if (function.origin == JsLoweredDeclarationOrigin.BRIDGE_WITHOUT_STABLE_NAME ||
function.origin == JsLoweredDeclarationOrigin.BRIDGE_WITH_STABLE_NAME ||
function.origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER ||
function.origin == JsLoweredDeclarationOrigin.OBJECT_GET_INSTANCE_FUNCTION ||
function.origin == JsLoweredDeclarationOrigin.JS_SHADOWED_EXPORT
@@ -117,9 +117,9 @@ abstract class BridgesConstruction(val context: JsCommonBackendContext) : Declar
val origin =
if (bridge.hasStableJsName())
JsLoweredDeclarationOrigin.BRIDGE_TO_EXTERNAL_FUNCTION
JsLoweredDeclarationOrigin.BRIDGE_WITH_STABLE_NAME
else
IrDeclarationOrigin.BRIDGE
JsLoweredDeclarationOrigin.BRIDGE_WITHOUT_STABLE_NAME
// TODO: Support offsets for debug info
val irFunction = context.irFactory.buildFun {
@@ -5,10 +5,8 @@
package org.jetbrains.kotlin.ir.backend.js.utils
import org.jetbrains.kotlin.backend.common.ir.isMethodOfAny
import org.jetbrains.kotlin.backend.common.ir.isTopLevel
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.backend.js.JsLoweredDeclarationOrigin
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrBreak
@@ -113,11 +111,7 @@ fun jsFunctionSignature(declaration: IrFunction): Signature {
val declarationName = declaration.getJsNameOrKotlinName().asString()
val needsStableName = declaration.origin == JsLoweredDeclarationOrigin.BRIDGE_TO_EXTERNAL_FUNCTION ||
declaration.hasStableJsName() ||
(declaration as? IrSimpleFunction)?.isMethodOfAny() == true // Handle names for special functions
if (needsStableName) {
if (declaration.hasStableJsName()) {
return StableNameSignature(declarationName)
}
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.ir.backend.js.utils
import org.jetbrains.kotlin.backend.common.ir.isMethodOfAny
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
@@ -23,10 +24,17 @@ import org.jetbrains.kotlin.name.Name
fun TODO(element: IrElement): Nothing = TODO(element::class.java.simpleName + " is not supported yet here")
fun IrFunction.hasStableJsName(): Boolean {
if (
origin == JsLoweredDeclarationOrigin.BRIDGE_WITH_STABLE_NAME ||
(this as? IrSimpleFunction)?.isMethodOfAny() == true // Handle names for special functions
) {
return true
}
if (
origin == JsLoweredDeclarationOrigin.JS_SHADOWED_EXPORT ||
origin == IrDeclarationOrigin.FUNCTION_FOR_DEFAULT_PARAMETER ||
origin == IrDeclarationOrigin.BRIDGE
origin == JsLoweredDeclarationOrigin.BRIDGE_WITHOUT_STABLE_NAME
) {
return false
}