diff --git a/js/js.libraries/src/core/generated/_CollectionsJs.kt b/js/js.libraries/src/core/generated/_CollectionsJs.kt index 710ceb11c7e..7f55d417a78 100644 --- a/js/js.libraries/src/core/generated/_CollectionsJs.kt +++ b/js/js.libraries/src/core/generated/_CollectionsJs.kt @@ -745,7 +745,7 @@ public fun List.takeLast(n: Int): List { for (index in size - n .. size - 1) list.add(this[index]) } else { - for (item in listIterator(n)) + for (item in listIterator(size - n)) list.add(item) } return list diff --git a/libraries/stdlib/src/generated/_Collections.kt b/libraries/stdlib/src/generated/_Collections.kt index 2209f358bee..d622d6315ca 100644 --- a/libraries/stdlib/src/generated/_Collections.kt +++ b/libraries/stdlib/src/generated/_Collections.kt @@ -745,7 +745,7 @@ public fun List.takeLast(n: Int): List { for (index in size - n .. size - 1) list.add(this[index]) } else { - for (item in listIterator(n)) + for (item in listIterator(size - n)) list.add(item) } return list diff --git a/libraries/stdlib/test/collections/CollectionTest.kt b/libraries/stdlib/test/collections/CollectionTest.kt index 2d035aee8b8..cbe4ff73dcc 100644 --- a/libraries/stdlib/test/collections/CollectionTest.kt +++ b/libraries/stdlib/test/collections/CollectionTest.kt @@ -579,6 +579,10 @@ class CollectionTest { assertEquals(coll, coll.takeLast(coll.size + 1)) assertFails { coll.takeLast(-1) } + + val collWithoutRandomAccess = object : List by coll {} + assertEquals(listOf("abc"), collWithoutRandomAccess.takeLast(1)) + assertEquals(listOf("bar", "abc"), collWithoutRandomAccess.takeLast(2)) } @Test fun takeLastWhile() { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt index ee945792814..af056920119 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/Filtering.kt @@ -231,7 +231,7 @@ fun filtering(): List { for (index in size - n .. size - 1) list.add(this[index]) } else { - for (item in listIterator(n)) + for (item in listIterator(size - n)) list.add(item) } return list