KT-16554 Local function with default arguments have no IR elements for them
This commit is contained in:
+14
-10
@@ -40,8 +40,12 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
|||||||
irFun.body = BodyGenerator(lambdaDescriptor, statementGenerator.context).generateLambdaBody(ktFun)
|
irFun.body = BodyGenerator(lambdaDescriptor, statementGenerator.context).generateLambdaBody(ktFun)
|
||||||
irBlock.statements.add(irFun)
|
irBlock.statements.add(irFun)
|
||||||
|
|
||||||
irBlock.statements.add(IrCallableReferenceImpl(ktLambda.startOffset, ktLambda.endOffset, lambdaExpressionType,
|
irBlock.statements.add(
|
||||||
lambdaDescriptor, null, IrStatementOrigin.LAMBDA))
|
IrCallableReferenceImpl(
|
||||||
|
ktLambda.startOffset, ktLambda.endOffset, lambdaExpressionType,
|
||||||
|
lambdaDescriptor, null, IrStatementOrigin.LAMBDA
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
return irBlock
|
return irBlock
|
||||||
}
|
}
|
||||||
@@ -58,17 +62,17 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
|||||||
val irFun = generateFunctionDeclaration(ktFun)
|
val irFun = generateFunctionDeclaration(ktFun)
|
||||||
irBlock.statements.add(irFun)
|
irBlock.statements.add(irFun)
|
||||||
|
|
||||||
irBlock.statements.add(IrCallableReferenceImpl(ktFun.startOffset, ktFun.endOffset, funExpressionType,
|
irBlock.statements.add(
|
||||||
irFun.descriptor, null, IrStatementOrigin.ANONYMOUS_FUNCTION))
|
IrCallableReferenceImpl(
|
||||||
|
ktFun.startOffset, ktFun.endOffset, funExpressionType,
|
||||||
|
irFun.descriptor, null, IrStatementOrigin.ANONYMOUS_FUNCTION
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
irBlock
|
irBlock
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun generateFunctionDeclaration(ktFun: KtNamedFunction): IrFunction {
|
private fun generateFunctionDeclaration(ktFun: KtNamedFunction): IrFunction =
|
||||||
val funDescriptor = getOrFail(BindingContext.FUNCTION, ktFun)
|
DeclarationGenerator(context).generateFunctionDeclaration(ktFun)
|
||||||
val irFun = IrFunctionImpl(ktFun.startOffset, ktFun.endOffset, IrDeclarationOrigin.DEFINED, funDescriptor)
|
|
||||||
irFun.body = BodyGenerator(funDescriptor, statementGenerator.context).generateFunctionBody(ktFun.bodyExpression!!)
|
|
||||||
return irFun
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1 +1,3 @@
|
|||||||
fun test1(x: Int, y: Int = 0, z: String = "abc") {}
|
fun test1(x: Int, y: Int = 0, z: String = "abc") {
|
||||||
|
fun local(xx: Int = x, yy: Int = y, zz: String = z) {}
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,3 +5,11 @@ FILE /defaultArguments.kt
|
|||||||
z: EXPRESSION_BODY
|
z: EXPRESSION_BODY
|
||||||
CONST String type=kotlin.String value='abc'
|
CONST String type=kotlin.String value='abc'
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
|
FUN local final fun local(xx: kotlin.Int = ..., yy: kotlin.Int = ..., zz: kotlin.String = ...): kotlin.Unit
|
||||||
|
xx: EXPRESSION_BODY
|
||||||
|
GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null
|
||||||
|
yy: EXPRESSION_BODY
|
||||||
|
GET_VAR 'value-parameter y: Int = ...' type=kotlin.Int origin=null
|
||||||
|
zz: EXPRESSION_BODY
|
||||||
|
GET_VAR 'value-parameter z: String = ...' type=kotlin.String origin=null
|
||||||
|
BLOCK_BODY
|
||||||
|
|||||||
Reference in New Issue
Block a user