[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 { 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 = override fun referenceSimpleFunctionByLocalSignature(file: IrFile, idSignature: IdSignature) : IrSimpleFunctionSymbol =
@@ -74,6 +74,7 @@ class IcFileDeserializer(
originalSymbolDeserializer, originalSymbolDeserializer,
linker.fakeOverrideBuilder.platformSpecificClassFilter, linker.fakeOverrideBuilder.platformSpecificClassFilter,
linker.fakeOverrideBuilder, linker.fakeOverrideBuilder,
allowRedeclaration = true,
compatibilityMode = CompatibilityMode.CURRENT compatibilityMode = CompatibilityMode.CURRENT
) )
@@ -81,9 +82,8 @@ class IcFileDeserializer(
// TODO: reference lowered declarations cross-module // TODO: reference lowered declarations cross-module
if (kind == BinarySymbolData.SymbolKind.FILE_SYMBOL) return file.symbol if (kind == BinarySymbolData.SymbolKind.FILE_SYMBOL) return file.symbol
val topLevelSig = idSig.topLevelSignature()
val actualModuleDeserializer = val actualModuleDeserializer =
moduleDeserializer.findModuleDeserializerForTopLevelId(topLevelSig) moduleDeserializer.findModuleDeserializerForTopLevelId(idSig)
?: handleNoModuleDeserializerFound(idSig, moduleDeserializer.moduleDescriptor, moduleDeserializer.moduleDependencies) ?: handleNoModuleDeserializerFound(idSig, moduleDeserializer.moduleDescriptor, moduleDeserializer.moduleDependencies)
return actualModuleDeserializer.deserializeIrSymbol(idSig, kind) return actualModuleDeserializer.deserializeIrSymbol(idSig, kind)
@@ -90,7 +90,7 @@ class IcModuleDeserializer(
?: error("No deserializer for file $file in module ${moduleDescriptor.name}") ?: error("No deserializer for file $file in module ${moduleDescriptor.name}")
// TODO: fix to topLevel checker // 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 { override fun deserializeIrSymbol(idSig: IdSignature, symbolKind: BinarySymbolData.SymbolKind): IrSymbol {
assert(idSig.isPubliclyVisible) assert(idSig.isPubliclyVisible)