Add all methods from Any class in ir builtins map

This commit is contained in:
Ivan Kylchik
2020-01-30 17:35:59 +03:00
parent d03937cdb6
commit 4345294ac1
3 changed files with 42 additions and 44 deletions
+9 -4
View File
@@ -39,10 +39,10 @@ fun generateMap(): String {
val sb = StringBuilder()
val p = Printer(sb)
p.println(File("license/COPYRIGHT.txt").readText())
p.println("@file:Suppress(\"DEPRECATION_ERROR\")")
p.println()
p.println("package org.jetbrains.kotlin.backend.common.interpreter.builtins")
p.println()
p.println("import org.jetbrains.kotlin.backend.common.interpreter.stack.State")
p.println()
p.println("/** This file is generated by org.jetbrains.kotlin.backend.common.interpreter.builtins.GenerateBuiltInsMap.generateMap(). DO NOT MODIFY MANUALLY */")
p.println()
@@ -58,10 +58,11 @@ fun generateMap(): String {
val arrays = listOf(builtIns.array) + PrimitiveType.values().map { builtIns.getPrimitiveArrayClassDescriptor(it) }
for (descriptor in allPrimitiveTypes + builtIns.string + arrays) {
for (descriptor in allPrimitiveTypes + builtIns.string + arrays + builtIns.any) {
val typeParameters = descriptor.typeConstructor.parameters.map { it.name.asString() }
val typeParametersAsAny = if (typeParameters.isNotEmpty()) typeParameters.joinToString(prefix = "<", postfix = ">") { "Any?" } else ""
val descriptorType = descriptor.defaultType
@Suppress("UNCHECKED_CAST")
val functions = descriptor.getMemberScope(listOf()).getContributedDescriptors()
.filter {
@@ -117,7 +118,11 @@ fun generateMap(): String {
val unaryBody = unaryOperationsMap.entries.joinToString(",\n", postfix = ",\n") { (function, parameters) ->
val methodName = "${function.name}"
val parentheses = if (function is FunctionDescriptor) "()" else ""
" unaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a -> a.$methodName$parentheses }"
val body = if (methodName == "toString" && parameters.first == "<Any>")
"\n\t\tif (a is State) \"\${a.irClass.name}@\" + System.identityHashCode(a).toString(16).padStart(8) else a.toString()\n\t"
else
"a.$methodName$parentheses "
" unaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a -> $body}"
} + " unaryOperation<Any?>(\"${irNullCheck.name}\", \"${irNullCheck.valueParameters.first().type}\") { a -> a!! }"
p.println(unaryBody)
p.println(")")