[JS IR BE] Support codegen for external objects and properties

This commit is contained in:
Svyatoslav Kuzmich
2019-02-06 14:27:43 +03:00
parent 53d15ea27c
commit d8b1d09566
5 changed files with 29 additions and 6 deletions
@@ -403,9 +403,17 @@ fun IrFunction.isFakeOverriddenFromAny(): Boolean {
fun IrCall.isSuperToAny() = superQualifier?.let { this.symbol.owner.isFakeOverriddenFromAny() } ?: false
fun IrDeclaration.isEffectivelyExternal(): Boolean {
fun IrFunction.effectiveParentDeclaration(): IrDeclaration? =
when (this) {
is IrSimpleFunction -> correspondingProperty ?: parent as? IrDeclaration
else -> parent as? IrDeclaration
}
return when (this) {
is IrFunction -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
is IrFunction -> isExternal || (effectiveParentDeclaration()?.isEffectivelyExternal() ?: false)
is IrField -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
is IrProperty -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
is IrClass -> isExternal || parent is IrDeclaration && parent.isEffectivelyExternal()
else -> false
}