[IR] Make isExternal mutable and accessible via common interface
JS IR: Mark all effectively external declarations as external to access it directly instead of computing it every time
This commit is contained in:
+29
@@ -48,6 +48,7 @@ private fun isBuiltInClass(declaration: IrDeclaration): Boolean =
|
||||
fun moveBodilessDeclarationsToSeparatePlace(context: JsIrBackendContext, moduleFragment: IrModuleFragment) {
|
||||
MoveBodilessDeclarationsToSeparatePlaceLowering(context).let { moveBodiless ->
|
||||
moduleFragment.files.forEach {
|
||||
markExternalDeclarations(it)
|
||||
moveBodiless.lower(it)
|
||||
}
|
||||
}
|
||||
@@ -112,3 +113,31 @@ class MoveBodilessDeclarationsToSeparatePlaceLowering(private val context: JsIrB
|
||||
}, null)
|
||||
}
|
||||
}
|
||||
|
||||
fun markExternalDeclarations(packageFragment: IrPackageFragment) {
|
||||
for (declaration in packageFragment.declarations) {
|
||||
if (declaration is IrPossiblyExternalDeclaration) {
|
||||
if (declaration.isExternal) {
|
||||
markNestedExternalDeclarations(declaration)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun markNestedExternalDeclarations(declaration: IrDeclaration) {
|
||||
if (declaration is IrPossiblyExternalDeclaration) {
|
||||
declaration.isExternal = true
|
||||
}
|
||||
if (declaration is IrProperty) {
|
||||
declaration.getter?.isExternal = true
|
||||
declaration.setter?.isExternal = true
|
||||
declaration.backingField?.isExternal = true
|
||||
}
|
||||
if (declaration is IrClass) {
|
||||
declaration.declarations.forEach {
|
||||
markNestedExternalDeclarations(it)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user