avm1: fix array unshift

update array_trivial test for it
This commit is contained in:
Floens 2020-08-15 15:33:42 +02:00 committed by Mike Welsh
parent 70caf983ab
commit 95acc14190
4 changed files with 16 additions and 2 deletions

View File

@ -182,10 +182,11 @@ pub fn unshift<'gc>(
) -> Result<Value<'gc>, Error<'gc>> { ) -> Result<Value<'gc>, Error<'gc>> {
let old_length = this.length(); let old_length = this.length();
let new_length = old_length + args.len(); let new_length = old_length + args.len();
let offset = new_length - old_length; let offset = args.len();
if old_length > 0 { if old_length > 0 {
for i in (old_length - 1..new_length).rev() { // Move all elements up by [offset], in reverse order.
for i in (offset..new_length).rev() {
this.set_array_element( this.set_array_element(
i, i,
this.array_element(i - offset), this.array_element(i - offset),
@ -195,6 +196,7 @@ pub fn unshift<'gc>(
} }
for i in 0..args.len() { for i in 0..args.len() {
// Put the new elements at the start of the array.
this.set_array_element( this.set_array_element(
i, i,
args.get(i).unwrap().to_owned(), args.get(i).unwrap().to_owned(),

View File

@ -191,3 +191,15 @@ undefined
// array // array
1,2 1,2
// array.unshift(1,2)
4
// array
1,2,1,2
// array.unshift(3,4,5)
7
// array
3,4,5,1,2,1,2