Add methods for message and clause from Throwable in ir builtins map
This commit is contained in:
@@ -41,7 +41,7 @@ fun generateMap(): String {
|
||||
p.println(File("license/COPYRIGHT.txt").readText())
|
||||
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("import org.jetbrains.kotlin.backend.common.interpreter.stack.*")
|
||||
p.println()
|
||||
p.println("/** This file is generated by org.jetbrains.kotlin.backend.common.interpreter.builtins.GenerateBuiltInsMap.generateMap(). DO NOT MODIFY MANUALLY */")
|
||||
p.println()
|
||||
@@ -52,11 +52,8 @@ fun generateMap(): String {
|
||||
val builtIns = DefaultBuiltIns.Instance
|
||||
|
||||
//save common builtins
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
val allPrimitiveTypes = builtIns.builtInsPackageScope.getContributedDescriptors()
|
||||
.filter { it is ClassDescriptor && KotlinBuiltIns.isPrimitiveType(it.defaultType) } as List<ClassDescriptor>
|
||||
|
||||
val arrays = listOf(builtIns.array) + PrimitiveType.values().map { builtIns.getPrimitiveArrayClassDescriptor(it) }
|
||||
val allPrimitiveTypes = PrimitiveType.values().map { builtIns.getBuiltInClassByFqName(it.typeFqName) }
|
||||
val arrays = PrimitiveType.values().map { builtIns.getPrimitiveArrayClassDescriptor(it) } + builtIns.array
|
||||
|
||||
for (descriptor in allPrimitiveTypes + builtIns.string + arrays + builtIns.any) {
|
||||
val typeParameters = descriptor.typeConstructor.parameters.map { it.name.asString() }
|
||||
@@ -118,12 +115,13 @@ fun generateMap(): String {
|
||||
val unaryBody = unaryOperationsMap.entries.joinToString(",\n", postfix = ",\n") { (function, parameters) ->
|
||||
val methodName = "${function.name}"
|
||||
val parentheses = if (function is FunctionDescriptor) "()" else ""
|
||||
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!! }"
|
||||
val body =
|
||||
if (methodName == "toString" && parameters.first == "<Any>") "a.defaultToString()"
|
||||
else "a.$methodName$parentheses"
|
||||
" unaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a -> $body }"
|
||||
} + " unaryOperation<Any?>(\"${irNullCheck.name}\", \"${irNullCheck.valueParameters.first().type}\") { a -> a!! },\n" +
|
||||
" unaryOperation<ExceptionState>(\"<get-message>\", \"Throwable\") { a -> a.getMessage() },\n" +
|
||||
" unaryOperation<ExceptionState>(\"<get-cause>\", \"Throwable\") { a -> a.getCause() }"
|
||||
p.println(unaryBody)
|
||||
p.println(")")
|
||||
p.println()
|
||||
@@ -150,6 +148,7 @@ fun generateMap(): String {
|
||||
}
|
||||
p.println(binaryBody)
|
||||
p.println(")")
|
||||
p.println()
|
||||
|
||||
p.println("val ternaryFunctions = mapOf<CompileTimeFunction, Function3<Any?, Any?, Any?, Any?>>(")
|
||||
val ternaryBody = ternaryOperationsMap.entries.joinToString(",\n") { (function, parameters) ->
|
||||
@@ -160,6 +159,18 @@ fun generateMap(): String {
|
||||
p.println(")")
|
||||
p.println()
|
||||
|
||||
p.println(
|
||||
"""
|
||||
private fun Any.defaultToString(): String {
|
||||
return when (this) {
|
||||
is State -> "${'$'}{this.irClass.name}@" + System.identityHashCode(this).toString(16).padStart(8, '0')
|
||||
else -> this.toString().replaceAfter("@", System.identityHashCode(this).toString(16).padStart(8, '0'))
|
||||
}
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
p.println()
|
||||
|
||||
return sb.toString()
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user