[JS IR BE] Do not create $default stub for external function and any its fake override

This commit is contained in:
Roman Artemev
2019-07-04 18:10:43 +03:00
committed by romanart
parent 28a108a205
commit 8a569cc698
8 changed files with 82 additions and 5 deletions
@@ -396,12 +396,15 @@ class DefaultParameterCleaner constructor(val context: CommonBackendContext) : F
// TODO this implementation is exponential
private fun IrFunction.needsDefaultArgumentsLowering(skipInlineMethods: Boolean, skipExternalMethods: Boolean): Boolean {
if (isInline && skipInlineMethods) return false
if (skipExternalMethods && isEffectivelyExternal()) return false
if (skipExternalMethods && isExternalOrInheritedFromExternal()) return false
if (valueParameters.any { it.defaultValue != null }) return true
if (this !is IrSimpleFunction) return false
return overriddenSymbols.any { it.owner.needsDefaultArgumentsLowering(skipInlineMethods, skipExternalMethods) }
fun IrSimpleFunction.inheritsDefaultValues(): Boolean =
valueParameters.any { it.defaultValue != null } || overriddenSymbols.any { it.owner.inheritsDefaultValues() }
return inheritsDefaultValues()
}
private fun IrFunction.generateDefaultsFunctionImpl(