diff --git a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt index 0dbf5fa4199..81f5ac2e4f6 100644 --- a/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt +++ b/compiler/ir/serialization.js/src/org/jetbrains/kotlin/ir/backend/js/ic/CacheAccessors.kt @@ -14,6 +14,7 @@ import java.security.MessageDigest private const val inlineGraphFile = "inline.graph" private const val inlineFunctionsFile = "inline.functions" private const val fileInfoFile = "file.info" +private const val fileBinaryAst = "binary.ast" typealias Hash = Long // Any long hash typealias FlatHash = Hash // Hash of inline function without its underlying inline call tree @@ -38,7 +39,7 @@ interface PersistentCacheProvider { fun allInlineHashes(sigResolver: (String, Int) -> IdSignature): Map - fun binaryAst(path: String): ByteArray + fun binaryAst(path: String): ByteArray? companion object { val EMPTY = object : PersistentCacheProvider { @@ -143,8 +144,11 @@ class PersistentCacheProviderImpl(private val cachePath: String) : PersistentCac return result } - override fun binaryAst(path: String): ByteArray { - TODO("Not yet implemented") + override fun binaryAst(path: String): ByteArray? { + val cachePath = path.fileDir + val astFile = File(cachePath, fileBinaryAst) + if (astFile.exists()) return astFile.readBytes() + return null } } @@ -248,11 +252,17 @@ class PersistentCacheConsumerImpl(private val cachePath: String) : PersistentCac File(fileDir, inlineFunctionsFile).delete() File(fileDir, inlineGraphFile).delete() File(fileDir, fileInfoFile).delete() + File(fileDir, fileBinaryAst).delete() // TODO: once per-file invalidation is integrated into IC delete the whole directory including PIR parts //fileDir.deleteRecursively() } override fun commitBinaryAst(path: String, astData: ByteArray) { - TODO("Not yet implemented") + val fileId = createFileCacheId(path) + val cacheDir = File(File(cachePath), fileId) + val astFile = File(cacheDir, fileBinaryAst) + if (astFile.exists()) astFile.delete() + astFile.createNewFile() + astFile.writeBytes(astData) } }