From c61d99fcff8c475f82a004fcf84581a9072f6304 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Fri, 17 Aug 2018 21:43:33 +0300 Subject: [PATCH] [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. --- .../js/transformers/irToJs/JsClassGenerator.kt | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt index 018e2cf93de..4ffaade83f5 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/transformers/irToJs/JsClassGenerator.kt @@ -21,11 +21,7 @@ import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.isAny -import org.jetbrains.kotlin.ir.util.defaultType -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.ir.util.* import org.jetbrains.kotlin.js.backend.ast.* 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 getInstanceFunName = "${className.ident}_getInstance" val jsVarNode = context.currentScope.declareName(instanceVarName) - val varStmt = JsVars(JsVars.JsVar(jsVarNode, JsNullLiteral())) + val varStmt = JsVars(JsVars.JsVar(jsVarNode)) val function = generateGetInstanceFunction(jsVarNode, getInstanceFunName) return listOf(varStmt, function.makeStmt()) } @@ -118,8 +114,7 @@ class JsClassGenerator(private val irClass: IrClass, val context: JsGenerationCo func.name = context.currentScope.declareName(instanceFunName) functionBody.statements += JsIf( - JsBinaryOperation(JsBinaryOperator.REF_EQ, instanceVar.makeRef(), JsNullLiteral()), - // TODO: Fix initialization order + JsBinaryOperation(JsBinaryOperator.REF_EQ, instanceVar.makeRef(), JsPrefixOperation(JsUnaryOperator.VOID, JsIntLiteral(0))), jsAssignment(instanceVar.makeRef(), JsNew(classNameRef)).makeStmt() ) functionBody.statements += JsReturn(instanceVar.makeRef())