Add not null (!!) operator in ir builtins map

This commit is contained in:
Ivan Kylchik
2020-06-10 19:18:10 +03:00
parent bb119280be
commit 5209f4a9c0
2 changed files with 7 additions and 5 deletions
@@ -112,7 +112,8 @@ val unaryFunctions = mapOf<CompileTimeFunction, Function1<Any?, Any?>>(
unaryOperation<LongArray>("size", "LongArray") { a -> a.size },
unaryOperation<LongArray>("iterator", "LongArray") { a -> a.iterator() },
unaryOperation<DoubleArray>("size", "DoubleArray") { a -> a.size },
unaryOperation<DoubleArray>("iterator", "DoubleArray") { a -> a.iterator() }
unaryOperation<DoubleArray>("iterator", "DoubleArray") { a -> a.iterator() },
unaryOperation<Any?>("CHECK_NOT_NULL", "T0?") { a -> a!! }
)
val binaryFunctions = mapOf<CompileTimeFunction, Function2<Any?, Any?, Any?>>(
+5 -4
View File
@@ -51,7 +51,7 @@ fun generateMap(): String {
val ternaryOperationsMap = mutableMapOf<CallableDescriptor, Pair<String, String>>()
val builtIns = DefaultBuiltIns.Instance
//save common built ins
//save common builtins
@Suppress("UNCHECKED_CAST")
val allPrimitiveTypes = builtIns.builtInsPackageScope.getContributedDescriptors()
.filter { it is ClassDescriptor && KotlinBuiltIns.isPrimitiveType(it.defaultType) } as List<ClassDescriptor>
@@ -86,9 +86,10 @@ fun generateMap(): String {
}
}
//save ir built ins
//save ir builtins
val binaryIrOperationsMap = mutableMapOf<CallableDescriptor, Pair<String, String>>()
val irBuiltIns = getIrBuiltIns()
val irNullCheck = irBuiltIns.checkNotNullSymbol.descriptor
val irFunSymbols =
(irBuiltIns.lessFunByOperandType.values +
irBuiltIns.lessOrEqualFunByOperandType.values +
@@ -113,11 +114,11 @@ fun generateMap(): String {
//save to file
p.println("val unaryFunctions = mapOf<CompileTimeFunction, Function1<Any?, Any?>>(")
val unaryBody = unaryOperationsMap.entries.joinToString(",\n") { (function, parameters) ->
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 }"
}
} + " unaryOperation<Any?>(\"${irNullCheck.name}\", \"${irNullCheck.valueParameters.first().type}\") { a -> a!! }"
p.println(unaryBody)
p.println(")")
p.println()