Resolve for rem/modAssign and mod/remAssign

rem/remAssign always wins if it is possible
This commit is contained in:
Mikhail Zarechenskiy
2016-12-06 17:41:22 +03:00
parent 8e73a902e4
commit bc4a492f4d
10 changed files with 156 additions and 3 deletions
@@ -0,0 +1,16 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class ModAndRemAssign {
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: String) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun modAssign(x: String) {}
operator fun remAssign(x: Int) {}
}
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModAndRemAssign.mod(x: String) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModAndRemAssign.modAssign(x: String) {}
fun test() {
val modAndRemAssign = ModAndRemAssign()
modAndRemAssign %= 1
}
@@ -0,0 +1,16 @@
package
public fun test(): kotlin.Unit
public operator fun ModAndRemAssign.mod(/*0*/ x: kotlin.String): ModAndRemAssign
public operator fun ModAndRemAssign.modAssign(/*0*/ x: kotlin.String): kotlin.Unit
public final class ModAndRemAssign {
public constructor ModAndRemAssign()
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): ModAndRemAssign
public final operator fun mod(/*0*/ x: kotlin.String): ModAndRemAssign
public final operator fun modAssign(/*0*/ x: kotlin.String): kotlin.Unit
public final operator fun remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,12 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
object RemAndRemAssign {
operator fun rem(x: Int) = RemAndRemAssign
}
operator fun RemAndRemAssign.remAssign(x: Int) {}
fun test() {
var c = RemAndRemAssign
c <!ASSIGN_OPERATOR_AMBIGUITY!>%=<!> 1
}
@@ -0,0 +1,12 @@
package
public fun test(): kotlin.Unit
public operator fun RemAndRemAssign.remAssign(/*0*/ x: kotlin.Int): kotlin.Unit
public object RemAndRemAssign {
private constructor RemAndRemAssign()
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 rem(/*0*/ x: kotlin.Int): RemAndRemAssign
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,16 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
class ModAndRemAssign {
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: Int) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun mod(x: String) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun modAssign(x: String) {}
operator fun rem(x: Int) = ModAndRemAssign()
}
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModAndRemAssign.mod(x: String) = ModAndRemAssign()
<!DEPRECATED_BINARY_MOD!>operator<!> fun ModAndRemAssign.modAssign(x: String) {}
fun test() {
var modAndRemAssign = ModAndRemAssign()
modAndRemAssign %= 1
}
@@ -0,0 +1,16 @@
package
public fun test(): kotlin.Unit
public operator fun ModAndRemAssign.mod(/*0*/ x: kotlin.String): ModAndRemAssign
public operator fun ModAndRemAssign.modAssign(/*0*/ x: kotlin.String): kotlin.Unit
public final class ModAndRemAssign {
public constructor ModAndRemAssign()
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): ModAndRemAssign
public final operator fun mod(/*0*/ x: kotlin.String): ModAndRemAssign
public final operator fun modAssign(/*0*/ x: kotlin.String): kotlin.Unit
public final operator fun rem(/*0*/ x: kotlin.Int): ModAndRemAssign
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,11 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
object RemAndModAssign {
<!DEPRECATED_BINARY_MOD!>operator<!> fun modAssign(x: String) {}
operator fun rem(x: Int) = RemAndModAssign
}
fun test2() {
var c = RemAndModAssign
c %= 123
}
@@ -0,0 +1,12 @@
package
public fun test2(): kotlin.Unit
public object RemAndModAssign {
private constructor RemAndModAssign()
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 modAssign(/*0*/ x: kotlin.String): kotlin.Unit
public final operator fun rem(/*0*/ x: kotlin.Int): RemAndModAssign
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}