blob: 3feabd50eadd682811ab8494feb3dd9911d47b71 [file]
// RUN_PIPELINE_TILL: FRONTEND
// LANGUAGE: +ContextParameters
fun String.foo(f: context(String) () -> Unit = {}) {
f()
f("") // explicit argument should still work
}
fun foo(f: context(String) () -> Unit = {}) {
f("") // explicit argument should still work
}
interface Ctx
interface CtxA : Ctx
interface CtxB : Ctx
context(a: CtxA, b: CtxB)
fun bar(f: context(Ctx) () -> Unit) {
<!AMBIGUOUS_CONTEXT_ARGUMENT!>f<!>()
f(a) // explicit argument should still work
f(b) // explicit argument should still work
}
context(_: String)
fun baz(param: String, f: context(String, Int) (String) -> Unit){
with(1) {
f(param)
}
}
fun <T> context(t: T, f: context(T) () -> Unit) = f(t)
fun qux(
f1: context(String, Int) () -> Unit,
f2: context(String, Int) (Boolean) -> Unit,
f3: context(String, Int) Boolean.() -> Unit,
f4: context(String, Int) String.() -> Unit,
f5: context(String, Int) String.(Boolean) -> Unit,
) {
f1("", 1)
f2("", 1, true)
f3("", 1, true)
f4("", 1, "")
f5("", 1, "", true)
<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f1<!>()
<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f2<!>(true)
<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f3<!>(true)
true.<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f3<!>()
<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f4<!>("")
"".<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f4<!>()
<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f5<!>("", true)
"".<!NO_CONTEXT_ARGUMENT, NO_CONTEXT_ARGUMENT!>f5<!>(true)
with("") {
with(1) {
f1("", 1)
f2("", 1, true)
f3("", 1, true)
f4("", 1, "")
f5("", 1, "", true)
f1()
f2(true)
f3(true)
with(true) {
f3()
}
true.f3()
f4()
f4("")
"".f4()
f5<!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>()<!>
f5(true)
f5("", true)
"".f5(true)
}
}
context("") {
with(1) {
f1("", 1)
f2("", 1, true)
f3("", 1, true)
f4("", 1, "")
f5("", 1, "", true)
f1()
f2(true)
}
}
context("") {
context(1) {
f1()
f2(true)
}
}
with("") {
f1(<!NO_VALUE_FOR_PARAMETER!><!ARGUMENT_TYPE_MISMATCH!>1<!>)<!>
f2(<!ARGUMENT_TYPE_MISMATCH!>1<!>, <!NO_VALUE_FOR_PARAMETER!><!ARGUMENT_TYPE_MISMATCH!>true<!>)<!>
<!UNSUPPORTED_CONTEXTUAL_DECLARATION_CALL!>f3<!>(1, true)
<!UNSUPPORTED_CONTEXTUAL_DECLARATION_CALL!>f4<!>(1, "")
<!NO_CONTEXT_ARGUMENT!>f4<!>(<!ARGUMENT_TYPE_MISMATCH!>1<!>)
<!UNSUPPORTED_CONTEXTUAL_DECLARATION_CALL!>f5<!>(1, "", true)
}
"".<!UNSUPPORTED_CONTEXTUAL_DECLARATION_CALL!>f3<!>(1, true)
}
/* GENERATED_FIR_TAGS: funWithExtensionReceiver, functionDeclaration, functionDeclarationWithContext, functionalType,
integerLiteral, interfaceDeclaration, lambdaLiteral, nullableType, stringLiteral, typeParameter, typeWithContext,
typeWithExtension */