IR. Hack to distinguish default values
This commit is contained in:
+9
-1
@@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-2
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user