[JS IR BE] Fix unbound symbols after deserialization
* restore broken psi2ir invariant
This commit is contained in:
@@ -138,7 +138,7 @@ fun compile(
|
||||
val psi2IrContext = psi2IrTranslator.createGeneratorContext(moduleDescriptor, analysisResult.bindingContext, symbolTable)
|
||||
val irBuiltIns = psi2IrContext.irBuiltIns
|
||||
|
||||
var deserializer = JsIrLinker(moduleDescriptor, logggg, irBuiltIns, symbolTable)
|
||||
val deserializer = JsIrLinker(moduleDescriptor, logggg, irBuiltIns, symbolTable)
|
||||
|
||||
val deserializedModuleFragments = sortedImmediateDependencies.map {
|
||||
val moduleFile = File(it.klibPath, moduleHeaderFileName)
|
||||
|
||||
+13
-2
@@ -10,8 +10,6 @@ import org.jetbrains.kotlin.backend.common.library.CombinedIrFileReader
|
||||
import org.jetbrains.kotlin.backend.common.library.DeclarationId
|
||||
import org.jetbrains.kotlin.backend.common.serialization.*
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.backend.common.serialization.knownBuiltins
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
|
||||
@@ -49,4 +47,17 @@ class JsIrLinker(
|
||||
moduleToReaderMap[moduleDescriptor] = CombinedIrFileReader(irFile)
|
||||
return deserializeIrModuleHeader(moduleDescriptor, byteArray, deserializationStrategy)
|
||||
}
|
||||
|
||||
override fun declareForwardDeclarations() {
|
||||
// since for `knownBuiltIns` such as FunctionN it is possible to have unbound symbols after deserialization
|
||||
// reference them through out lazy symbol table
|
||||
with(symbolTable) {
|
||||
ArrayList(unboundClasses).forEach { lazyWrapper.referenceClass(it.descriptor) }
|
||||
ArrayList(unboundConstructors).forEach { lazyWrapper.referenceConstructor(it.descriptor) }
|
||||
ArrayList(unboundEnumEntries).forEach { lazyWrapper.referenceEnumEntry(it.descriptor) }
|
||||
ArrayList(unboundFields).forEach { lazyWrapper.referenceField(it.descriptor) }
|
||||
ArrayList(unboundSimpleFunctions).forEach { lazyWrapper.referenceSimpleFunction(it.descriptor) }
|
||||
ArrayList(unboundTypeParameters).forEach { lazyWrapper.referenceTypeParameter(it.descriptor) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,8 +60,6 @@ class ExternalDependenciesGenerator(
|
||||
|
||||
deserializer?.declareForwardDeclarations()
|
||||
|
||||
if (deserializer != null) return
|
||||
|
||||
assertEmpty(symbolTable.unboundClasses, "classes")
|
||||
assertEmpty(symbolTable.unboundConstructors, "constructors")
|
||||
assertEmpty(symbolTable.unboundEnumEntries, "enum entries")
|
||||
|
||||
Reference in New Issue
Block a user