Skip to content

Commit 74dadfd

Browse files
authored
Minor refactor to remove duplicate code using ReservedAllocators (#1309)
1 parent 2569dcd commit 74dadfd

File tree

1 file changed

+49
-36
lines changed

1 file changed

+49
-36
lines changed

src/plan/mutator_context.rs

+49-36
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,43 @@ impl ReservedAllocators {
409409
"Allocator mapping declared more free list allocators than the max allowed."
410410
);
411411
}
412+
413+
// We may add more allocators from common/base plan after reserved allocators.
414+
415+
fn add_bump_pointer_allocator(&mut self) -> AllocatorSelector {
416+
let selector = AllocatorSelector::BumpPointer(self.n_bump_pointer);
417+
self.n_bump_pointer += 1;
418+
selector
419+
}
420+
fn add_large_object_allocator(&mut self) -> AllocatorSelector {
421+
let selector = AllocatorSelector::LargeObject(self.n_large_object);
422+
self.n_large_object += 1;
423+
selector
424+
}
425+
#[allow(dead_code)]
426+
fn add_malloc_allocator(&mut self) -> AllocatorSelector {
427+
let selector = AllocatorSelector::Malloc(self.n_malloc);
428+
self.n_malloc += 1;
429+
selector
430+
}
431+
#[allow(dead_code)]
432+
fn add_immix_allocator(&mut self) -> AllocatorSelector {
433+
let selector = AllocatorSelector::Immix(self.n_immix);
434+
self.n_immix += 1;
435+
selector
436+
}
437+
#[allow(dead_code)]
438+
fn add_mark_compact_allocator(&mut self) -> AllocatorSelector {
439+
let selector = AllocatorSelector::MarkCompact(self.n_mark_compact);
440+
self.n_mark_compact += 1;
441+
selector
442+
}
443+
#[allow(dead_code)]
444+
fn add_free_list_allocator(&mut self) -> AllocatorSelector {
445+
let selector = AllocatorSelector::FreeList(self.n_free_list);
446+
self.n_free_list += 1;
447+
selector
448+
}
412449
}
413450

414451
/// Create an allocator mapping for spaces in Common/BasePlan for a plan. A plan should reserve its own allocators.
@@ -430,35 +467,22 @@ pub(crate) fn create_allocator_mapping(
430467

431468
#[cfg(feature = "code_space")]
432469
{
433-
map[AllocationSemantics::Code] = AllocatorSelector::BumpPointer(reserved.n_bump_pointer);
434-
reserved.n_bump_pointer += 1;
435-
436-
map[AllocationSemantics::LargeCode] =
437-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer);
438-
reserved.n_bump_pointer += 1;
470+
map[AllocationSemantics::Code] = reserved.add_bump_pointer_allocator();
471+
map[AllocationSemantics::LargeCode] = reserved.add_bump_pointer_allocator();
439472
}
440473

441474
#[cfg(feature = "ro_space")]
442475
{
443-
map[AllocationSemantics::ReadOnly] =
444-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer);
445-
reserved.n_bump_pointer += 1;
476+
map[AllocationSemantics::ReadOnly] = reserved.add_bump_pointer_allocator();
446477
}
447478

448479
// spaces in common plan
449480

450481
if include_common_plan {
451-
map[AllocationSemantics::Immortal] =
452-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer);
453-
reserved.n_bump_pointer += 1;
454-
455-
map[AllocationSemantics::Los] = AllocatorSelector::LargeObject(reserved.n_large_object);
456-
reserved.n_large_object += 1;
457-
482+
map[AllocationSemantics::Immortal] = reserved.add_bump_pointer_allocator();
483+
map[AllocationSemantics::Los] = reserved.add_large_object_allocator();
458484
// TODO: This should be freelist allocator once we use marksweep for nonmoving space.
459-
map[AllocationSemantics::NonMoving] =
460-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer);
461-
reserved.n_bump_pointer += 1;
485+
map[AllocationSemantics::NonMoving] = reserved.add_bump_pointer_allocator();
462486
}
463487

464488
reserved.validate();
@@ -487,45 +511,34 @@ pub(crate) fn create_space_mapping<VM: VMBinding>(
487511
#[cfg(feature = "code_space")]
488512
{
489513
vec.push((
490-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer),
514+
reserved.add_bump_pointer_allocator(),
491515
&plan.base().code_space,
492516
));
493-
reserved.n_bump_pointer += 1;
494517
vec.push((
495-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer),
518+
reserved.add_bump_pointer_allocator(),
496519
&plan.base().code_lo_space,
497520
));
498-
reserved.n_bump_pointer += 1;
499521
}
500522

501523
#[cfg(feature = "ro_space")]
502-
{
503-
vec.push((
504-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer),
505-
&plan.base().ro_space,
506-
));
507-
reserved.n_bump_pointer += 1;
508-
}
524+
vec.push((reserved.add_bump_pointer_allocator(), &plan.base().ro_space));
509525

510526
// spaces in CommonPlan
511527

512528
if include_common_plan {
513529
vec.push((
514-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer),
530+
reserved.add_bump_pointer_allocator(),
515531
plan.common().get_immortal(),
516532
));
517-
reserved.n_bump_pointer += 1;
518533
vec.push((
519-
AllocatorSelector::LargeObject(reserved.n_large_object),
534+
reserved.add_large_object_allocator(),
520535
plan.common().get_los(),
521536
));
522-
reserved.n_large_object += 1;
523537
// TODO: This should be freelist allocator once we use marksweep for nonmoving space.
524538
vec.push((
525-
AllocatorSelector::BumpPointer(reserved.n_bump_pointer),
539+
reserved.add_bump_pointer_allocator(),
526540
plan.common().get_nonmoving(),
527541
));
528-
reserved.n_bump_pointer += 1;
529542
}
530543

531544
reserved.validate();

0 commit comments

Comments
 (0)