backend: Use symbols for assertions processing
This commit is contained in:
+4
@@ -67,6 +67,10 @@ open class Symbols<out T: CommonBackendContext>(val context: T, private val symb
|
||||
Name.identifier("Iterator"), NoLookupLocation.FROM_BACKEND
|
||||
) as ClassDescriptor)
|
||||
|
||||
val asserts = builtInsPackage("kotlin")
|
||||
.getContributedFunctions(Name.identifier("assert"), NoLookupLocation.FROM_BACKEND)
|
||||
.map { symbolTable.referenceFunction(it) }
|
||||
|
||||
private fun progression(name: String) = symbolTable.referenceClass(
|
||||
builtInsPackage("kotlin", "ranges").getContributedClassifier(
|
||||
Name.identifier(name), NoLookupLocation.FROM_BACKEND
|
||||
|
||||
+5
-4
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.atMostOne
|
||||
import org.jetbrains.kotlin.backend.konan.Context
|
||||
import org.jetbrains.kotlin.backend.konan.KonanConfigKeys.Companion.ENABLE_ASSERTIONS
|
||||
import org.jetbrains.kotlin.backend.konan.isStdlib
|
||||
import org.jetbrains.kotlin.backend.konan.isValueType
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltinOperatorDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
@@ -31,6 +32,7 @@ import org.jetbrains.kotlin.ir.util.type
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.module
|
||||
import org.jetbrains.kotlin.types.typeUtil.isNothing
|
||||
import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf
|
||||
import org.jetbrains.kotlin.types.typeUtil.isUnit
|
||||
@@ -52,17 +54,16 @@ private class BuiltinOperatorTransformer(val context: Context) : IrElementTransf
|
||||
|
||||
private val builtIns = context.builtIns
|
||||
private val irBuiltins = context.irModule!!.irBuiltins
|
||||
private val enableAssertions = context.config.configuration.getBoolean(ENABLE_ASSERTIONS)
|
||||
|
||||
private val assertFqName = "kotlin.assert"
|
||||
private val assertSymbols = context.ir.symbols.asserts
|
||||
|
||||
override fun visitCall(expression: IrCall): IrExpression {
|
||||
expression.transformChildrenVoid(this)
|
||||
val descriptor = expression.descriptor
|
||||
|
||||
// TODO: use stdlib assert's descriptors instead of fqName
|
||||
// Replace assert() call with an empty composite if assertions are not enabled.
|
||||
if (descriptor.fqNameSafe.asString() == assertFqName &&
|
||||
!context.config.configuration.getBoolean(ENABLE_ASSERTIONS)) {
|
||||
if (!enableAssertions && expression.symbol in assertSymbols) {
|
||||
assert(expression.type.isUnit())
|
||||
return IrCompositeImpl(expression.startOffset, expression.endOffset, expression.type)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user