[IR] Move IrFunction.isStatic from JS to Common
This commit is contained in:
+1
-1
@@ -56,7 +56,7 @@ class BridgesConstruction(val context: JsIrBackendContext) : ClassLoweringPass {
|
||||
irClass.declarations
|
||||
.asSequence()
|
||||
.filterIsInstance<IrSimpleFunction>()
|
||||
.filter { !it.isStatic }
|
||||
.filter { !it.isStaticMethodOfClass }
|
||||
.toList()
|
||||
.forEach { generateBridges(it, irClass) }
|
||||
|
||||
|
||||
+2
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.ir.isStatic
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.irCall
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.isStaticMethodOfClass
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.types.getClass
|
||||
@@ -26,7 +27,7 @@ class EnumIntrinsicsTransformer(private val context: JsIrBackendContext) : Calls
|
||||
val enum = call.getTypeArgument(0)?.getClass() ?: return call
|
||||
if (!enum.isEnumClass) return call
|
||||
val staticMethod = enum.findDeclaration(staticMethodPredicate)
|
||||
if (staticMethod == null || !staticMethod.isStatic)
|
||||
if (staticMethod == null || !staticMethod.isStaticMethodOfClass)
|
||||
throw IllegalStateException("Enum class should have static method for ${call.symbol.owner.name}")
|
||||
|
||||
return irCall(call, staticMethod.symbol)
|
||||
|
||||
+2
-5
@@ -7,10 +7,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.calls
|
||||
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||
import org.jetbrains.kotlin.ir.backend.js.ir.irCall
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.types.*
|
||||
@@ -102,7 +99,7 @@ class EqualityAndComparisonCallsTransformer(context: JsIrBackendContext) : Calls
|
||||
|
||||
fun IrSimpleFunction.isFakeOverriddenFromComparable(): Boolean = when {
|
||||
origin != IrDeclarationOrigin.FAKE_OVERRIDE ->
|
||||
parentAsClass.thisReceiver!!.type.isComparable()
|
||||
!isStaticMethodOfClass && parentAsClass.thisReceiver!!.type.isComparable()
|
||||
|
||||
else -> overriddenSymbols.all { it.owner.isFakeOverriddenFromComparable() }
|
||||
}
|
||||
|
||||
+2
-2
@@ -101,7 +101,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
||||
private fun generateMemberFunction(declaration: IrSimpleFunction): JsStatement? {
|
||||
|
||||
val translatedFunction = declaration.run { if (isReal) accept(IrFunctionToJsTransformer(), context) else null }
|
||||
if (declaration.isStatic) {
|
||||
if (declaration.isStaticMethodOfClass) {
|
||||
return translatedFunction!!.makeStmt()
|
||||
}
|
||||
|
||||
@@ -236,4 +236,4 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
||||
}
|
||||
|
||||
private val IrClassifierSymbol.isInterface get() = (owner as? IrClass)?.isInterface == true
|
||||
private val IrClassifierSymbol.isEffectivelyExternal get() = (owner as? IrDeclaration)?.isEffectivelyExternal() == true
|
||||
private val IrClassifierSymbol.isEffectivelyExternal get() = (owner as? IrDeclaration)?.isEffectivelyExternal() == true
|
||||
|
||||
+1
-1
@@ -86,4 +86,4 @@ fun JsName.objectInstanceName() = "${ident}_instance"
|
||||
fun defineProperty(receiver: JsExpression, name: String, value: () -> JsExpression): JsInvocation {
|
||||
val objectDefineProperty = JsNameRef("defineProperty", Namer.JS_OBJECT)
|
||||
return JsInvocation(objectDefineProperty, receiver, JsStringLiteral(name), value())
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -181,7 +181,7 @@ class SimpleNameGenerator : NameGenerator {
|
||||
}
|
||||
is IrSimpleFunction -> {
|
||||
|
||||
if (declaration.isStatic) {
|
||||
if (declaration.isStaticMethodOfClass) {
|
||||
nameBuilder.append(getNameForDeclaration(declaration.parent as IrDeclaration, context))
|
||||
nameBuilder.append('.')
|
||||
}
|
||||
|
||||
@@ -18,12 +18,11 @@ package org.jetbrains.kotlin.ir.declarations
|
||||
|
||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
interface IrFunction : IrDeclarationWithVisibility, IrTypeParametersContainer, IrSymbolOwner, IrDeclarationParent, IrReturnTarget {
|
||||
override val descriptor: FunctionDescriptor
|
||||
@@ -57,3 +56,6 @@ fun IrFunction.getDefault(parameter: ValueParameterDescriptor): IrExpressionBody
|
||||
fun IrFunction.putDefault(parameter: ValueParameterDescriptor, expressionBody: IrExpressionBody) {
|
||||
getIrValueParameter(parameter).defaultValue = expressionBody
|
||||
}
|
||||
|
||||
val IrFunction.isStaticMethodOfClass: Boolean
|
||||
get() = this is IrSimpleFunction && parent is IrClass && dispatchReceiverParameter == null
|
||||
|
||||
Reference in New Issue
Block a user