Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.ir.symbols.UnsafeDuringIrConstructionAPI
import org.jetbrains.kotlin.ir.util.DumpIrTreeOptions
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.FqNameUnsafe
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.ir.backend.js.getSerializedData
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.JsManglerIr
import org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir.collectJsExportNames
import org.jetbrains.kotlin.ir.types.IrTypeSystemContextImpl
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.js.config.incrementalDataProvider
import org.jetbrains.kotlin.js.config.wasmCompilation
import org.jetbrains.kotlin.library.isJsStdlib
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder
import org.jetbrains.kotlin.test.directives.LanguageSettingsDirectives
import org.jetbrains.kotlin.test.directives.model.SimpleDirective
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,6 @@ import org.jetbrains.kotlin.ir.validation.validateIr
import org.jetbrains.kotlin.ir.validation.withBasicChecks
import org.jetbrains.kotlin.ir.validation.withVarargChecks
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.utils.addToStdlib.applyIf
import org.jetbrains.kotlin.utils.addToStdlib.runIf
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,6 @@ import org.jetbrains.kotlin.ir.util.transformFlat
import org.jetbrains.kotlin.ir.util.transformSubsetFlat
import org.jetbrains.kotlin.ir.visitors.IrVisitor
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments

interface ModuleLoweringPass {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ private fun IrBody.move(
// Might be an inline lambda argument; if the function has already been moved out, visit it explicitly.
if (expression.origin == IrStatementOrigin.LAMBDA || expression.origin == IrStatementOrigin.ANONYMOUS_FUNCTION)
if (expression.statements.lastOrNull() is IrFunctionReference && expression.statements.none { it is IrFunction })
(expression.statements.last() as IrFunctionReference).symbol.owner.transformChildrenVoid()
(expression.statements.last() as IrFunctionReference).symbol.owner.transformChildrenVoid(this)
return super.visitBlock(expression)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ abstract class AbstractValueRemapper : IrElementTransformerVoid() {
}

override fun visitSetValue(expression: IrSetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
val newValue = remapValue(expression.symbol) ?: return expression
assert(newValue.owner.isAssignable)
return expression.run { IrSetValueImpl(startOffset, endOffset, type, newValue, value, origin) }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.ir.types.classOrFail
import org.jetbrains.kotlin.ir.types.typeOrNull
import org.jetbrains.kotlin.ir.types.typeWith
import org.jetbrains.kotlin.ir.util.selectSAMOverriddenFunction
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.addToStdlib.shouldNotBeCalled

abstract class AbstractPropertyReferenceLowering<C : CommonBackendContext>(val context: C) : FileLoweringPass {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.ir.symbols.IrReturnableBlockSymbol
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.addToStdlib.assignFrom


Expand Down Expand Up @@ -255,7 +254,7 @@ abstract class AbstractValueUsageTransformer(
}

override fun visitStringConcatenation(expression: IrStringConcatenation): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression is IrStringConcatenationImpl) {
for ((i, arg) in expression.arguments.withIndex()) {
expression.arguments[i] = arg.useAs(irBuiltIns.anyNType)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.classOrNull
import org.jetbrains.kotlin.ir.types.isArray
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.filterIsInstanceAnd

Expand Down Expand Up @@ -114,7 +113,7 @@ abstract class AnnotationImplementationTransformer(val context: CommonBackendCon
ctor.symbol,
)
moveValueArgumentsUsingNames(expression, newCall)
newCall.transformChildrenVoid() // for annotations in annotations
newCall.transformChildrenVoid(this) // for annotations in annotations
return newCall
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.util.OperatorNameConventions

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.ir.types.makeNullable
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.util.OperatorNameConventions
import org.jetbrains.kotlin.utils.addToStdlib.assignFrom
import org.jetbrains.kotlin.utils.memoryOptimizedPlus
Expand Down Expand Up @@ -289,7 +288,7 @@ open class DefaultParameterInjector<TContext : CommonBackendContext>(
isStatic(declaration) && declaration.parentAsClass.isMultiFieldValueClass && declaration is IrSimpleFunction

override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
return visitFunctionAccessExpression(expression) {
with(expression) {
IrDelegatingConstructorCallImpl(
Expand All @@ -301,7 +300,7 @@ open class DefaultParameterInjector<TContext : CommonBackendContext>(
}

override fun visitConstructorCall(expression: IrConstructorCall): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
return visitFunctionAccessExpression(expression) {
with(expression) {
IrConstructorCallImpl.fromSymbolOwner(
Expand All @@ -316,7 +315,7 @@ open class DefaultParameterInjector<TContext : CommonBackendContext>(
}

override fun visitEnumConstructorCall(expression: IrEnumConstructorCall): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
return visitFunctionAccessExpression(expression) {
with(expression) {
IrEnumConstructorCallImpl(
Expand All @@ -328,7 +327,7 @@ open class DefaultParameterInjector<TContext : CommonBackendContext>(
}

override fun visitCall(expression: IrCall): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
val declaration = expression.symbol.owner
val typeParametersToRemove = if (needsTypeArgumentOffset(declaration)) declaration.parentAsClass.typeParameters.size else 0
with(expression) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.util.setDeclarationsParent
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid

private val KPROPERTIES_FOR_DELEGATION by IrDeclarationOriginImpl.Regular

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ open class EnumWhenLowering(protected open val context: CommonBackendContext) :
}

override fun visitBlock(expression: IrBlock): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)

// NB: See BranchingExpressionGenerator to get insight about `when` block translation to IR.
if (expression.origin != IrStatementOrigin.WHEN) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ open class ExpectDeclarationRemover(val symbolTable: ReferenceSymbolTable, priva
.deepCopyWithSymbols(actualFunction) { IrTypeParameterRemapper(expectActualTypeParametersMap) }
.transform(object : IrElementTransformerVoid() {
override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
return expression.remapSymbolParent(
classRemapper = { symbolTable.descriptorExtension.referenceClass(it.descriptor.findActualForExpect() as ClassDescriptor).owner },
functionRemapper = { symbolTable.referenceFunction(it.descriptor.findActualForExpect() as FunctionDescriptor).owner }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,6 @@ import org.jetbrains.kotlin.ir.declarations.createBlockBody
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid

/**
* Replaces [IrExpressionBody] with [IrBlockBody] returning this expression.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.isNothing
import org.jetbrains.kotlin.ir.types.isUnit
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name

val FINALLY_EXPRESSION by IrStatementOriginImpl
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,6 @@ import org.jetbrains.kotlin.ir.util.isTopLevelInPackage
import org.jetbrains.kotlin.ir.util.isUnsigned
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.util.OperatorNameConventions
import kotlin.math.max
import kotlin.math.min
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.util.isNullable
import org.jetbrains.kotlin.ir.util.isTrivial
import org.jetbrains.kotlin.ir.util.shallowCopy
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid

/**
* Simplifies `?.` and `?:` operator chains.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
import org.jetbrains.kotlin.ir.util.render
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.IrVisitorVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid

/**
* Merges init block and field initializers into constructors.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.ir.types.extractTypeParameters
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.assignFrom
import kotlin.collections.get
Expand Down Expand Up @@ -103,7 +102,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
if (isMemberFieldSet) {
setMemberField = expression.deepCopyWithSymbols(irConstructor)
}
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (isMemberFieldSet) {
return builder.irBlock {
if (!expression.value.isPure(true)) {
Expand All @@ -119,14 +118,14 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
}

override fun visitGetField(expression: IrGetField): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression.symbol.owner.parent == klass)
return builder.irGet(initFunction.parameters.single())
return expression
}

override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression.symbol.owner.parent == klass)
return unboxedInlineClassValue()
if (expression.symbol == origParameterSymbol)
Expand All @@ -135,7 +134,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
}

override fun visitSetValue(expression: IrSetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression.symbol == origParameterSymbol)
return builder.irSet(initFunction.parameters.single(), expression.value)
return expression
Expand Down Expand Up @@ -177,7 +176,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
(constructorBody as IrBlockBody).statements.forEach { statement ->
+statement.transformStatement(object : IrElementTransformerVoid() {
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
// Static function for delegating constructors return unboxed instance of inline class
expression.type = irClass.defaultType
return irBlock(expression) {
Expand All @@ -190,7 +189,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
}

override fun visitGetValue(expression: IrGetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression.symbol == irClass.thisReceiver?.symbol) {
return irGet(thisVar)
}
Expand All @@ -200,7 +199,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
}

override fun visitSetValue(expression: IrSetValue): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
parameterMapping[expression.symbol]?.let { return irSet(it.symbol, expression.value) }
return expression
}
Expand All @@ -213,7 +212,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont
}

override fun visitReturn(expression: IrReturn): IrExpression {
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
if (expression.returnTargetSymbol == irConstructor.symbol) {
return irReturn(irBlock(expression.startOffset, expression.endOffset) {
+expression.value
Expand Down Expand Up @@ -264,7 +263,7 @@ open class InlineClassDeclarationLowering(private val context: CommonBackendCont

override fun visitSetValue(expression: IrSetValue): IrExpression {
val valueDeclaration = expression.symbol.owner as? IrValueParameter ?: return super.visitSetValue(expression)
expression.transformChildrenVoid()
expression.transformChildrenVoid(this)
return context.createIrBuilder(staticMethod.symbol).irSet(
when (valueDeclaration) {
in function.parameters -> staticMethod.parameters[valueDeclaration.indexInParameters].symbol
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.ir.util.isLocal
import org.jetbrains.kotlin.ir.util.parentAsClass
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.utils.addToStdlib.assignFrom

interface InnerClassesSupport {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.IrTransformer
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid

/**
* Transforms `assert(...) {...}` call into
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.isNothing
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid

/**
* Throws a proper exception for calls returning value of type [Nothing].
Expand Down
Loading