[JS IC] Fix signature finding in some cases

Found in KFSAD
This commit is contained in:
Roman Artemev
2021-07-30 16:00:37 +03:00
committed by teamcityserver
parent 15648da2b4
commit 9bfe502afd
3 changed files with 6 additions and 5 deletions
@@ -119,9 +119,10 @@ class IrModuleDeserializerWithBuiltIns(
}
override operator fun contains(idSig: IdSignature): Boolean {
if (idSig in irBuiltInsMap) return true
val topLevel = idSig.topLevelSignature()
if (topLevel in irBuiltInsMap) return true
return checkIsFunctionInterface(idSig) || idSig in delegate
return checkIsFunctionInterface(topLevel) || idSig in delegate
}
override fun referenceSimpleFunctionByLocalSignature(file: IrFile, idSignature: IdSignature) : IrSimpleFunctionSymbol =
@@ -74,6 +74,7 @@ class IcFileDeserializer(
originalSymbolDeserializer,
linker.fakeOverrideBuilder.platformSpecificClassFilter,
linker.fakeOverrideBuilder,
allowRedeclaration = true,
compatibilityMode = CompatibilityMode.CURRENT
)
@@ -81,9 +82,8 @@ class IcFileDeserializer(
// TODO: reference lowered declarations cross-module
if (kind == BinarySymbolData.SymbolKind.FILE_SYMBOL) return file.symbol
val topLevelSig = idSig.topLevelSignature()
val actualModuleDeserializer =
moduleDeserializer.findModuleDeserializerForTopLevelId(topLevelSig)
moduleDeserializer.findModuleDeserializerForTopLevelId(idSig)
?: handleNoModuleDeserializerFound(idSig, moduleDeserializer.moduleDescriptor, moduleDeserializer.moduleDependencies)
return actualModuleDeserializer.deserializeIrSymbol(idSig, kind)
@@ -90,7 +90,7 @@ class IcModuleDeserializer(
?: error("No deserializer for file $file in module ${moduleDescriptor.name}")
// TODO: fix to topLevel checker
override fun contains(idSig: IdSignature): Boolean = idSig in moduleReversedFileIndex || idSig in icModuleReversedFileIndex
override fun contains(idSig: IdSignature): Boolean = idSig.topLevelSignature() in moduleReversedFileIndex || idSig in icModuleReversedFileIndex
override fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol {
assert(idSig.isPubliclyVisible)