[JS IR BE] don't initialize instance storage for singletons explicitly, use default value (undefined) instead
It allows accessing to a singleton independent to the state of its storage.
This commit is contained in:
+3
-8
@@ -21,11 +21,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
|||||||
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
||||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||||
import org.jetbrains.kotlin.ir.types.isAny
|
import org.jetbrains.kotlin.ir.types.isAny
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.isInterface
|
|
||||||
import org.jetbrains.kotlin.ir.util.isObject
|
|
||||||
import org.jetbrains.kotlin.ir.util.isReal
|
|
||||||
import org.jetbrains.kotlin.ir.util.resolveFakeOverride
|
|
||||||
import org.jetbrains.kotlin.js.backend.ast.*
|
import org.jetbrains.kotlin.js.backend.ast.*
|
||||||
|
|
||||||
class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationContext) {
|
class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationContext) {
|
||||||
@@ -107,7 +103,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
|||||||
val instanceVarName = "${className.ident}_instance"
|
val instanceVarName = "${className.ident}_instance"
|
||||||
val getInstanceFunName = "${className.ident}_getInstance"
|
val getInstanceFunName = "${className.ident}_getInstance"
|
||||||
val jsVarNode = context.currentScope.declareName(instanceVarName)
|
val jsVarNode = context.currentScope.declareName(instanceVarName)
|
||||||
val varStmt = JsVars(JsVars.JsVar(jsVarNode, JsNullLiteral()))
|
val varStmt = JsVars(JsVars.JsVar(jsVarNode))
|
||||||
val function = generateGetInstanceFunction(jsVarNode, getInstanceFunName)
|
val function = generateGetInstanceFunction(jsVarNode, getInstanceFunName)
|
||||||
return listOf(varStmt, function.makeStmt())
|
return listOf(varStmt, function.makeStmt())
|
||||||
}
|
}
|
||||||
@@ -118,8 +114,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo
|
|||||||
func.name = context.currentScope.declareName(instanceFunName)
|
func.name = context.currentScope.declareName(instanceFunName)
|
||||||
|
|
||||||
functionBody.statements += JsIf(
|
functionBody.statements += JsIf(
|
||||||
JsBinaryOperation(JsBinaryOperator.REF_EQ, instanceVar.makeRef(), JsNullLiteral()),
|
JsBinaryOperation(JsBinaryOperator.REF_EQ, instanceVar.makeRef(), JsPrefixOperation(JsUnaryOperator.VOID, JsIntLiteral(0))),
|
||||||
// TODO: Fix initialization order
|
|
||||||
jsAssignment(instanceVar.makeRef(), JsNew(classNameRef)).makeStmt()
|
jsAssignment(instanceVar.makeRef(), JsNew(classNameRef)).makeStmt()
|
||||||
)
|
)
|
||||||
functionBody.statements += JsReturn(instanceVar.makeRef())
|
functionBody.statements += JsReturn(instanceVar.makeRef())
|
||||||
|
|||||||
Reference in New Issue
Block a user