[ruby/mmtk] Exit with error message if MMTK_PLAN is invalid

https://github.com/ruby/mmtk/commit/79ce2008a3
This commit is contained in:
Peter Zhu 2025-01-14 12:16:59 -05:00 committed by git
parent 1adcd960e2
commit f5fa1ee5f6
2 changed files with 18 additions and 13 deletions

View File

@ -91,6 +91,21 @@ fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCT
}
}
fn mmtk_builder_default_parse_plan() -> PlanSelector {
let plan_str = std::env::var("MMTK_PLAN")
.unwrap_or("MarkSweep".to_string());
match plan_str.as_str() {
"NoGC" => PlanSelector::NoGC,
"MarkSweep" => PlanSelector::MarkSweep,
"Immix" => PlanSelector::Immix,
_ => {
eprintln!("[FATAL] Invalid MMTK_PLAN {}", plan_str);
std::process::exit(1);
}
}
}
#[no_mangle]
pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
let mut builder = MMTKBuilder::new_no_env_vars();
@ -110,19 +125,9 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
std::process::exit(1);
}
let heap_mode = mmtk_builder_default_parse_heap_mode(heap_min, heap_max);
builder.options.gc_trigger.set(mmtk_builder_default_parse_heap_mode(heap_min, heap_max));
// Parse the env var, if it's not found set the plan name to MarkSweep
let plan_name = std::env::var("MMTK_PLAN")
.unwrap_or(String::from("MarkSweep"));
// Parse the plan name into a valid MMTK Plan, if the name is not a valid plan use MarkSweep
let plan_selector = plan_name.parse::<PlanSelector>()
.unwrap_or("MarkSweep".parse::<PlanSelector>().unwrap());
builder.options.plan.set(plan_selector);
builder.options.gc_trigger.set(heap_mode);
builder.options.plan.set(mmtk_builder_default_parse_plan());
Box::into_raw(Box::new(builder))
}

View File

@ -2,7 +2,7 @@
require_relative "helper"
module MMTk
class TestConfiguration < TestCase
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE).each do |var|
%w(MMTK_THREADS MMTK_HEAP_MIN MMTK_HEAP_MAX MMTK_HEAP_MODE MMTK_PLAN).each do |var|
define_method(:"test_invalid_#{var}") do
exit_code = assert_in_out_err(
[{ var => "foobar" }, "--"],