[JS IR IC] assert cross-file tag are not null and fix tests

This commit is contained in:
Anton Bannykh
2021-11-25 09:35:00 +03:00
committed by TeamCityServer
parent 33cd7e982c
commit 2259c6f75d
5 changed files with 33 additions and 24 deletions
@@ -208,7 +208,7 @@ class SyntheticAccessorLowering(private val context: CommonBackendContext) : Bod
if (candidates.isEmpty()) return
val fileHash = irFile.fileEntry.name.hashCode().toUInt().toString(Character.MAX_RADIX)
val accessors = candidates.map { it.createAccessor(fileHash) }
val accessors = candidates.map { context.irFactory.stageController.restrictTo(it) { it.createAccessor(fileHash) } }
val candidatesMap = candidates.zip(accessors).toMap()
irFile.transformChildrenVoid(CallSiteTransformer(candidatesMap))
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.backend.js.utils.serialization.JsIrAstSerializer
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.types.classifierOrFail
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.js.backend.JsToStringGenerationVisitor
import org.jetbrains.kotlin.js.backend.NoOpSourceLocationConsumer
import org.jetbrains.kotlin.js.backend.SourceLocationConsumer
@@ -221,24 +222,33 @@ class IrModuleToJsTransformerTmp(
result.importedModules += nameGenerator.importedModules
fun computeTag(declaration: IrDeclaration): String {
return (backendContext.irFactory as IdSignatureRetriever).declarationSignature(declaration)?.toString()
?: System.identityHashCode(declaration).toString()
// TODO ?: error("signature for ${declaration.render()} not found")
val definitionSet = file.declarations.toSet()
fun computeTag(declaration: IrDeclaration): String? {
val tag = (backendContext.irFactory as IdSignatureRetriever).declarationSignature(declaration)?.toString()
if (tag == null && declaration !in definitionSet) {
error("signature for ${declaration.render()} not found")
}
return tag
}
nameGenerator.nameMap.entries.forEach { (declaration, name) ->
val tag = computeTag(declaration)
result.nameBindings[tag] = name
computeTag(declaration)?.let { tag ->
result.nameBindings[tag] = name
}
}
nameGenerator.imports.entries.forEach { (declaration, importExpression) ->
val tag = computeTag(declaration)
val tag = computeTag(declaration) ?: error("No tag for imported declaration ${declaration.render()}")
result.imports[tag] = importExpression
}
file.declarations.forEach {
result.definitions += computeTag(it)
computeTag(it)?.let { tag ->
result.definitions += tag
}
}
return result
@@ -488,7 +488,7 @@ open class SymbolTable(
override fun referenceClassFromLinker(sig: IdSignature): IrClassSymbol =
classSymbolTable.run {
if (sig.isPubliclyVisible) referenced(sig, false) { IrClassPublicSymbolImpl(sig) }
else IrClassSymbolImpl()
else IrClassSymbolImpl(signature = sig)
}
val unboundClasses: Set<IrClassSymbol> get() = classSymbolTable.unboundSymbols
@@ -841,7 +841,7 @@ open class SymbolTable(
override fun referenceSimpleFunctionFromLinker(sig: IdSignature): IrSimpleFunctionSymbol {
return simpleFunctionSymbolTable.run {
if (sig.isPubliclyVisible) referenced(sig, false) { IrSimpleFunctionPublicSymbolImpl(sig) }
else IrSimpleFunctionSymbolImpl()
else IrSimpleFunctionSymbolImpl(signature = sig)
}
}
@@ -34,18 +34,18 @@ class JsIrRecompiledArtifactsIdentityHandler(testServices: TestServices) : JsBin
@Suppress("UNUSED_PARAMETER")
private fun compareIrArtifacts(originalArtifact: Js.JsIrArtifact, incrementalArtifact: Js.JsIrArtifact) {
// TODO: enable asserts when binary stability is achieved
// val oldBinaryAsts = originalArtifact.icCache!!
// val newBinaryAsts = incrementalArtifact.icCache!!
//
// for (file in newBinaryAsts.keys) {
// val oldBinaryAst = oldBinaryAsts[file]
// val newBinaryAst = newBinaryAsts[file]
//
// testServices.assertions.assertTrue(oldBinaryAst.contentEquals(newBinaryAst)) {
// "Binary AST changed after recompilation for file $file"
// }
// }
//
val oldBinaryAsts = originalArtifact.icCache!!
val newBinaryAsts = incrementalArtifact.icCache!!
for (file in newBinaryAsts.keys) {
val oldBinaryAst = oldBinaryAsts[file]
val newBinaryAst = newBinaryAsts[file]
testServices.assertions.assertTrue(oldBinaryAst.contentEquals(newBinaryAst)) {
"Binary AST changed after recompilation for file $file"
}
}
val originalOutput = FileUtil.loadFile(originalArtifact.outputFile)
val recompiledOutput = FileUtil.loadFile(incrementalArtifact.outputFile)
testServices.assertions.assertEquals(originalOutput, recompiledOutput) { "Output file changed after recompilation" }
@@ -1,4 +1,3 @@
// SKIP_IR_INCREMENTAL_CHECKS
// EXPECTED_REACHABLE_NODES: 1281
// FILE: 1.kt