diff --git a/core/src/avm2/array.rs b/core/src/avm2/array.rs
index 1b7d8bbf4..fa69388c7 100644
--- a/core/src/avm2/array.rs
+++ b/core/src/avm2/array.rs
@@ -2,7 +2,10 @@
use crate::avm2::value::Value;
use gc_arena::Collect;
-use std::{cmp::max, ops::RangeBounds};
+use std::collections::BTreeMap;
+
+const MIN_SPARSE_LENGTH: usize = 32;
+const MAX_DENSE_LENGTH: usize = 1 << 28;
/// The array storage portion of an array object.
///
@@ -11,8 +14,62 @@ use std::{cmp::max, ops::RangeBounds};
/// the prototype.
#[derive(Clone, Collect)]
#[collect(no_drop)]
-pub struct ArrayStorage<'gc> {
- storage: Vec