[JS IR] [Wasm] Extract InlineClassesUtils into CommonBackendContext
This commit is contained in:
+3
-21
@@ -6,20 +6,15 @@
|
||||
package org.jetbrains.kotlin.backend.wasm.utils
|
||||
|
||||
import org.jetbrains.kotlin.backend.wasm.WasmSymbols
|
||||
import org.jetbrains.kotlin.ir.backend.js.InlineClassesUtils
|
||||
import org.jetbrains.kotlin.ir.backend.js.JsCommonInlineClassesUtils
|
||||
import org.jetbrains.kotlin.ir.backend.js.utils.erase
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.isNullable
|
||||
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
|
||||
|
||||
class WasmInlineClassesUtils(private val wasmSymbols: WasmSymbols) : InlineClassesUtils {
|
||||
override fun isTypeInlined(type: IrType): Boolean {
|
||||
return getInlinedClass(type) != null
|
||||
}
|
||||
class WasmInlineClassesUtils(private val wasmSymbols: WasmSymbols) : JsCommonInlineClassesUtils {
|
||||
|
||||
override fun getInlinedClass(type: IrType): IrClass? {
|
||||
if (type is IrSimpleType) {
|
||||
@@ -36,7 +31,7 @@ class WasmInlineClassesUtils(private val wasmSymbols: WasmSymbols) : InlineClass
|
||||
override fun isClassInlineLike(klass: IrClass): Boolean {
|
||||
// TODO: This hook is called from autoboxing lowering so we also handle autoboxing annotation here. In the future it's better
|
||||
// to separate autoboxing from the inline class handling.
|
||||
return klass.isInline || klass.hasWasmAutoboxedAnnotation()
|
||||
return super.isClassInlineLike(klass) || klass.hasWasmAutoboxedAnnotation()
|
||||
}
|
||||
|
||||
override val boxIntrinsic: IrSimpleFunctionSymbol
|
||||
@@ -44,17 +39,4 @@ class WasmInlineClassesUtils(private val wasmSymbols: WasmSymbols) : InlineClass
|
||||
|
||||
override val unboxIntrinsic: IrSimpleFunctionSymbol
|
||||
get() = wasmSymbols.unboxIntrinsic
|
||||
|
||||
/**
|
||||
* Unlike [org.jetbrains.kotlin.ir.util.getInlineClassUnderlyingType], doesn't use [IrClass.inlineClassRepresentation] because
|
||||
* for some reason it can be called for classes which are not inline, e.g. `kotlin.Double`.
|
||||
*/
|
||||
fun getInlineClassUnderlyingType(irClass: IrClass): IrType {
|
||||
for (declaration in irClass.declarations) {
|
||||
if (declaration is IrConstructor && declaration.isPrimary) {
|
||||
return declaration.valueParameters[0].type
|
||||
}
|
||||
}
|
||||
error("Class has no primary constructor: ${irClass.fqNameWhenAvailable}")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user