Implement basic proxy for Common state
For now proxy works only for Any class methods and only for Common state.
This commit is contained in:
committed by
TeamCityServer
parent
3c0c8d97cc
commit
4c75576414
@@ -39,7 +39,7 @@ fun generateMap(): String {
|
||||
p.println(File("license/COPYRIGHT.txt").readText())
|
||||
p.println("package org.jetbrains.kotlin.ir.interpreter.builtins")
|
||||
p.println()
|
||||
p.println("import org.jetbrains.kotlin.ir.interpreter.internalName")
|
||||
p.println("import org.jetbrains.kotlin.ir.interpreter.IrInterpreter")
|
||||
p.println("import org.jetbrains.kotlin.ir.interpreter.state.*")
|
||||
p.println()
|
||||
p.println("/** This file is generated by org.jetbrains.kotlin.backend.common.interpreter.builtins.GenerateBuiltInsMap.generateMap(). DO NOT MODIFY MANUALLY */")
|
||||
@@ -68,19 +68,6 @@ fun generateMap(): String {
|
||||
p.println(")")
|
||||
p.println()
|
||||
|
||||
p.println(
|
||||
"""
|
||||
private fun Any.defaultToString(): String {
|
||||
return when (this) {
|
||||
is Lambda -> this.toString()
|
||||
is State -> "${'$'}{this.irClass.internalName()}@" + 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()
|
||||
}
|
||||
|
||||
@@ -150,10 +137,7 @@ private fun generateUnaryBody(unaryOperationsMap: Map<CallableDescriptor, Pair<S
|
||||
return unaryOperationsMap.entries.joinToString(separator = ",\n", postfix = ",\n") { (function, parameters) ->
|
||||
val methodName = "${function.name}"
|
||||
val parentheses = if (function is FunctionDescriptor) "()" else ""
|
||||
val body =
|
||||
if (methodName == "toString" && parameters.first == "<Any>") "a.defaultToString()"
|
||||
else "a.$methodName$parentheses"
|
||||
" unaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a -> $body }"
|
||||
" unaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a -> a.$methodName$parentheses }"
|
||||
} +
|
||||
" unaryOperation<Any?>(\"${irNullCheck.name}\", \"${irNullCheck.valueParameters.first().type.originalKotlinType}\") { a -> a!! },\n" +
|
||||
" unaryOperation<ExceptionState>(\"message\", \"Throwable\") { a -> a.getMessage() },\n" +
|
||||
@@ -169,7 +153,11 @@ private fun generateBinaryBody(
|
||||
} + binaryIrOperationsMap.entries.joinToString(separator = ",\n") { (function, parameters) ->
|
||||
val methodName = "${function.name}"
|
||||
val methodSymbol = getIrMethodSymbolByName(methodName)
|
||||
" binaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a, b -> a $methodSymbol b }"
|
||||
val body = when (methodName) {
|
||||
IrBuiltIns.OperatorNames.EQEQEQ -> "if (a is IrInterpreter.Proxy && b is IrInterpreter.Proxy) a.state === b.state else a === b"
|
||||
else -> "a $methodSymbol b"
|
||||
}
|
||||
" binaryOperation${parameters.first}(\"$methodName\", ${parameters.second}) { a, b -> $body }"
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user