Fixed test data for new lambda syntax

This commit is contained in:
Stanislav Erokhin
2015-03-18 00:25:06 +03:00
parent 371908a280
commit 43e24f6b0d
54 changed files with 103 additions and 113 deletions
@@ -3,7 +3,7 @@ tailRecursive fun <T, A> Iterator<T>.foldl(acc : A, foldFunction : (e : T, acc :
else foldl(foldFunction(next(), acc), foldFunction) else foldl(foldFunction(next(), acc), foldFunction)
fun box() : String { fun box() : String {
val sum = (1..1000000).iterator().foldl(0) { (e : Int, acc : Long) -> val sum = (1..1000000).iterator().foldl(0) { e : Int, acc : Long ->
acc + e acc + e
} }
@@ -52,16 +52,15 @@ fun main(args : Array<String>) {
fun f() : Int.() -> Unit = {} fun f() : Int.() -> Unit = {}
fun main1() { fun main1() {
1.{Int.() -> 1}(); 1.(fun Int.() = 1)();
{1}(); {1}();
{(x : Int) -> x}(1) (fun (x : Int) = x)(1)
1.{Int.(x : Int) -> x}(1); 1.(fun Int.(x : Int) = x)(1);
@l{1}() @l{1}()
1.({Int.() -> 1})() 1.((fun Int.() = 1))()
1.(f())() 1.(f())()
1.if(true){f()}else{f()}() 1.if(true){f()}else{f()}()
1.if(true){Int.() -> <!UNUSED_EXPRESSION!>1<!>}else{f()}() 1.if(true)(fun Int.() {})else{f()}()
1.if(true){Int.() -> 1}else{Int.() -> 1}()
1.<!FUNCTION_EXPECTED!>"sdf"<!>() 1.<!FUNCTION_EXPECTED!>"sdf"<!>()
@@ -71,12 +70,12 @@ fun main1() {
} }
fun test() { fun test() {
{(x : Int) -> 1}(<!NO_VALUE_FOR_PARAMETER!>)<!>; {x : Int -> 1}(<!NO_VALUE_FOR_PARAMETER!>)<!>;
<!MISSING_RECEIVER!>{Int.() -> 1}<!>() <!MISSING_RECEIVER!>(fun Int.() = 1)<!>()
<!TYPE_MISMATCH!>"sd"<!>.{Int.() -> 1}() <!TYPE_MISMATCH!>"sd"<!>.(fun Int.() = 1)()
val i : Int? = null val i : Int? = null
i<!UNSAFE_CALL!>.<!>{Int.() -> 1}(); i<!UNSAFE_CALL!>.<!>(fun Int.() = 1)();
{}<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Int><!>() {}<!WRONG_NUMBER_OF_TYPE_ARGUMENTS!><Int><!>()
1<!UNNECESSARY_SAFE_CALL!>?.<!>{Int.() -> 1}() 1<!UNNECESSARY_SAFE_CALL!>?.<!>(fun Int.() = 1)()
1.<!NO_RECEIVER_ALLOWED!>{}<!>() 1.<!NO_RECEIVER_ALLOWED!>{}<!>()
} }
@@ -7,5 +7,5 @@ class A(a<!SYNTAX!><!>)
val bar = fun test(<!CANNOT_INFER_PARAMETER_TYPE!>a<!>){} val bar = fun test(<!CANNOT_INFER_PARAMETER_TYPE!>a<!>){}
val la = { (<!CANNOT_INFER_PARAMETER_TYPE!>a<!>) -> } val la = { <!CANNOT_INFER_PARAMETER_TYPE!>a<!> -> }
val las = { (a: Int) -> } val las = { a: Int -> }
@@ -174,12 +174,12 @@ fun testFunctionLiterals() {
<!EXPECTED_TYPE_MISMATCH!>val <!UNUSED_VARIABLE!>x<!> = 2<!> <!EXPECTED_TYPE_MISMATCH!>val <!UNUSED_VARIABLE!>x<!> = 2<!>
} }
val <!UNUSED_VARIABLE!>endsWithAssignment<!> = { () : Int -> val <!UNUSED_VARIABLE!>endsWithAssignment<!>: () -> Int = {
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>x<!> = 1 var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>x<!> = 1
<!EXPECTED_TYPE_MISMATCH!>x = <!UNUSED_VALUE!>333<!><!> <!EXPECTED_TYPE_MISMATCH!>x = <!UNUSED_VALUE!>333<!><!>
} }
val <!UNUSED_VARIABLE!>endsWithReAssignment<!> = { () : Int -> val <!UNUSED_VARIABLE!>endsWithReAssignment<!>: () -> Int = {
var x = 1 var x = 1
<!ASSIGNMENT_TYPE_MISMATCH!>x += 333<!> <!ASSIGNMENT_TYPE_MISMATCH!>x += 333<!>
} }
@@ -196,11 +196,11 @@ fun testFunctionLiterals() {
<!LOCAL_OBJECT_NOT_ALLOWED, EXPECTED_TYPE_MISMATCH!>object A<!> {} <!LOCAL_OBJECT_NOT_ALLOWED, EXPECTED_TYPE_MISMATCH!>object A<!> {}
} }
val <!UNUSED_VARIABLE!>expectedUnitReturnType1<!> = { () : Unit -> val <!UNUSED_VARIABLE!>expectedUnitReturnType1<!>: () -> Unit = {
val <!UNUSED_VARIABLE!>x<!> = 1 val <!UNUSED_VARIABLE!>x<!> = 1
} }
val <!UNUSED_VARIABLE!>expectedUnitReturnType2<!> = { () : Unit -> val <!UNUSED_VARIABLE!>expectedUnitReturnType2<!>: () -> Unit = {
fun meow() : Unit {} fun meow() : Unit {}
<!LOCAL_OBJECT_NOT_ALLOWED!>object A<!> {} <!LOCAL_OBJECT_NOT_ALLOWED!>object A<!> {}
} }
@@ -103,11 +103,11 @@ fun testInnerFunctions() {
fun testFunctionLiterals() { fun testFunctionLiterals() {
var x = 1 var x = 1
var <!UNUSED_VARIABLE!>fl<!> = { (): Int -> var <!UNUSED_VARIABLE!>fl<!> = {
x x
} }
var y = 2 var y = 2
var <!UNUSED_VARIABLE!>fl1<!> = { (): Unit -> var <!UNUSED_VARIABLE!>fl1<!> = {
doSmth(y) doSmth(y)
} }
} }
@@ -2,7 +2,6 @@
fun test1(): String { fun test1(): String {
doCall @local { doCall @local {
() : String ->
throw NullPointerException() throw NullPointerException()
<!UNREACHABLE_CODE!>"b3"<!> //unmarked <!UNREACHABLE_CODE!>"b3"<!> //unmarked
} }
@@ -12,7 +11,6 @@ fun test1(): String {
fun test2(nonLocal: String, b: Boolean): String { fun test2(nonLocal: String, b: Boolean): String {
doCall @local { doCall @local {
() : String ->
if (b) { if (b) {
return@local "b1" return@local "b1"
} else { } else {
@@ -30,7 +30,7 @@ fun test2(s : String) : Int? {
22 22
} finally { } finally {
<!UNUSED_FUNCTION_LITERAL!>{ <!UNUSED_FUNCTION_LITERAL!>{
(x : Int) -> x x : Int -> x
}<!> }<!>
} }
} }
@@ -2,7 +2,7 @@
package o package o
class TestFunctionLiteral { class TestFunctionLiteral {
val sum: (Int) -> Int = { (x: Int) -> val sum: (Int) -> Int = { x: Int ->
sum(x - 1) + x sum(x - 1) + x
} }
val foo: () -> Unit = @l ({ foo() }) val foo: () -> Unit = @l ({ foo() })
@@ -1,18 +1,17 @@
fun f() { fun f() {
foo {(): Int -> foo {
return@foo 1 return@foo 1
} }
foo({(): Int -> foo({
return@foo 1 return@foo 1
} }
) )
foo(a = {(): Int -> foo(a = {
return@foo 1 return@foo 1
}) })
foo {(): Int -> foo {
foo { foo {
(): Int ->
return<!LABEL_NAME_CLASH!>@foo<!> 1 return<!LABEL_NAME_CLASH!>@foo<!> 1
} }
return@foo 1 return@foo 1
@@ -1,7 +1,6 @@
fun f() { fun f() {
foo {(): Int -> foo {
bar { bar {
(): Int ->
<!RETURN_NOT_ALLOWED!>return@foo 1<!> <!RETURN_NOT_ALLOWED!>return@foo 1<!>
} }
return@foo 1 return@foo 1
@@ -1,7 +1,7 @@
val flag = true val flag = true
val a /*: (Int) -> String */ = @l { val a /*: (Int) -> String */ = @l {
(i: Int) -> i: Int ->
if (i == 0) return@l i.toString() if (i == 0) return@l i.toString()
"Ok" "Ok"
@@ -10,7 +10,7 @@ val a /*: (Int) -> String */ = @l {
fun <T> foo(f: (Int) -> T): T = f(0) fun <T> foo(f: (Int) -> T): T = f(0)
val b /*:String */ = foo { val b /*:String */ = foo {
(i) -> i ->
if (i == 0) return@foo i.toString() if (i == 0) return@foo i.toString()
"Ok" "Ok"
@@ -1,5 +1,5 @@
fun test() { fun test() {
run1 @f{(): Int -> run1 @f{
(return@f 1)<!UNREACHABLE_CODE!>: Nothing<!> (return@f 1)<!UNREACHABLE_CODE!>: Nothing<!>
} }
} }
@@ -1,6 +1,6 @@
// KT-6822 Smart cast doesn't work inside local returned expression in lambda // KT-6822 Smart cast doesn't work inside local returned expression in lambda
val a /* :(Int?) -> Int? */ = @l { (it: Int?) -> // but must be (Int?) -> Int val a /* :(Int?) -> Int? */ = @l { it: Int? -> // but must be (Int?) -> Int
if (it != null) return@l it if (it != null) return@l it
5 5
} }
@@ -1,12 +1,12 @@
fun unusedLiteral(){ fun unusedLiteral(){
<!UNUSED_FUNCTION_LITERAL!>{() -> <!UNUSED_FUNCTION_LITERAL!>{ ->
val <!UNUSED_VARIABLE!>i<!> = 1 val <!UNUSED_VARIABLE!>i<!> = 1
}<!> }<!>
} }
fun unusedLiteralInDoWhile(){ fun unusedLiteralInDoWhile(){
do<!UNUSED_FUNCTION_LITERAL!>{() -> do<!UNUSED_FUNCTION_LITERAL!>{ ->
val <!UNUSED_VARIABLE!>i<!> = 1 val <!UNUSED_VARIABLE!>i<!> = 1
}<!> while(false) }<!> while(false)
} }
@@ -6,7 +6,7 @@ import java.util.Comparator
fun foo() { fun foo() {
val <!UNUSED_VARIABLE!>c<!>: Comparator<Date?> = comparator {(date1, date2) -> val <!UNUSED_VARIABLE!>c<!>: Comparator<Date?> = comparator { date1, date2 ->
if (date1 != null && date2 != null) { if (date1 != null && date2 != null) {
date1.compareTo(date2) * -11 date1.compareTo(date2) * -11
} else { } else {
@@ -5,7 +5,7 @@ fun <T> emptyList(): List<T> = throw Exception()
fun foo<T>(f: T.() -> Unit, l: List<T>): T = throw Exception("$f$l") fun foo<T>(f: T.() -> Unit, l: List<T>): T = throw Exception("$f$l")
fun test() { fun test() {
val q = foo({ Int.() -> }, emptyList()) //type inference no information for parameter error val q = foo(fun Int.() {}, emptyList()) //type inference no information for parameter error
q: Int q: Int
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>({}, <!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>()) <!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>foo<!>({}, <!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>emptyList<!>())
@@ -8,7 +8,7 @@ private fun <T> test(value: T, extf: String.(value: T)->Unit) {
} }
fun main(args: Array<String>) { fun main(args: Array<String>) {
test(1, {(value) -> println(value)}) test(1, {value -> println(value)})
} }
fun tests() { fun tests() {
@@ -11,7 +11,7 @@ public fun<TItem, TResult> select(<!UNUSED_PARAMETER!>yielder<!>: ()->Iterable<T
fun a() { fun a() {
val x = 0..200 val x = 0..200
val z = x where { (i: Int) -> i % 2 == 0 } val z = x where { i: Int -> i % 2 == 0 }
val yielder = select(x where { it%2==0 }, { it.toString() }) val yielder = select(x where { it%2==0 }, { it.toString() })
z : () -> Iterable<Int> z : () -> Iterable<Int>
@@ -3,7 +3,7 @@
package d package d
fun test(numbers: Iterable<Int>) { fun test(numbers: Iterable<Int>) {
val s = numbers.map{it.toString()}.fold(""){(it, it2) -> it + it2} val s = numbers.map{it.toString()}.fold(""){it, it2 -> it + it2}
<!TYPE_MISMATCH!>s<!>: Int <!TYPE_MISMATCH!>s<!>: Int
} }
@@ -14,7 +14,7 @@ abstract class Buggy {
get() = <!TYPE_MISMATCH!>coll.find{ it > 3 }<!> // does not work here get() = <!TYPE_MISMATCH!>coll.find{ it > 3 }<!> // does not work here
val yetAnotherThree : Int val yetAnotherThree : Int
get() = <!TYPE_MISMATCH!>coll.find({ (v:Int) -> v > 3 })<!> // neither here get() = <!TYPE_MISMATCH!>coll.find({ v:Int -> v > 3 })<!> // neither here
val extendedGetter : Int val extendedGetter : Int
get() { get() {
@@ -8,7 +8,7 @@ enum class SomeEnum {
// Doesn't work // Doesn't work
fun Iterable<Int>.some() { fun Iterable<Int>.some() {
this.fold(SomeEnum.FIRST, {(res : SomeEnum, value) -> this.fold(SomeEnum.FIRST, {res : SomeEnum, value ->
if (res == SomeEnum.FIRST) SomeEnum.FIRST else SomeEnum.SECOND if (res == SomeEnum.FIRST) SomeEnum.FIRST else SomeEnum.SECOND
}) })
} }
@@ -19,7 +19,7 @@ fun tempFun() : SomeEnum {
// Doesn't work // Doesn't work
fun Iterable<Int>.someSimpleWithFun() { fun Iterable<Int>.someSimpleWithFun() {
this.fold(SomeEnum.FIRST, {(res : SomeEnum, value) -> this.fold(SomeEnum.FIRST, {res : SomeEnum, value ->
tempFun() tempFun()
}) })
} }
@@ -27,14 +27,14 @@ fun Iterable<Int>.someSimpleWithFun() {
// Works // Works
fun Iterable<Int>.someSimple() { fun Iterable<Int>.someSimple() {
this.fold(SomeEnum.FIRST, {(res : SomeEnum, value) -> this.fold(SomeEnum.FIRST, {res : SomeEnum, value ->
SomeEnum.FIRST SomeEnum.FIRST
}) })
} }
// Works // Works
fun Iterable<Int>.someInt() { fun Iterable<Int>.someInt() {
this.fold(0, {(res : Int, value) -> this.fold(0, {res : Int, value ->
if (res == 0) 1 else 0 if (res == 0) 1 else 0
}) })
} }
@@ -15,10 +15,10 @@ fun SomeTemplate.query(f: (i: Int) -> Unit) = f
fun SomeTemplate.query1(f: (i: Int) -> Unit) = f fun SomeTemplate.query1(f: (i: Int) -> Unit) = f
fun test() { fun test() {
val mapperFunction = {(i: Int)-> } val mapperFunction = { i: Int -> }
SomeTemplate().query(mapperFunction) SomeTemplate().query(mapperFunction)
// TYPE_MISMATCH: Required Class<[ERROR: CANT_INFER]>, Found (kotlin.Int) -> Unit // TYPE_MISMATCH: Required Class<[ERROR: CANT_INFER]>, Found (kotlin.Int) -> Unit
SomeTemplate().query {(i: Int)-> } SomeTemplate().query { i: Int -> }
SomeTemplate().query1 {(i: Int)-> } SomeTemplate().query1 { i: Int -> }
} }
@@ -3,7 +3,7 @@ package a
fun <T, R, S> foo(block: (T)-> R, <!UNUSED_PARAMETER!>second<!>: (T)-> S) = block fun <T, R, S> foo(block: (T)-> R, <!UNUSED_PARAMETER!>second<!>: (T)-> S) = block
fun main(args: Array<String>) { fun main(args: Array<String>) {
val fff = { (x: Int) -> <!UNRESOLVED_REFERENCE!>aaa<!> } val fff = { x: Int -> <!UNRESOLVED_REFERENCE!>aaa<!> }
foo(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>fff<!>, { x -> x + 1 }) foo(<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>fff<!>, { x -> x + 1 })
} }
@@ -8,9 +8,9 @@ fun <T, R> bar(f: (T) -> R) = f
fun test() { fun test() {
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ <!UNRESOLVED_REFERENCE!>it<!> }<!> <!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ <!UNRESOLVED_REFERENCE!>it<!> }<!>
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!>}<!> <!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!>}<!>
<!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ (x: Int) -> x}<!> <!TYPE_INFERENCE_TYPE_CONSTRUCTOR_MISMATCH!>foo<!> <!TYPE_MISMATCH!>{ x: Int -> x}<!>
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!> { <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>it<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1 } <!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!> { <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>it<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1 }
<!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!> { <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1} <!TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!> { <!CANNOT_INFER_PARAMETER_TYPE!>x<!> -> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>x<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1}
bar { (x: Int) -> x + 1} bar { x: Int -> x + 1}
} }
@@ -11,7 +11,6 @@ fun inlineCallExplicitError(): String {
fun inlineCall(): String { fun inlineCall(): String {
inlineFun @lamba { inlineFun @lamba {
(): Int ->
if (true) { if (true) {
return@lamba 2 return@lamba 2
} }
@@ -28,7 +27,6 @@ inline fun inlineFun(s: () -> Int) {
fun noInlineCall(): String { fun noInlineCall(): String {
noInline @lambda { noInline @lambda {
(): Int ->
if (true) { if (true) {
return@lambda 2 return@lambda 2
} }
@@ -16,10 +16,8 @@ class Global(val value: String)
fun test1(intKind: Kind, extKind: Kind): Global { fun test1(intKind: Kind, extKind: Kind): Global {
var externalResult = doCall @ext { var externalResult = doCall @ext {
() : External ->
val internalResult = doCall @int { val internalResult = doCall @int {
() : Internal ->
if (intKind == Kind.LOCAL) { if (intKind == Kind.LOCAL) {
return@test1 Global("internal to global") return@test1 Global("internal to global")
} else if (intKind == EXT_RETURN) { } else if (intKind == EXT_RETURN) {
@@ -27,13 +27,13 @@ fun <R> fun3ValueArgument(p: () -> R) {
fun <R> fun4(p: () -> R) { fun <R> fun4(p: () -> R) {
inlineFun @lambda {(): R -> inlineFun @lambda {
return@lambda p(); return@lambda p();
} }
} }
fun <R> fun4ValueArgument(p: () -> R) { fun <R> fun4ValueArgument(p: () -> R) {
inlineFun (@lambda {(): R -> inlineFun (@lambda {
return@lambda p(); return@lambda p();
}) })
} }
@@ -20,7 +20,7 @@ fun <R> fun3(p: () -> R) {
} }
fun <R> fun4(p: () -> R) { fun <R> fun4(p: () -> R) {
Z() inlineFun @lambda {(): R -> Z() inlineFun @lambda {
return@lambda p(); return@lambda p();
} }
} }
@@ -1,5 +1,5 @@
fun nonlocals(b : Boolean) { fun nonlocals(b : Boolean) {
@a<!UNUSED_FUNCTION_LITERAL!>{(): Int -> @a<!UNUSED_FUNCTION_LITERAL!>{
fun foo() { fun foo() {
if (b) { if (b) {
<!RETURN_NOT_ALLOWED!>return@a 1<!> // The label must be resolved, but an error should be reported for a non-local return <!RETURN_NOT_ALLOWED!>return@a 1<!> // The label must be resolved, but an error should be reported for a non-local return
@@ -2,7 +2,7 @@
//KT-3920 Labeling information is lost when passing through some expressions //KT-3920 Labeling information is lost when passing through some expressions
fun test() { fun test() {
run @f{ (): Int -> run @f{
val x = if (1 > 2) return@f 1 else 2 val x = if (1 > 2) return@f 1 else 2
2 2
} }
@@ -2,7 +2,7 @@
//KT-4603 Labeling information is lost when passing through local classes or objects //KT-4603 Labeling information is lost when passing through local classes or objects
fun foo() { fun foo() {
val s = @l{ Int.() -> val s: Int.() -> Unit = @l{
class Local(val y: Int = this@l) { class Local(val y: Int = this@l) {
fun bar() { fun bar() {
val x: Int = this@l //unresolved val x: Int = this@l //unresolved
@@ -1,9 +1,9 @@
//KT-591 Unresolved label in valid code //KT-591 Unresolved label in valid code
fun test() { fun test() {
val <!UNUSED_VARIABLE!>a<!> = @a{(Int?).() -> val <!UNUSED_VARIABLE!>a<!>: (Int?).() -> Unit = @a{
if (this != null) { if (this != null) {
val <!UNUSED_VARIABLE!>b<!> = {String.() -> val <!UNUSED_VARIABLE!>b<!>: String.() -> Unit = {
<!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // @a Unresolved <!DEBUG_INFO_SMARTCAST!>this@a<!>.times(5) // @a Unresolved
} }
} }
@@ -1,7 +1,7 @@
package jet121 package jet121
fun box() : String { fun box() : String {
val answer = apply("OK") { String.() : Int -> val answer = apply("OK") {
get(0) get(0)
length() length()
} }
@@ -1,8 +1,8 @@
fun foo1() : (Int) -> Int = { (x: Int) -> x } fun foo1() : (Int) -> Int = { x: Int -> x }
fun foo() { fun foo() {
val h : (Int) -> Int = foo1(); val h : (Int) -> Int = foo1();
h(1) h(1)
val m : (Int) -> Int = {(a : Int) -> 1}//foo1() val m : (Int) -> Int = {a : Int -> 1}//foo1()
m(1) m(1)
} }
@@ -4,32 +4,32 @@ package kt235
fun main(args: Array<String>) { fun main(args: Array<String>) {
val array = MyArray() val array = MyArray()
val <!UNUSED_VARIABLE!>f<!> = { (): String -> val <!UNUSED_VARIABLE!>f<!>: () -> String = {
<!EXPECTED_TYPE_MISMATCH!>array[2] = 23<!> //error: Type mismatch: inferred type is Int (!!!) but String was expected <!EXPECTED_TYPE_MISMATCH!>array[2] = 23<!> //error: Type mismatch: inferred type is Int (!!!) but String was expected
} }
val <!UNUSED_VARIABLE!>g<!> = {(): String -> val <!UNUSED_VARIABLE!>g<!>: () -> String = {
var x = 1 var x = 1
<!EXPECTED_TYPE_MISMATCH!>x += 2<!> //no error, but it should be here <!EXPECTED_TYPE_MISMATCH!>x += 2<!> //no error, but it should be here
} }
val <!UNUSED_VARIABLE!>h<!> = {(): String -> val <!UNUSED_VARIABLE!>h<!>: () -> String = {
var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>x<!> = 1 var <!ASSIGNED_BUT_NEVER_ACCESSED_VARIABLE!>x<!> = 1
<!EXPECTED_TYPE_MISMATCH!>x = <!UNUSED_VALUE!>2<!><!> //the same <!EXPECTED_TYPE_MISMATCH!>x = <!UNUSED_VALUE!>2<!><!> //the same
} }
val array1 = MyArray1() val array1 = MyArray1()
val <!UNUSED_VARIABLE!>i<!> = { (): String -> val <!UNUSED_VARIABLE!>i<!>: () -> String = {
<!EXPECTED_TYPE_MISMATCH!>array1[2] = 23<!> <!EXPECTED_TYPE_MISMATCH!>array1[2] = 23<!>
} }
val <!UNUSED_VARIABLE!>fi<!> = { (): Int -> val <!UNUSED_VARIABLE!>fi<!>: () -> String = {
<!ASSIGNMENT_TYPE_MISMATCH!>array[2] = 23<!> <!EXPECTED_TYPE_MISMATCH!>array[2] = 23<!>
} }
val <!UNUSED_VARIABLE!>gi<!> = {(): Int -> val <!UNUSED_VARIABLE!>gi<!>: () -> String = {
var x = 1 var x = 1
<!ASSIGNMENT_TYPE_MISMATCH!>x += 21<!> <!EXPECTED_TYPE_MISMATCH!>x += 21<!>
} }
var m: MyNumber = MyNumber() var m: MyNumber = MyNumber()
val <!UNUSED_VARIABLE!>a<!> = { (): MyNumber -> val <!UNUSED_VARIABLE!>a<!>: () -> MyNumber = {
m++ m++
} }
} }
@@ -24,7 +24,7 @@ fun foo(a: A) {
} }
} }
val <!UNUSED_VARIABLE!>f<!> : () -> Int = { () : Int -> val <!UNUSED_VARIABLE!>f<!> : () -> Int = {
a.gen() //type mismatch, but Int can be derived a.gen() //type mismatch, but Int can be derived
} }
@@ -17,7 +17,7 @@ fun <T> Iterable<T>.foreach(operation: (element: T) -> Unit) : Unit = iterator()
fun <T> Iterable<T>.foreach(operation: (index: Int, element: T) -> Unit) : Unit = iterator() foreach operation fun <T> Iterable<T>.foreach(operation: (index: Int, element: T) -> Unit) : Unit = iterator() foreach operation
fun box() : String { fun box() : String {
return generic_invoker( { () : String -> "OK"} ) return generic_invoker( { "OK"} )
} }
fun <T> generic_invoker(gen : () -> T) : T { fun <T> generic_invoker(gen : () -> T) : T {
@@ -1,7 +1,7 @@
// KT-398 Internal error when property initializes with function // KT-398 Internal error when property initializes with function
class X<T>() { class X<T>() {
val check = { (a : Any) -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> } val check = { a : Any -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> }
} }
fun box() : String { fun box() : String {
@@ -1,7 +1,7 @@
// KT-399 Type argument inference not implemented for CALL_EXPRESSION // KT-399 Type argument inference not implemented for CALL_EXPRESSION
fun <T> getSameTypeChecker(<!UNUSED_PARAMETER!>obj<!>: T) : Function1<Any,Boolean> { fun <T> getSameTypeChecker(<!UNUSED_PARAMETER!>obj<!>: T) : Function1<Any,Boolean> {
return { (a : Any) -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> } return { a : Any -> a is <!CANNOT_CHECK_FOR_ERASED!>T<!> }
} }
fun box() : String { fun box() : String {
@@ -1,8 +1,8 @@
package kt402 package kt402
fun getTypeChecker() : (Any)->Boolean { fun getTypeChecker() : (Any)->Boolean {
<!UNUSED_FUNCTION_LITERAL!>{ (a : Any) -> a is <!UNRESOLVED_REFERENCE!>T<!> }<!> // reports unsupported <!UNUSED_FUNCTION_LITERAL!>{ a : Any -> a is <!UNRESOLVED_REFERENCE!>T<!> }<!> // reports unsupported
<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!> <!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
fun f() : (Any) -> Boolean { fun f() : (Any) -> Boolean {
return { (a : Any) -> a is String } return { a : Any -> a is String }
} }
@@ -13,7 +13,7 @@ fun invoker(<!UNUSED_PARAMETER!>gen<!> : () -> Int) : Int = 0
//more tests //more tests
fun t1() { fun t1() {
val <!UNUSED_VARIABLE!>v<!> = @l{ () : Int -> val <!UNUSED_VARIABLE!>v<!> = @l{
return@l 111 return@l 111
} }
} }
@@ -41,7 +41,7 @@ fun t3() : String {
} }
) )
invoker( invoker(
@l{ (): Int -> @l{
return@l 1 return@l 1
} }
) )
@@ -57,7 +57,7 @@ fun t4() : Int {
val <!UNUSED_VARIABLE!>h<!> : ()-> String = @l{ val <!UNUSED_VARIABLE!>h<!> : ()-> String = @l{
return@l "a" return@l "a"
} }
val <!UNUSED_VARIABLE!>g<!> : ()-> String = @l{ () : String -> val <!UNUSED_VARIABLE!>g<!> : ()-> String = @l{
return@l "a" return@l "a"
} }
@@ -1,6 +1,6 @@
fun test1() { fun test1() {
<!TYPE_MISMATCH!>1<!>. { String.(i: Int) -> i }(1) <!TYPE_MISMATCH!>1<!>. (fun String.(i: Int) = i )(1)
<!TYPE_MISMATCH!>1<!>.(@label{ String.(i: Int) -> i })(1) <!TYPE_MISMATCH!>1<!>.(fun String.label(i: Int) = i )(1)
} }
fun test2(f: String.(Int) -> Unit) { fun test2(f: String.(Int) -> Unit) {
@@ -7,8 +7,8 @@ fun test() {
fun bar(i: Int) = i fun bar(i: Int) = i
bar(foo(<!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(11) { (j: Int) -> j + 7 })) bar(foo(<!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(11) { j: Int -> j + 7 }))
bar(<!NAMED_PARAMETER_NOT_FOUND!>zz<!> = foo( bar(<!NAMED_PARAMETER_NOT_FOUND!>zz<!> = foo(
<!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(12) { (i: Int) -> i + i })<!NO_VALUE_FOR_PARAMETER!>)<!> <!NAMED_PARAMETER_NOT_FOUND!>xx<!> = zzz(12) { i: Int -> i + i })<!NO_VALUE_FOR_PARAMETER!>)<!>
} }
@@ -1,3 +1,3 @@
val i = 17 val i = 17
val f = { (): Int -> var i = 17; i } val f: () -> Int = { var i = 17; i }
@@ -1,5 +1,5 @@
fun f(): Int { fun f(): Int {
var i = 17 var i = 17
<!UNUSED_FUNCTION_LITERAL!>{ (): Unit -> var <!NAME_SHADOWING, UNUSED_VARIABLE!>i<!> = 18 }<!> <!UNUSED_FUNCTION_LITERAL!>{ var <!NAME_SHADOWING, UNUSED_VARIABLE!>i<!> = 18 }<!>
return i return i
} }
@@ -1,5 +1,5 @@
fun ff(): Int { fun ff(): Int {
var i = 1 var i = 1
<!UNUSED_FUNCTION_LITERAL!>{ (i: Int) -> i }<!> <!UNUSED_FUNCTION_LITERAL!>{ i: Int -> i }<!>
return i return i
} }
@@ -1,17 +1,16 @@
class A(val a:Int) { class A(val a:Int) {
inner class B() { inner class B() {
fun Char.xx() : Any { fun Char.xx() : Double.() -> Any {
this : Char this : Char
val <!UNUSED_VARIABLE!>a<!> = { val <!UNUSED_VARIABLE!>a<!>: Double.() -> Unit = {
Double.() ->
this : Double this : Double
this@xx : Char this@xx : Char
this@B : B this@B : B
this@A : A this@A : A
} }
val <!UNUSED_VARIABLE!>b<!> = @a{Double.() -> this@a : Double + this@xx : Char} val <!UNUSED_VARIABLE!>b<!>: Double.() -> Unit = @a{ this@a : Double + this@xx : Char}
val <!UNUSED_VARIABLE!>c<!> = @a{() -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char} val <!UNUSED_VARIABLE!>c<!> = @a{ -> <!NO_THIS!>this@a<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> this@xx : Char}
return (@a{Double.() -> this@a : Double + this@xx : Char}) return (@a{this@a : Double + this@xx : Char})
} }
} }
} }
@@ -12,6 +12,6 @@ internal final class A {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
internal final fun kotlin.Char.xx(): kotlin.Any internal final fun kotlin.Char.xx(): kotlin.Double.() -> kotlin.Any
} }
} }
@@ -1,8 +1,8 @@
package b package b
fun bar() { fun bar() {
val a1 = Array(1, {(i: Int) -> i}) val a1 = Array(1, {i: Int -> i})
val a2 = Array(1, {(i: Int) -> "$i"}) val a2 = Array(1, {i: Int -> "$i"})
val a3 = Array(1, {it}) val a3 = Array(1, {it})
a1 : Array<Int> a1 : Array<Int>
@@ -5,12 +5,12 @@
val y = this@A : A val y = this@A : A
val z = this : B val z = this : B
val Int.xx : Int get() = this : Int val Int.xx : Int get() = this : Int
fun Char.xx() : Any { fun Char.xx() : Double.() -> Unit {
this : Char this : Char
val <warning>a</warning> = {Double.() -> this : Double + this@xx : Char} val <warning>a</warning>: Double.() -> Unit = { this : Double + this@xx : Char}
val <warning>b</warning> = @a{Double.() -> this@a : Double + this@xx : Char} val <warning>b</warning>: Double.() -> Unit = @a{this@a : Double + this@xx : Char}
val <warning>c</warning> = @a{() -> <error>this@a</error> <error>+</error> this@xx : Char} val <warning>c</warning> = @a{<error>this@a</error> <error>+</error> this@xx : Char}
return (@a{Double.() -> this@a : Double + this@xx : Char}) return (@a{this@a : Double + this@xx : Char})
} }
} }
} }
+2 -2
View File
@@ -173,8 +173,8 @@ fun returnFunctionLiteralBlock(<info>a</info>: Any?): Function0<Int> {
else return { 1 } else return { 1 }
} }
fun returnFunctionLiteral(<info>a</info>: Any?): Function0<Int> = fun returnFunctionLiteral(<info>a</info>: Any?): Function0<Int> =
if (<info>a</info> is Int) { (): Int -> <info descr="Smart cast to kotlin.Int"><info>a</info></info> } if (<info>a</info> is Int) (fun (): Int = <info descr="Smart cast to kotlin.Int"><info>a</info></info>)
else { () -> 1 } else { -> 1 }
fun mergeSmartCasts(a: Any?) { fun mergeSmartCasts(a: Any?) {
if (a is String || a is Int) { if (a is String || a is Int) {
+1 -1
View File
@@ -1,7 +1,7 @@
package jet121 package jet121
fun box(): String { fun box(): String {
val answer = apply("OK") { String.(): Int -> val answer = apply("OK") {
get(0) get(0)
length() length()
} }
+2 -2
View File
@@ -1,8 +1,8 @@
fun foo1() : (Int) -> Int = { (x: Int) -> x } fun foo1() : (Int) -> Int = { x: Int -> x }
fun foo() { fun foo() {
val h : (Int) -> Int = foo1(); val h : (Int) -> Int = foo1();
h(1) h(1)
val m : (Int) -> Int = {(a : Int) -> 1}//foo1() val m : (Int) -> Int = {a : Int -> 1}//foo1()
m(1) m(1)
} }
@@ -4,7 +4,7 @@
fun foo() { fun foo() {
any { any {
(x: String?<caret>?) -> x: String?<caret>? ->
} }
} }