765cad8448
Consider the following code:
```
fun test(a: List<String>) {
a.first()
}
```
The dispatch receiver type of `first` in this case is `List<T>` before
this change. After this change, it's `List<String>`.
In addition, this change also replace the dispatch receiver type with
the more specific type if available. For example, consider the following
```
class MyList: ArrayList<String>()
fun test(a: MyList) {
a.get(0)
}
```
The dispatch receiver type of `get` is `MyList`, instead of
`ArrayList<String>`. That is, a fake override is created in this case.
42 lines
2.0 KiB
Plaintext
Vendored
42 lines
2.0 KiB
Plaintext
Vendored
FILE: components.kt
|
|
public final data class D : R|kotlin/Any| {
|
|
public constructor(x: R|kotlin/Int|, y: R|kotlin/String|): R|D| {
|
|
super<R|kotlin/Any|>()
|
|
}
|
|
|
|
public final val x: R|kotlin/Int| = R|<local>/x|
|
|
public get(): R|kotlin/Int|
|
|
|
|
public final val y: R|kotlin/String| = R|<local>/y|
|
|
public get(): R|kotlin/String|
|
|
|
|
public final operator fun component1(): R|kotlin/Int|
|
|
|
|
public final operator fun component2(): R|kotlin/String|
|
|
|
|
public final fun copy(x: R|kotlin/Int| = this@R|/D|.R|/D.x|, y: R|kotlin/String| = this@R|/D|.R|/D.y|): R|D|
|
|
|
|
}
|
|
public final fun foo(list: R|kotlin/collections/List<D>|): R|kotlin/Unit| {
|
|
{
|
|
lval <iterator>: R|kotlin/collections/Iterator<D>| = R|<local>/list|.R|SubstitutionOverride<kotlin/collections/List.iterator: R|kotlin/collections/Iterator<D>|>|()
|
|
while(R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.hasNext: R|kotlin/Boolean|>|()) {
|
|
lval <destruct>: R|D| = R|<local>/<iterator>|.R|SubstitutionOverride<kotlin/collections/Iterator.next: R|D|>|()
|
|
lval x: R|kotlin/Int| = R|<local>/<destruct>|.R|/D.component1|()
|
|
lval y: R|kotlin/String| = R|<local>/<destruct>|.R|/D.component2|()
|
|
}
|
|
|
|
}
|
|
|
|
lval <destruct>: R|D| = R|<local>/list|.R|kotlin/collections/first|<R|D|>()
|
|
lval x: R|kotlin/Int| = R|<local>/<destruct>|.R|/D.component1|()
|
|
lval y: R|kotlin/String| = R|<local>/<destruct>|.R|/D.component2|()
|
|
R|<local>/list|.R|kotlin/collections/forEach|<R|D|>(<L> = forEach@fun <anonymous>(<destruct>: R|D|): R|kotlin/Unit| <inline=Inline, kind=UNKNOWN> {
|
|
lval x: R|kotlin/Int| = R|<local>/<destruct>|.R|/D.component1|()
|
|
lval y: R|kotlin/String| = R|<local>/<destruct>|.R|/D.component2|()
|
|
R|kotlin/io/println|(R|<local>/x|)
|
|
R|kotlin/io/println|(R|<local>/y|)
|
|
}
|
|
)
|
|
}
|