[JS IR] Do not forbid typeOf inlining if it is not required

This commit is contained in:
Roman Artemev
2019-11-22 14:57:44 +03:00
committed by romanart
parent 2e22ddba39
commit 1e4f8b2946
2 changed files with 4 additions and 3 deletions
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.util.OperatorNameConventions
class FunctionInlining(val context: CommonBackendContext) : IrElementTransformerVoidWithContext() {
class FunctionInlining(val context: CommonBackendContext, val dontInlineTypeOf: Boolean = true) : IrElementTransformerVoidWithContext() {
fun inline(irModule: IrModuleFragment) = irModule.accept(this, data = null)
@@ -47,7 +47,8 @@ class FunctionInlining(val context: CommonBackendContext) : IrElementTransformer
return expression
if (Symbols.isLateinitIsInitializedPropertyGetter(callee.symbol))
return expression
if (Symbols.isTypeOfIntrinsic(callee.symbol))
// TODO: Temporary hack till typeOf is unimplemented in K/JS
if (dontInlineTypeOf && Symbols.isTypeOfIntrinsic(callee.symbol))
return expression
val actualCallee = getFunctionDeclaration(callee.symbol)
@@ -97,7 +97,7 @@ private val arrayConstructorPhase = makeJsModulePhase(
private val functionInliningPhase = makeCustomJsModulePhase(
{ context, module ->
FunctionInlining(context).inline(module)
FunctionInlining(context, false).inline(module)
module.patchDeclarationParents()
},
name = "FunctionInliningPhase",