diff --git a/crates/js/src/builtins.rs b/crates/js/src/builtins.rs index 268d700..fb0ce23 100644 --- a/crates/js/src/builtins.rs +++ b/crates/js/src/builtins.rs @@ -3915,11 +3915,10 @@ fn init_map_set_builtins(vm: &mut Vm) { /// __entries__: GcRef to an object with "0_k", "0_v", "1_k", "1_v", ... /// __entry_count__: total slots allocated (some may be deleted) /// __live_count__: number of non-deleted entries -/// Deleted entries have their key set to a special "__deleted__" marker. +/// Deleted entries have their key property removed from the entries object. const ENTRIES_KEY: &str = "__entries__"; const ENTRY_COUNT_KEY: &str = "__entry_count__"; const LIVE_COUNT_KEY: &str = "__live_count__"; -const DELETED_MARKER: &str = "__deleted__"; /// Create a new empty Map/Set internal storage object. fn make_collection_obj(gc: &mut Gc, proto: Option) -> GcRef { @@ -4017,13 +4016,7 @@ fn entry_key_at(gc: &Gc, entries: GcRef, i: usize) -> Option match gc.get(entries) { Some(HeapObject::Object(data)) => { let k = format!("{i}_k"); - let prop = data.properties.get(&k)?; - if let Value::String(s) = &prop.value { - if s == DELETED_MARKER { - return None; - } - } - Some(prop.value.clone()) + data.properties.get(&k).map(|p| p.value.clone()) } _ => None, } @@ -4053,13 +4046,10 @@ fn set_entry_at(gc: &mut Gc, entries: GcRef, i: usize, key: Value, v } } -/// Mark entry at index `i` as deleted. +/// Mark entry at index `i` as deleted by removing its key and value properties. fn delete_entry_at(gc: &mut Gc, entries: GcRef, i: usize) { if let Some(HeapObject::Object(data)) = gc.get_mut(entries) { - data.properties.insert( - format!("{i}_k"), - Property::builtin(Value::String(DELETED_MARKER.to_string())), - ); + data.properties.remove(&format!("{i}_k")); data.properties.remove(&format!("{i}_v")); } }