Support named arguments in their own position

^KT-7745 In Proggress
This commit is contained in:
Denis Zharkov
2019-08-30 12:27:53 +03:00
parent bd6481b9e8
commit e54d2c7c32
18 changed files with 494 additions and 10 deletions
@@ -0,0 +1,23 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
fun foo(
p1: Int = 1,
p2: String = "2",
p3: Double = 3.0,
p4: Char = '4'
) = "$p1 $p2 ${p3.toInt()} $p4"
fun box(): String {
if (foo(p1 = 1, "2", 3.0) != "1 2 3 4") return "fail 1"
if (foo(1, p2 = "2", 3.0) != "1 2 3 4") return "fail 2"
if (foo(1, "2", p3 = 3.0) != "1 2 3 4") return "fail 3"
if (foo(p1 = 1) != "1 2 3 4") return "fail 4"
if (foo(1, p2 = "2") != "1 2 3 4") return "fail 5"
if (foo(p1 = 1, p2 = "2", 3.0) != "1 2 3 4") return "fail 6"
if (foo(1, p2 = "2") != "1 2 3 4") return "fail 7"
return "OK"
}
@@ -0,0 +1,15 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
fun foo(
p1: Int,
p2: String,
p3: Double
) = "$p1 $p2 ${p3.toInt()}"
fun box(): String {
if (foo(p1 = 1, "2", 3.0) != "1 2 3") return "fail 1"
if (foo(1, "2", p3 = 3.0) != "1 2 3") return "fail 2"
if (foo(p1 = 1, p2 = "2", 3.0) != "1 2 3") return "fail 3"
return "OK"
}
@@ -0,0 +1,31 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
fun foo1(
vararg p1: Int,
p2: String,
p3: Double
) = "${p1[0]} ${p1[1]} $p2 ${p3.toInt()}"
fun foo2(
p1: Int,
vararg p2: String,
p3: Double
) = "$p1 ${p2[0]} ${p2[1]} ${p3.toInt()}"
fun foo3(
p1: Int,
p2: String,
vararg p3: Double
) = "$p1 $p2 ${p3[0].toInt()} ${p3[1].toInt()}"
fun box(): String {
if (foo1(p1 = *intArrayOf(1, 2), "3", p3 = 4.0) != "1 2 3 4") return "fail 2"
if (foo2(p1 = 1, "2", "3", p3 = 4.0) != "1 2 3 4") return "fail 3"
if (foo2(1, p2 = *arrayOf("2", "3"), 4.0) != "1 2 3 4") return "fail 4"
if (foo3(p1 = 1, "2", 3.0, 4.0) != "1 2 3 4") return "fail 5"
if (foo3(p1 = 1, "2", p3 = *doubleArrayOf(3.0, 4.0)) != "1 2 3 4") return "fail 6"
return "OK"
}
@@ -0,0 +1,28 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
fun foo(
p1: Int = 1,
p2: String = "",
p3: Double = 3.0,
p4: Char = '4'
) {}
fun main() {
foo(p1 = 1, "2", 3.0)
foo(1, p2 = "2", 3.0)
foo(1, "2", p3 = 3.0)
foo(p1 = 1)
foo(1, p2 = "2")
foo(p1 = 1, p2 = "2", 3.0)
foo()
foo(1, p2 = "")
foo(p3 = 4.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>'4'<!>)
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>""<!>)
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!>)
}
@@ -0,0 +1,20 @@
// !LANGUAGE: +NewInference -MixedNamedArgumentsInTheirOwnPosition
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
fun foo(
p1: Int,
p2: String,
p3: Double
) {}
fun main() {
foo(p1 = 1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"2"<!>, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p2 = "2", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, "2", p3 = 3.0)
foo(p1 = 1, p2 = "2", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>""<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
}
@@ -0,0 +1,20 @@
// !LANGUAGE: -NewInference +MixedNamedArgumentsInTheirOwnPosition
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
fun foo(
p1: Int,
p2: String,
p3: Double
) {}
fun main() {
foo(p1 = 1, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"2"<!>, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER, NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p2 = "2", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, "2", p3 = 3.0)
foo(p1 = 1, p2 = "2", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>""<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
}
@@ -0,0 +1,20 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
fun foo(
p1: Int,
p2: String,
p3: Double
) {}
fun main() {
foo(p1 = 1, "2", 3.0)
foo(1, p2 = "2", 3.0)
foo(1, "2", p3 = 3.0)
foo(p1 = 1, p2 = "2", 3.0)
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>""<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>3.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
}
@@ -0,0 +1,57 @@
// !LANGUAGE: +NewInference +MixedNamedArgumentsInTheirOwnPosition
// !DIAGNOSTICS: -UNUSED_PARAMETER
// SKIP_TXT
fun foo1(
vararg p1: Int,
p2: String,
p3: Double
) {}
fun foo2(
p1: Int,
vararg p2: String,
p3: Double
) {}
fun foo3(
p1: Int,
p2: String,
vararg p3: Double
) {}
fun foo4(
p1: Int,
vararg p2: String,
p3: Double,
p4: Int
) {}
fun main() {
foo1(1, 2, p2 = "3", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>4.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo1(p1 = *intArrayOf(1, 2), "3", p3 = 4.0)
foo1(p2 = "3", <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>4.0<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo2(p1 = 1, "2", "3", p3 = 4.0)
foo2(1, p2 = *arrayOf("2", "3"), 4.0)
foo2(1, p3 = 3.0)
foo3(p1 = 1, "2", 3.0, 4.0)
foo3(p1 = 1, "2", p3 = *doubleArrayOf(3.0, 4.0))
foo4(p1 = 1, "2", "3", p3 = 4.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>5<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo4(1, "2", "3", p3 = 4.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>5<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo4(1, p3 = 4.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>5<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo1(1, 2, p3 = 3.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"4"<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo1(1, 2, p3 = 3.0, p2 = "4")
foo1(*intArrayOf(1, 2), p3 = 3.0, p2 = "4")
foo2(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"4"<!>)
foo2(1, p3 = 2.0, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>*arrayOf("3", "4")<!>)
foo2(1, p3 = 2.0, p2 = *arrayOf("3", "4"))
foo3(1, p3 = *doubleArrayOf(2.0, 3.0), <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"4"<!><!NO_VALUE_FOR_PARAMETER!>)<!>
foo3(1, p3 = *doubleArrayOf(2.0, 3.0), p2 = "4")
}