IR. Hack to distinguish default values
This commit is contained in:
+9
-1
@@ -290,7 +290,15 @@ open class DefaultParameterInjector(
|
|||||||
if (valueArgument == null) {
|
if (valueArgument == null) {
|
||||||
maskValues[i / 32] = maskValues[i / 32] or (1 shl (i % 32))
|
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) {
|
val kind = when (irValueParameter.origin) {
|
||||||
IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION -> ValueKind.DEFAULT_MASK
|
IrDeclarationOrigin.MASK_FOR_DEFAULT_FUNCTION -> ValueKind.DEFAULT_MASK
|
||||||
IrDeclarationOrigin.METHOD_HANDLER_IN_DEFAULT_FUNCTION -> ValueKind.METHOD_HANDLE_IN_DEFAULT
|
IrDeclarationOrigin.METHOD_HANDLER_IN_DEFAULT_FUNCTION -> ValueKind.METHOD_HANDLE_IN_DEFAULT
|
||||||
//TODO: support DEFAULT_PARAMETER
|
else -> if (argumentExpression is IrContainerExpression && argumentExpression.origin == IrStatementOrigin.DEFAULT_VALUE)
|
||||||
else -> ValueKind.CAPTURED
|
ValueKind.DEFAULT_PARAMETER
|
||||||
|
else ValueKind.CAPTURED
|
||||||
}
|
}
|
||||||
|
|
||||||
val onStack = when {
|
val onStack = when {
|
||||||
|
|||||||
@@ -86,6 +86,7 @@ interface IrStatementOrigin {
|
|||||||
object FOR_LOOP_NEXT : IrStatementOriginImpl("FOR_LOOP_NEXT")
|
object FOR_LOOP_NEXT : IrStatementOriginImpl("FOR_LOOP_NEXT")
|
||||||
|
|
||||||
object LAMBDA : IrStatementOriginImpl("LAMBDA")
|
object LAMBDA : IrStatementOriginImpl("LAMBDA")
|
||||||
|
object DEFAULT_VALUE : IrStatementOriginImpl("DEFAULT_VALUE")
|
||||||
object ANONYMOUS_FUNCTION : IrStatementOriginImpl("ANONYMOUS_FUNCTION")
|
object ANONYMOUS_FUNCTION : IrStatementOriginImpl("ANONYMOUS_FUNCTION")
|
||||||
object OBJECT_LITERAL : IrStatementOriginImpl("OBJECT_LITERAL")
|
object OBJECT_LITERAL : IrStatementOriginImpl("OBJECT_LITERAL")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user