Prohibit operator mod as declaration and calls that resolved via it

#KT-24197 Fixed
This commit is contained in:
Mikhail Zarechenskiy
2018-06-28 03:04:13 +03:00
parent c887b88ed9
commit 2e88f5c47d
16 changed files with 149 additions and 8 deletions
@@ -0,0 +1,32 @@
// !LANGUAGE: +ProhibitOperatorMod
// !DIAGNOSTICS: -UNUSED_PARAMETER
object ModAndRem {
<!FORBIDDEN_BINARY_MOD!>operator<!> fun mod(x: Int) {}
operator fun rem(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
operator fun remAssign(x: Int) {}
}
object JustMod {
<!FORBIDDEN_BINARY_MOD!>operator<!> fun mod(x: Int) {}
<!FORBIDDEN_BINARY_MOD!>operator<!> fun modAssign(x: Int) {}
}
fun foo() {
ModAndRem % 1
ModAndRem.mod(1)
ModAndRem.rem(1)
JustMod <!FORBIDDEN_BINARY_MOD_AS_REM!>%<!> 1
JustMod.mod(1)
val r = ModAndRem
r %= 1
r.remAssign(1)
val m = JustMod
m <!FORBIDDEN_BINARY_MOD_AS_REM!>%=<!> 1
m.modAssign(1)
}
@@ -0,0 +1,23 @@
package
public fun foo(): kotlin.Unit
public object JustMod {
private constructor JustMod()
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 final operator fun mod(/*0*/ x: kotlin.Int): kotlin.Unit
public final operator fun modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public object ModAndRem {
private constructor ModAndRem()
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 final operator fun mod(/*0*/ x: kotlin.Int): kotlin.Unit
public final operator fun modAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public final operator fun rem(/*0*/ x: kotlin.Int): kotlin.Unit
public final operator fun remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}