0088a644eb
Introduce `free_slots` in `StackAllocator` to keep track of physical slots that have been freed. When mapping a new virtual slot, the allocator first attempts to reuse a slot from the `free_slots` vector before allocating a new one. This change also includes a new function `collect_scope_locals` that identifies non-captured local variables defined within a block. After these expressions are lowered, the allocator reclaims the physical slots associated with these locals, making them available for reuse by subsequent blocks. A new test `test_slot_reuse_non_overlapping_scopes` is added to verify that distinct scopes correctly reuse stack slots, ensuring optimal stack usage.