[IR] Support object-like interaction with MFVC function references
Signed-off-by: Evgeniy.Zhelenskiy <Evgeniy.Zhelenskiy@jetbrains.com> #KT-1179
This commit is contained in:
committed by
Space Team
parent
1660dc21b9
commit
c6e54e6433
@@ -15,6 +15,16 @@ class A(val point: DPoint) {
|
||||
fun f(otherDPoint: DPoint, z: Double) = point.f(z) * otherDPoint.f(z)
|
||||
}
|
||||
|
||||
fun consume(point1: DPoint, point2: DPoint, f: (DPoint, DPoint) -> DPoint) = f(point1, point2)
|
||||
|
||||
inline fun consumeInline(point1: DPoint, point2: DPoint, f: (DPoint, DPoint) -> DPoint) = f(point1, point2)
|
||||
|
||||
operator fun DPoint.plus(other: DPoint) = DPoint(this.x + other.x, this.y + other.y)
|
||||
|
||||
fun makeDPoint(x: Double, y: Double, maker: (Double, Double) -> DPoint) = maker(x, y)
|
||||
|
||||
inline fun makeDPointInline(x: Double, y: Double, maker: (Double, Double) -> DPoint) = maker(x, y)
|
||||
|
||||
fun box(): String {
|
||||
val dPoint = DPoint(1.0, 2.0)
|
||||
val a = A(dPoint)
|
||||
@@ -29,5 +39,17 @@ fun box(): String {
|
||||
require((::g)(dPoint, DPoint(1.0, 3.0).y) == 6.0)
|
||||
require((a::f)(dPoint, DPoint(1.0, 3.0).y) == 36.0)
|
||||
|
||||
require(consume(DPoint(1.0, 2.0), DPoint(3.0, 4.0), DPoint::plus) == DPoint(4.0, 6.0))
|
||||
require(consumeInline(DPoint(1.0, 2.0), DPoint(3.0, 4.0), DPoint::plus) == DPoint(4.0, 6.0))
|
||||
|
||||
require(makeDPoint(1.0, 2.0, ::DPoint) == DPoint(1.0, 2.0))
|
||||
require(makeDPointInline(1.0, 2.0, ::DPoint) == DPoint(1.0, 2.0))
|
||||
|
||||
require(::DPoint == ::DPoint)
|
||||
require(dPoint::f == dPoint::f)
|
||||
require(::g == ::g)
|
||||
require(a::f == a::f)
|
||||
require(DPoint::plus == DPoint::plus)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
|
||||
@@ -31,9 +31,163 @@ public final class DPoint {
|
||||
public synthetic final method unbox-impl-1(): double
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$11 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$11
|
||||
inner (anonymous) class FunctionReferencesKt$box$11
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(p0: double, p1: double): DPoint
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$13 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$13
|
||||
inner (anonymous) class FunctionReferencesKt$box$13
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(p0: double, p1: double): DPoint
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$14 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$14
|
||||
inner (anonymous) class FunctionReferencesKt$box$14
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(p0: double, p1: double): DPoint
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$15 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
inner (anonymous) class FunctionReferencesKt$box$15
|
||||
method <init>(p0: java.lang.Object): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(p0: double): java.lang.Double
|
||||
public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$16 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
inner (anonymous) class FunctionReferencesKt$box$16
|
||||
method <init>(p0: java.lang.Object): void
|
||||
public final @org.jetbrains.annotations.NotNull method invoke(p0: double): java.lang.Double
|
||||
public synthetic bridge method invoke(p0: java.lang.Object): java.lang.Object
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$17 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$17
|
||||
inner (anonymous) class FunctionReferencesKt$box$17
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double): java.lang.Double
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$18 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$18
|
||||
inner (anonymous) class FunctionReferencesKt$box$18
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double): java.lang.Double
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$19 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
inner (anonymous) class FunctionReferencesKt$box$19
|
||||
method <init>(p0: java.lang.Object): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double): java.lang.Double
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$20 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
inner (anonymous) class FunctionReferencesKt$box$20
|
||||
method <init>(p0: java.lang.Object): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double): java.lang.Double
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$21 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$21
|
||||
inner (anonymous) class FunctionReferencesKt$box$21
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double, p3: double): DPoint
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$22 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$22
|
||||
inner (anonymous) class FunctionReferencesKt$box$22
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double, p3: double): DPoint
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
synthetic final class FunctionReferencesKt$box$9 {
|
||||
// source: 'functionReferences.kt'
|
||||
enclosing method FunctionReferencesKt.box()Ljava/lang/String;
|
||||
public final static field INSTANCE: FunctionReferencesKt$box$9
|
||||
inner (anonymous) class FunctionReferencesKt$box$9
|
||||
static method <clinit>(): void
|
||||
method <init>(): void
|
||||
public synthetic bridge method invoke(p0: java.lang.Object, p1: java.lang.Object): java.lang.Object
|
||||
public final @org.jetbrains.annotations.NotNull method invoke-GPBa7dw(p0: double, p1: double, p2: double, p3: double): DPoint
|
||||
}
|
||||
|
||||
@kotlin.Metadata
|
||||
public final class FunctionReferencesKt {
|
||||
// source: 'functionReferences.kt'
|
||||
inner (anonymous) class FunctionReferencesKt$box$11
|
||||
inner (anonymous) class FunctionReferencesKt$box$13
|
||||
inner (anonymous) class FunctionReferencesKt$box$14
|
||||
inner (anonymous) class FunctionReferencesKt$box$15
|
||||
inner (anonymous) class FunctionReferencesKt$box$16
|
||||
inner (anonymous) class FunctionReferencesKt$box$17
|
||||
inner (anonymous) class FunctionReferencesKt$box$18
|
||||
inner (anonymous) class FunctionReferencesKt$box$19
|
||||
inner (anonymous) class FunctionReferencesKt$box$20
|
||||
inner (anonymous) class FunctionReferencesKt$box$21
|
||||
inner (anonymous) class FunctionReferencesKt$box$22
|
||||
inner (anonymous) class FunctionReferencesKt$box$9
|
||||
public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String
|
||||
public final static @org.jetbrains.annotations.NotNull method consume-lIoT8es(p0: double, p1: double, p2: double, p3: double, @org.jetbrains.annotations.NotNull p4: kotlin.jvm.functions.Function2): DPoint
|
||||
public final static @org.jetbrains.annotations.NotNull method consumeInline-lIoT8es(p0: double, p1: double, p2: double, p3: double, @org.jetbrains.annotations.NotNull p4: kotlin.jvm.functions.Function2): DPoint
|
||||
public final static method g-GPBa7dw(p0: double, p1: double, p2: double): double
|
||||
public final static @org.jetbrains.annotations.NotNull method makeDPoint(p0: double, p1: double, @org.jetbrains.annotations.NotNull p2: kotlin.jvm.functions.Function2): DPoint
|
||||
public final static @org.jetbrains.annotations.NotNull method makeDPointInline(p0: double, p1: double, @org.jetbrains.annotations.NotNull p2: kotlin.jvm.functions.Function2): DPoint
|
||||
public synthetic final static method mfvcConstructorReferenceHelper$0(p0: double, p1: double): DPoint
|
||||
public final static @org.jetbrains.annotations.NotNull method plus-GPBa7dw(p0: double, p1: double, p2: double, p3: double): DPoint
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user