[JS IR BE] Minor refactoring
This commit is contained in:
@@ -323,3 +323,10 @@ object SetDeclarationsParentVisitor : IrElementVisitor<Unit, IrDeclarationParent
|
|||||||
super.visitDeclaration(declaration, data)
|
super.visitDeclaration(declaration, data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
val IrFunction.isStatic: Boolean
|
||||||
|
get() = parent is IrClass && dispatchReceiverParameter == null
|
||||||
|
|
||||||
|
val IrDeclaration.isTopLevel: Boolean
|
||||||
|
get() = parent is IrPackageFragment
|
||||||
-5
@@ -5,19 +5,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.common.utils
|
package org.jetbrains.kotlin.backend.common.utils
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.isFunctionOrKFunctionType
|
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.builtins.isBuiltinFunctionalTypeOrSubtype
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.toIrType
|
import org.jetbrains.kotlin.ir.types.toIrType
|
||||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
import org.jetbrains.kotlin.ir.types.toKotlinType
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.types.CommonSupertypes
|
import org.jetbrains.kotlin.types.CommonSupertypes
|
||||||
import org.jetbrains.kotlin.types.isNullable
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isInterface
|
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||||
import org.jetbrains.kotlin.types.typeUtil.isTypeParameter
|
|
||||||
|
|
||||||
// TODO: implement pure Ir-based function (see IrTypeUtils.kt)
|
// TODO: implement pure Ir-based function (see IrTypeUtils.kt)
|
||||||
|
|
||||||
|
|||||||
@@ -114,7 +114,7 @@ class JsIrBackendContext(
|
|||||||
private val coroutineIntrinsicsPackage = module.getPackage(COROUTINE_INTRINSICS_PACKAGE_FQNAME)
|
private val coroutineIntrinsicsPackage = module.getPackage(COROUTINE_INTRINSICS_PACKAGE_FQNAME)
|
||||||
|
|
||||||
val enumEntryToGetInstanceFunction = mutableMapOf<IrEnumEntrySymbol, () -> IrExpression>()
|
val enumEntryToGetInstanceFunction = mutableMapOf<IrEnumEntrySymbol, () -> IrExpression>()
|
||||||
val callablereferenceCache = mutableMapOf<CallableReferenceKey, IrSimpleFunction>()
|
val callableReferencesCache = mutableMapOf<CallableReferenceKey, IrSimpleFunction>()
|
||||||
|
|
||||||
val coroutineGetContext: IrFunctionSymbol
|
val coroutineGetContext: IrFunctionSymbol
|
||||||
get() {
|
get() {
|
||||||
|
|||||||
+1
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.ClassLoweringPass
|
|||||||
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
|
import org.jetbrains.kotlin.backend.common.bridges.FunctionHandle
|
||||||
import org.jetbrains.kotlin.backend.common.bridges.generateBridges
|
import org.jetbrains.kotlin.backend.common.bridges.generateBridges
|
||||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.isStatic
|
||||||
import org.jetbrains.kotlin.backend.common.ir.isSuspend
|
import org.jetbrains.kotlin.backend.common.ir.isSuspend
|
||||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
|
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
|
||||||
@@ -16,7 +17,6 @@ import org.jetbrains.kotlin.descriptors.Modality
|
|||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.isStatic
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.asString
|
import org.jetbrains.kotlin.ir.backend.js.utils.asString
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
|||||||
+1
-1
@@ -37,7 +37,7 @@ class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringP
|
|||||||
private val callableNameConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KCALLABLE_NAME)
|
private val callableNameConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KCALLABLE_NAME)
|
||||||
private val getterConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KPROPERTY_GET)
|
private val getterConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KPROPERTY_GET)
|
||||||
private val setterConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KPROPERTY_SET)
|
private val setterConst = JsIrBuilder.buildString(context.irBuiltIns.stringType, Namer.KPROPERTY_SET)
|
||||||
private val callableToGetterFunction = context.callablereferenceCache
|
private val callableToGetterFunction = context.callableReferencesCache
|
||||||
|
|
||||||
private val newDeclarations = mutableListOf<IrDeclaration>()
|
private val newDeclarations = mutableListOf<IrDeclaration>()
|
||||||
private val implicitDeclarationFile = context.implicitDeclarationFile
|
private val implicitDeclarationFile = context.implicitDeclarationFile
|
||||||
|
|||||||
+1
-1
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.lower.calls
|
package org.jetbrains.kotlin.ir.backend.js.lower.calls
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.isStatic
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.irCall
|
import org.jetbrains.kotlin.ir.backend.js.ir.irCall
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.isStatic
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
|||||||
+3
-2
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.isStatic
|
||||||
import org.jetbrains.kotlin.backend.common.onlyIf
|
import org.jetbrains.kotlin.backend.common.onlyIf
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||||
@@ -59,13 +60,13 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
|||||||
classBlock.statements += generateClassMetadata()
|
classBlock.statements += generateClassMetadata()
|
||||||
irClass.onlyIf({ kind == ClassKind.OBJECT }) { classBlock.statements += maybeGenerateObjectInstance() }
|
irClass.onlyIf({ kind == ClassKind.OBJECT }) { classBlock.statements += maybeGenerateObjectInstance() }
|
||||||
if (irClass.superTypes.any { it.isThrowable() }) {
|
if (irClass.superTypes.any { it.isThrowable() }) {
|
||||||
classBlock.statements += genereateThrowableProperties()
|
classBlock.statements += generateThrowableProperties()
|
||||||
}
|
}
|
||||||
context.staticContext.classModels[className] = classModel
|
context.staticContext.classModels[className] = classModel
|
||||||
return classBlock
|
return classBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun genereateThrowableProperties(): List<JsStatement> {
|
private fun generateThrowableProperties(): List<JsStatement> {
|
||||||
val functions = irClass.declarations.filterIsInstance<IrSimpleFunction>()
|
val functions = irClass.declarations.filterIsInstance<IrSimpleFunction>()
|
||||||
|
|
||||||
val messageGetter = functions.single { it.name == Name.special("<get-message>") }
|
val messageGetter = functions.single { it.name == Name.special("<get-message>") }
|
||||||
|
|||||||
-8
@@ -8,9 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.transformers.irToJs
|
|||||||
import org.jetbrains.kotlin.backend.common.descriptors.isSuspend
|
import org.jetbrains.kotlin.backend.common.descriptors.isSuspend
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
import org.jetbrains.kotlin.ir.backend.js.utils.JsGenerationContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.Namer
|
import org.jetbrains.kotlin.ir.backend.js.utils.Namer
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrPackageFragment
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.js.backend.ast.*
|
import org.jetbrains.kotlin.js.backend.ast.*
|
||||||
|
|
||||||
@@ -81,12 +79,6 @@ fun translateCallArguments(expression: IrMemberAccessExpression, context: JsGene
|
|||||||
} else arguments
|
} else arguments
|
||||||
}
|
}
|
||||||
|
|
||||||
val IrFunction.isStatic: Boolean
|
|
||||||
get() = parent is IrClass && dispatchReceiverParameter == null
|
|
||||||
|
|
||||||
val IrFunction.isTopLevel: Boolean
|
|
||||||
get() = parent is IrPackageFragment
|
|
||||||
|
|
||||||
fun JsStatement.asBlock() = this as? JsBlock ?: JsBlock(this)
|
fun JsStatement.asBlock() = this as? JsBlock ?: JsBlock(this)
|
||||||
|
|
||||||
fun JsName.objectInstanceName() = "${ident}_instance"
|
fun JsName.objectInstanceName() = "${ident}_instance"
|
||||||
|
|||||||
+5
-4
@@ -5,8 +5,9 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.utils
|
package org.jetbrains.kotlin.ir.backend.js.utils
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.isStatic
|
||||||
|
import org.jetbrains.kotlin.backend.common.ir.isTopLevel
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.backend.js.transformers.irToJs.isStatic
|
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||||
@@ -129,11 +130,11 @@ class SimpleNameGenerator : NameGenerator {
|
|||||||
}
|
}
|
||||||
is IrField -> {
|
is IrField -> {
|
||||||
nameBuilder.append(declaration.name.asString())
|
nameBuilder.append(declaration.name.asString())
|
||||||
if (declaration.parent is IrDeclaration) {
|
if (declaration.isTopLevel) {
|
||||||
|
nameDeclarator = context.staticContext.rootScope::declareFreshName
|
||||||
|
} else {
|
||||||
nameBuilder.append('.')
|
nameBuilder.append('.')
|
||||||
nameBuilder.append(getNameForDeclaration(declaration.parent as IrDeclaration, context))
|
nameBuilder.append(getNameForDeclaration(declaration.parent as IrDeclaration, context))
|
||||||
} else {
|
|
||||||
nameDeclarator = context.staticContext.rootScope::declareFreshName
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
is IrClass -> {
|
is IrClass -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user