[NI-MIGRATE] Update diagnostic messages

This commit is contained in:
Mikhail Zarechenskiy
2020-02-10 01:17:03 +03:00
parent cd0012c527
commit 319a38bd5c
38 changed files with 123 additions and 52 deletions
@@ -48,7 +48,8 @@ class JavaSyntheticScopes(
init {
val samConversionPerArgumentIsEnabled =
languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument)
languageVersionSettings.supportsFeature(LanguageFeature.SamConversionPerArgument) &&
languageVersionSettings.supportsFeature(LanguageFeature.NewInference)
val javaSyntheticPropertiesScope = JavaSyntheticPropertiesScope(storageManager, lookupTracker)
val scopesFromExtensions = SyntheticScopeProviderExtension
@@ -13,6 +13,6 @@ fun bar2(body: (String, Int) -> String): String {
}
fun test() {
bar1(<!NI;UNSUPPORTED_FEATURE, OI;TYPE_MISMATCH!>::foo<!>)
bar1(<!OI;TYPE_MISMATCH!>::foo<!>)
bar2(::foo)
}
@@ -13,5 +13,5 @@ public class J {
package test
fun test() {
J("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r<!> = <!NI;TYPE_MISMATCH!>{ }<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z<!> = false)
J("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r<!> = { }, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z<!> = false)
}
@@ -13,5 +13,5 @@ public class J {
package test
fun test() {
J.foo("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r<!> = <!NI;TYPE_MISMATCH!>{ }<!>, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z<!> = false)
J.foo("", <!NAMED_ARGUMENTS_NOT_ALLOWED!>r<!> = { }, <!NAMED_ARGUMENTS_NOT_ALLOWED!>z<!> = false)
}
@@ -21,7 +21,7 @@ class B {
fun main() {
fun println() {}
// All parameters in SAM adapter of `foo` have functional types
B().foo(<!TYPE_MISMATCH!>{ println() }<!>, B.bar())
B().foo(<!OI;TYPE_MISMATCH!>{ println() }<!>, B.bar())
// So you should use SAM constructors when you want to use mix lambdas and Java objects
B().foo(Runnable { println() }, B.bar())
B().foo({ println() }, { it: Any? -> it == null } )
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference -SamConversionForKotlinFunctions
// FILE: Runnable.java
public interface Runnable {
void run();
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference -SamConversionForKotlinFunctions
// FILE: Runnable.java
public interface Runnable {
void run();
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions -ProhibitVarargAsArrayAfterSamArgument
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions -ProhibitVarargAsArrayAfterSamArgument -SamConversionPerArgument
// IGNORE_BACKEND: JS, JS_IR
// SKIP_TXT
@@ -1,5 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions -ProhibitVarargAsArrayAfterSamArgument
// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions -ProhibitVarargAsArrayAfterSamArgument -SamConversionPerArgument
// IGNORE_BACKEND: JS, JS_IR
// SKIP_TXT
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference -SamConversionForKotlinFunctions
// FILE: Runnable.java
public interface Runnable {
void run();
@@ -1,4 +1,4 @@
// !LANGUAGE: +NewInference
// !LANGUAGE: +NewInference -SamConversionForKotlinFunctions
// FILE: Runnable.java
public interface Runnable {
void run();
@@ -25,7 +25,7 @@ fun test3(a: () -> Unit) {
fun test4(a: () -> Unit, b: () -> Unit) {
if (a is Runnable) {
J().run2(a, b)
J().run2(<!DEBUG_INFO_SMARTCAST!>a<!>, b)
}
}
@@ -21,7 +21,7 @@ class B : A() {
}
if (d.x is B) {
<!SMARTCAST_IMPOSSIBLE!>d.x<!>.<!NI;INVISIBLE_MEMBER!>foo<!> {}
<!OI;SMARTCAST_IMPOSSIBLE!>d.x<!>.<!NI;INVISIBLE_MEMBER!>foo<!> {}
}
}
}
@@ -2,7 +2,7 @@
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass<Int>): Int {
val inner = javaClass.createInner<String>()
return <!TYPE_MISMATCH!>inner.<!NI;TYPE_MISMATCH!>doSomething(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, "") <!TYPE_MISMATCH!>{ }<!><!><!>
return <!TYPE_MISMATCH!>inner.doSomething(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, "") <!OI;TYPE_MISMATCH!>{ }<!><!>
}
// FILE: JavaClass.java
@@ -1,9 +1,9 @@
// !WITH_NEW_INFERENCE
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.doSomething(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p<!> = 1) <!NI;TYPE_MISMATCH!>{
javaClass.doSomething(<!NAMED_ARGUMENTS_NOT_ALLOWED!>p<!> = 1) {
bar()
}<!>
}
}
fun bar(){}
@@ -1,7 +1,7 @@
// !WITH_NEW_INFERENCE
// FILE: KotlinFile.kt
fun foo(javaClass: JavaClass) {
javaClass.<!INVISIBLE_MEMBER!>doSomething<!> <!TYPE_MISMATCH!>{ }<!>
javaClass.<!INVISIBLE_MEMBER!>doSomething<!> <!OI;TYPE_MISMATCH!>{ }<!>
}
// FILE: JavaClass.java
@@ -12,9 +12,9 @@ fun foo(javaClass: JavaClass, kotlinClass: KotlinClass) {
bar()
}
kotlinClass.doSomething <!TYPE_MISMATCH!>{
kotlinClass.doSomething {
bar()
}<!>
}
javaClass.doSomething2 <!TYPE_MISMATCH!>{
bar()
@@ -1,4 +1,6 @@
public final fun provideDelegate(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun setValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ p2: dynamic): dynamic
public final fun provideDelegate(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
@@ -1,5 +1,5 @@
fun test(m: Map<String, Int>, mm: MutableMap<Int, String>) {
m.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>getOrDefault<!>("2", 1)
mm.<!UNRESOLVED_REFERENCE_WRONG_RECEIVER!>getOrDefault<!>(1, "2")
m.<!DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>getOrDefault<!>("2", 1)
mm.<!DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>getOrDefault<!>(1, "2")
mm.remove(1, <!TOO_MANY_ARGUMENTS!>"2"<!>)
}
@@ -1,3 +1,6 @@
// !WITH_NEW_INFERENCE
// NI_EXPECTED_FILE
// FILE: A.java
public @interface A {
String[] value();
@@ -1,3 +1,6 @@
// !WITH_NEW_INFERENCE
// NI_EXPECTED_FILE
// FILE: A.java
public @interface A {
String[] value();
@@ -23,5 +26,5 @@ public @interface A {
@A fun test8() {}
@A(x = Any::class, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>*arrayOf("5", "6")<!>, <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"7"<!>, y = 3) fun test9() {}
@A(x = Any::class, value = ["5", "6"], <!MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"7"<!>, y = 3) fun test10() {}
@A(x = Any::class, value = ["5", "6"], <!NI;POSITIONED_VALUE_ARGUMENT_FOR_JAVA_ANNOTATION, NI;TYPE_MISMATCH, OI;MIXING_NAMED_AND_POSITIONED_ARGUMENTS!>"7"<!>, y = 3) fun test10() {}
@A(x = Any::class, value = ["5", "6", "7"], y = 3) fun test11() {}
@@ -0,0 +1,23 @@
package
@A(value = {"1", "2", "3"}) public fun test1(): kotlin.Unit
@A(value = {"5", "6"}, x = "7", y = 3) public fun test10(): kotlin.Unit
@A(value = {"5", "6", "7"}, x = kotlin.Any::class, y = 3) public fun test11(): kotlin.Unit
@A(value = {"4"}) public fun test2(): kotlin.Unit
@A(value = {{"5", "6"}, "7"}) public fun test3(): kotlin.Unit
@A(value = {"1", "2", "3"}, x = kotlin.String::class) public fun test4(): kotlin.Unit
@A(value = {"4"}, y = 2) public fun test5(): kotlin.Unit
@A(value = {{"5", "6"}, "7"}, x = kotlin.Any::class, y = 3) public fun test6(): kotlin.Unit
@A(value = {}) public fun test7(): kotlin.Unit
@A(value = {}) public fun test8(): kotlin.Unit
@A(value = {}, x = kotlin.Any::class, y = 3) public fun test9(): kotlin.Unit
public final annotation class A : kotlin.Annotation {
public constructor A(/*0*/ vararg value: kotlin.String /*kotlin.Array<out kotlin.String>*/, /*1*/ x: kotlin.reflect.KClass<*> = ..., /*2*/ y: kotlin.Int = ...)
public final val value: kotlin.Array<kotlin.String>
public final val x: kotlin.reflect.KClass<*>
public final val y: kotlin.Int
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 toString(): kotlin.String
}
@@ -77,13 +77,13 @@ fun test() {
this@a.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>(1)
this@a.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>(1)
<!NI;NON_APPLICABLE_CALL_FOR_BUILDER_INFERENCE!>with(this) {
<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
this@with.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
with(this) {
<!OI;ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
this@with.<!NI;DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE, OI;ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
this@with.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
}<!>
<!OI;ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
this@with.<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
}
}
}
@@ -83,11 +83,11 @@ fun test() {
this@a.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>(1)
with(this) {
<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
this@with.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield<!>("")
yield("")
this@with.<!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE, DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE!>yield<!>("")
<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
this@with.<!ILLEGAL_RESTRICTED_SUSPENDING_FUNCTION_CALL!>yield2<!>("")
yield2("")
this@with.<!DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>yield2<!>("")
}
}
}
@@ -1,7 +1,7 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !CHECK_TYPE
// COMMON_COROUTINES_TEST
// !WITH_NEW_INFERENCE
// COMMON_COROUTINES_TEST
import COROUTINES_PACKAGE.*
class Controller {
@@ -38,7 +38,7 @@ fun test() {
severalParams("", 89) checkType { _<Double>() }
// TODO: should we allow somehow to call with passing continuation explicitly?
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>6.9<!>) checkType { <!TYPE_MISMATCH!>_<!><Unit>() }
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>this <!CAST_NEVER_SUCCEEDS!>as<!> Continuation<Double><!>) checkType { <!TYPE_MISMATCH!>_<!><Unit>() }
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>6.9<!>) checkType { <!NI;TYPE_MISMATCH, OI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, OI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Unit>() }
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>this <!CAST_NEVER_SUCCEEDS!>as<!> Continuation<Double><!>) checkType { <!NI;TYPE_MISMATCH, OI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, OI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Unit>() }
}
}
@@ -1,3 +1,5 @@
// !WITH_NEW_INFERENCE
// FILE: J.java
import kotlin.jvm.functions.Function1;
@@ -1,3 +1,5 @@
// !WITH_NEW_INFERENCE
// FILE: J.java
import kotlin.jvm.functions.Function1;
@@ -12,5 +14,5 @@ fun useJ(j: J) {
}
fun jj() {
useJ(<!TYPE_MISMATCH!>{}<!>)
useJ(<!TYPE_MISMATCH!>{<!NI;TYPE_MISMATCH!><!>}<!>)
}
@@ -1,4 +1,4 @@
// !LANGUAGE: -RefinedSamAdaptersPriority
// !LANGUAGE: -RefinedSamAdaptersPriority -NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
@@ -1,4 +1,4 @@
// !LANGUAGE: -RefinedSamAdaptersPriority
// !LANGUAGE: -RefinedSamAdaptersPriority -NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
@@ -1,4 +1,4 @@
// !LANGUAGE: -RefinedSamAdaptersPriority
// !LANGUAGE: -RefinedSamAdaptersPriority -NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
@@ -1,4 +1,4 @@
// !LANGUAGE: -RefinedSamAdaptersPriority
// !LANGUAGE: -RefinedSamAdaptersPriority -NewInference
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !CHECK_TYPE
// !WITH_NEW_INFERENCE
@@ -10,7 +10,7 @@ fun <K> select(x: K, y: K): K = TODO()
fun takeUByte(u: UByte) {}
fun foo() {
<!NI;TYPE_MISMATCH!>select<!>(1, 1u) checkType { <!NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Comparable<*>>() }
<!NI;TYPE_MISMATCH!>select<!>(1, 1u) checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER!>_<!><Comparable<*>>() }
takeUByte(<!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>id(1)<!>)
1 <!NONE_APPLICABLE!>+<!> 1u
@@ -1,4 +1,5 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// !WITH_NEW_INFERENCE
// RENDER_PACKAGE: test
// SKIP_COMPILED_JAVA
@@ -88,9 +89,9 @@ fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>)
a.bar(<!TYPE_MISMATCH!>l1 <!UNCHECKED_CAST!>as L<Map<String, Int>, Int?><!><!>)
a.baz1().t().containsKey("")
a.baz1().t().<!TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsKey<!>(null)
a.baz1().t().<!NI;TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING, OI;TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsKey<!>(null)
a.baz1().t().containsValue(1)
a.baz1().t().<!TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsValue<!>(null)
a.baz1().t().<!NI;TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING, OI;TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsValue<!>(null)
a.baz1().s().hashCode()
a.baz1().setT(l.t())
@@ -104,8 +105,8 @@ fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>)
a.baz2().s().hashCode()
a.baz3().t().containsKey("")
a.baz3().t().<!TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsKey<!>(null)
a.baz3().t().<!NI;TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING, OI;TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsKey<!>(null)
a.baz3().t().containsValue(1)
a.baz3().t().<!TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsValue<!>(null)
a.baz3().t().<!NI;TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING, OI;TYPE_INFERENCE_ONLY_INPUT_TYPES!>containsValue<!>(null)
a.baz3().s().hashCode()
}
@@ -1,7 +1,33 @@
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:11:24: error: unresolved reference: httpserver
val s: com.sun.net.httpserver.HttpServer? = null
^
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:12:5: error: overload resolution ambiguity:
public inline fun println(message: Any?): Unit defined in kotlin.io
public inline fun println(message: Boolean): Unit defined in kotlin.io
public inline fun println(message: Byte): Unit defined in kotlin.io
public inline fun println(message: Char): Unit defined in kotlin.io
public inline fun println(message: CharArray): Unit defined in kotlin.io
public inline fun println(message: Double): Unit defined in kotlin.io
public inline fun println(message: Float): Unit defined in kotlin.io
public inline fun println(message: Int): Unit defined in kotlin.io
public inline fun println(message: Long): Unit defined in kotlin.io
public inline fun println(message: Short): Unit defined in kotlin.io
println(s)
^
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:19:20: error: unresolved reference: javafx
val x: com.sun.javafx.tools.ant.AntLog? = null
^
compiler/testData/javaModules/jdkModulesFromNamed/main/test.kt:20:5: error: overload resolution ambiguity:
public inline fun println(message: Any?): Unit defined in kotlin.io
public inline fun println(message: Boolean): Unit defined in kotlin.io
public inline fun println(message: Byte): Unit defined in kotlin.io
public inline fun println(message: Char): Unit defined in kotlin.io
public inline fun println(message: CharArray): Unit defined in kotlin.io
public inline fun println(message: Double): Unit defined in kotlin.io
public inline fun println(message: Float): Unit defined in kotlin.io
public inline fun println(message: Int): Unit defined in kotlin.io
public inline fun println(message: Long): Unit defined in kotlin.io
public inline fun println(message: Short): Unit defined in kotlin.io
println(x)
^
COMPILATION_ERROR
@@ -1,4 +1,17 @@
compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt:19:33: error: unresolved reference: ant
val x: com.sun.javafx.tools.ant.AntLog? = null
^
compiler/testData/javaModules/jdkModulesFromUnnamed/main/test.kt:20:5: error: overload resolution ambiguity:
public inline fun println(message: Any?): Unit defined in kotlin.io
public inline fun println(message: Boolean): Unit defined in kotlin.io
public inline fun println(message: Byte): Unit defined in kotlin.io
public inline fun println(message: Char): Unit defined in kotlin.io
public inline fun println(message: CharArray): Unit defined in kotlin.io
public inline fun println(message: Double): Unit defined in kotlin.io
public inline fun println(message: Float): Unit defined in kotlin.io
public inline fun println(message: Int): Unit defined in kotlin.io
public inline fun println(message: Long): Unit defined in kotlin.io
public inline fun println(message: Short): Unit defined in kotlin.io
println(x)
^
COMPILATION_ERROR
+2 -5
View File
@@ -3,9 +3,6 @@ error: unresolved reference: unresolved
(listOf(1) as List<String>).unresolved()
^
>>> listOf<String>(1!!)
error: the integer literal does not conform to the expected type String?
error: type mismatch: inferred type is IntegerLiteralType[Int,Long,Byte,Short] but String was expected
listOf<String>(1!!)
^
error: type mismatch: inferred type is Int but String was expected
listOf<String>(1!!)
^
^
-1
View File
@@ -14,7 +14,6 @@
1.`foo`foo()
true.`T.foo`foo()
3.`!null`foo(4)
1
}
@@ -69,7 +69,6 @@ fun <T> tt(t : T) : T {
(x`java::java.util.ArrayList.set()`[1]) = null
x`java::java.util.ArrayList.set()`[null] = null
(x`java::java.util.ArrayList.set()`[null, 2]) = null
(`not`!foo)[1]`:kotlin::Char`
val y = Bar()
y`inc`++
`inc`++y