@@ -91,6 +91,21 @@ fn mmtk_builder_default_parse_heap_mode(heap_min: usize, heap_max: usize) -> GCT
91
91
}
92
92
}
93
93
94
+ fn mmtk_builder_default_parse_plan ( ) -> PlanSelector {
95
+ let plan_str = std:: env:: var ( "MMTK_PLAN" )
96
+ . unwrap_or ( "MarkSweep" . to_string ( ) ) ;
97
+
98
+ match plan_str. as_str ( ) {
99
+ "NoGC" => PlanSelector :: NoGC ,
100
+ "MarkSweep" => PlanSelector :: MarkSweep ,
101
+ "Immix" => PlanSelector :: Immix ,
102
+ _ => {
103
+ eprintln ! ( "[FATAL] Invalid MMTK_PLAN {}" , plan_str) ;
104
+ std:: process:: exit ( 1 ) ;
105
+ }
106
+ }
107
+ }
108
+
94
109
#[ no_mangle]
95
110
pub extern "C" fn mmtk_builder_default ( ) -> * mut MMTKBuilder {
96
111
let mut builder = MMTKBuilder :: new_no_env_vars ( ) ;
@@ -110,19 +125,9 @@ pub extern "C" fn mmtk_builder_default() -> *mut MMTKBuilder {
110
125
std:: process:: exit ( 1 ) ;
111
126
}
112
127
113
- let heap_mode = mmtk_builder_default_parse_heap_mode ( heap_min, heap_max) ;
114
-
115
- // Parse the env var, if it's not found set the plan name to MarkSweep
116
- let plan_name = std:: env:: var ( "MMTK_PLAN" )
117
- . unwrap_or ( String :: from ( "MarkSweep" ) ) ;
118
-
119
- // Parse the plan name into a valid MMTK Plan, if the name is not a valid plan use MarkSweep
120
- let plan_selector = plan_name. parse :: < PlanSelector > ( )
121
- . unwrap_or ( "MarkSweep" . parse :: < PlanSelector > ( ) . unwrap ( ) ) ;
122
-
123
- builder. options . plan . set ( plan_selector) ;
128
+ builder. options . gc_trigger . set ( mmtk_builder_default_parse_heap_mode ( heap_min, heap_max) ) ;
124
129
125
- builder. options . gc_trigger . set ( heap_mode ) ;
130
+ builder. options . plan . set ( mmtk_builder_default_parse_plan ( ) ) ;
126
131
127
132
Box :: into_raw ( Box :: new ( builder) )
128
133
}
0 commit comments