[IR] Move IrFunction.isStatic from JS to Common

This commit is contained in:
Svyatoslav Kuzmich
2018-10-19 22:32:00 +03:00
parent 4f6a18e29a
commit dd20775662
7 changed files with 13 additions and 13 deletions
@@ -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) }
@@ -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)
@@ -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() }
}
@@ -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
@@ -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())
}
}
@@ -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