Support parenthesized, typed and labeled expressions

This commit is contained in:
Mikhael Bogdanov
2013-11-25 16:31:35 +04:00
parent ceda72e0ca
commit 1391676281
5 changed files with 127 additions and 4 deletions
@@ -0,0 +1,40 @@
// !DIAGNOSTICS: -UNUSED_EXPRESSION -UNUSED_PARAMETER -UNUSED_VARIABLE
inline fun foo(bar1: (String.() -> Int) -> Int, bar2: (()->Int) -> Int) {
bar1 @label {
this@label.length
}
bar1 {
this.length
}
//unmute after KT-4247 fix
//bar1 {
// this@bar1.length
//}
bar2 @l {
11
}
bar2 {
12
}
}
inline fun foo2(bar1: (String.() -> Int) -> Int) {
@l1 <!USAGE_IS_NOT_INLINABLE!>bar1<!>
@l2 bar1 {
11
}
(@l3 bar1) {
11
}
(@l5 (@l4 bar1)) {
11
}
}
@@ -0,0 +1,25 @@
inline fun inlineFunWithInvoke(s: (p: Int) -> Unit) {
(s)(11)
(s).invoke(11)
(s) invoke 11
(<!USAGE_IS_NOT_INLINABLE!>s<!>)
}
inline fun Function1<Int, Unit>.inlineExt() {
(this).invoke(11)
(this) invoke 11
(this)(11)
(<!USAGE_IS_NOT_INLINABLE!>this<!>)
}
inline fun inlineFunWithInvoke2(s: (p: Int) -> Unit) {
(((s)))(11)
(((s))).invoke(11)
(((s))) invoke 11
(((<!USAGE_IS_NOT_INLINABLE!>s<!>)))
}
inline fun propagation(s: (p: Int) -> Unit) {
inlineFunWithInvoke((@label (s: (p: Int) -> Unit)))
inlineFunWithInvoke((@label2 @label (s: (p: Int) -> Unit)))
}
@@ -0,0 +1,21 @@
inline fun inlineFunWithInvoke(s: (p: Int) -> Unit) {
(s: (p: Int) -> Unit)(11)
(s: (p: Int) -> Unit).invoke(11)
(s: (p: Int) -> Unit) invoke 11
(<!USAGE_IS_NOT_INLINABLE!>s<!>)
}
inline fun Function1<Int, Unit>.inlineExt() {
(this: Function1<Int, Unit>).invoke(11)
(this: Function1<Int, Unit>) invoke 11
(this: Function1<Int, Unit>)(11)
(<!USAGE_IS_NOT_INLINABLE!>this<!>: Function1<Int, Unit>)
}
inline fun inlineFunWithInvoke2(s: (p: Int) -> Unit) {
(((s: (p: Int) -> Unit)))(11)
(((s: (p: Int) -> Unit): (p: Int) -> Unit): (p: Int) -> Unit)(11)
(((s: (p: Int) -> Unit): (p: Int) -> Unit): (p: Int) -> Unit).invoke(11)
(((s: (p: Int) -> Unit): (p: Int) -> Unit): (p: Int) -> Unit) invoke 11
(((<!USAGE_IS_NOT_INLINABLE!>s<!>: (p: Int) -> Unit)))
}