IR. Hack to distinguish default values

This commit is contained in:
Mikhael Bogdanov
2019-11-15 14:50:20 +01:00
parent ac31e0e8c7
commit abef5daea9
3 changed files with 13 additions and 3 deletions
@@ -290,7 +290,15 @@ open class DefaultParameterInjector(
if (valueArgument == null) {
maskValues[i / 32] = maskValues[i / 32] or (1 shl (i % 32))
}
valueArgument ?: nullConst(startOffset, endOffset, parameter)
valueArgument ?: nullConst(startOffset, endOffset, parameter)?.let {
IrCompositeImpl(
expression.startOffset,
expression.endOffset,
parameter.type,
IrStatementOrigin.DEFAULT_VALUE,
listOf(it)
)
}
}
}
}
@@ -97,8 +97,9 @@ class IrInlineCodegen(
val kind = when (irValueParameter.origin) {
IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION -> ValueKind.DEFAULT_MASK
IrDeclarationOrigin.METHOD_HANDLER_IN_DEFAULT_FUNCTION -> ValueKind.METHOD_HANDLE_IN_DEFAULT
//TODO: support DEFAULT_PARAMETER
else -> ValueKind.CAPTURED
else -> if (argumentExpression is IrContainerExpression && argumentExpression.origin == IrStatementOrigin.DEFAULT_VALUE)
ValueKind.DEFAULT_PARAMETER
else ValueKind.CAPTURED
}
val onStack = when {
@@ -86,6 +86,7 @@ interface IrStatementOrigin {
object FOR_LOOP_NEXT : IrStatementOriginImpl("FOR_LOOP_NEXT")
object LAMBDA : IrStatementOriginImpl("LAMBDA")
object DEFAULT_VALUE : IrStatementOriginImpl("DEFAULT_VALUE")
object ANONYMOUS_FUNCTION : IrStatementOriginImpl("ANONYMOUS_FUNCTION")
object OBJECT_LITERAL : IrStatementOriginImpl("OBJECT_LITERAL")