72 }
73 switch (error) {
74 case Flag::MISSING_NAME:
75 buffer_concat(buffer, "flag name is missing."); break;
76 case Flag::MISSING_VALUE:
77 buffer_concat(buffer, "parsing the textual form of the value."); break;
78 case Flag::NON_WRITABLE:
79 buffer_concat(buffer, "flag is not writeable."); break;
80 case Flag::OUT_OF_BOUNDS:
81 print_flag_error_message_bounds(name, buffer); break;
82 case Flag::VIOLATES_CONSTRAINT:
83 buffer_concat(buffer, "value violates its flag's constraint."); break;
84 case Flag::INVALID_FLAG:
85 buffer_concat(buffer, "there is no flag with the given name."); break;
86 case Flag::ERR_OTHER:
87 buffer_concat(buffer, "other, unspecified error related to setting the flag."); break;
88 case Flag::SUCCESS:
89 break;
90 }
91
92 PRAGMA_DIAG_PUSH
93 PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL
94 err_msg.print(buffer);
95 PRAGMA_DIAG_POP
96 }
97
98 // set a boolean global flag
99 Flag::Error WriteableFlags::set_bool_flag(const char* name, const char* arg, Flag::Flags origin, FormatBuffer<80>& err_msg) {
100 int value = true;
101
102 if (sscanf(arg, "%d", &value)) {
103 return set_bool_flag(name, value != 0, origin, err_msg);
104 }
105 err_msg.print("flag value must be a boolean (1 or 0)");
106 return Flag::WRONG_FORMAT;
107 }
108
109 Flag::Error WriteableFlags::set_bool_flag(const char* name, bool value, Flag::Flags origin, FormatBuffer<80>& err_msg) {
110 Flag::Error err = CommandLineFlags::boolAtPut(name, &value, origin);
111 print_flag_error_message_if_needed(err, name, err_msg);
112 return err;
113 }
114
115 // set a int global flag
278 return set_int_flag(f->_name, flag_value, origin, err_msg);
279 } else if (f->is_uint()) {
280 return set_uint_flag(f->_name, flag_value, origin, err_msg);
281 } else if (f->is_intx()) {
282 return set_intx_flag(f->_name, flag_value, origin, err_msg);
283 } else if (f->is_uintx()) {
284 return set_uintx_flag(f->_name, flag_value, origin, err_msg);
285 } else if (f->is_uint64_t()) {
286 return set_uint64_t_flag(f->_name, flag_value, origin, err_msg);
287 } else if (f->is_size_t()) {
288 return set_size_t_flag(f->_name, flag_value, origin, err_msg);
289 } else if (f->is_ccstr()) {
290 return set_ccstr_flag(f->_name, flag_value, origin, err_msg);
291 } else {
292 ShouldNotReachHere();
293 }
294 return Flag::ERR_OTHER;
295 }
296
297 // a writeable flag setter accepting 'jvalue' values
298 Flag::Error WriteableFlags::set_flag_from_jvalue(Flag* f, const void* value, Flag::Flags origin, FormatBuffer<80>& err_msg) {
299 jvalue new_value = *(jvalue*)value;
300 if (f->is_bool()) {
301 bool bvalue = (new_value.z == JNI_TRUE ? true : false);
302 return set_bool_flag(f->_name, bvalue, origin, err_msg);
303 } else if (f->is_int()) {
304 int ivalue = (int)new_value.j;
305 return set_int_flag(f->_name, ivalue, origin, err_msg);
306 } else if (f->is_uint()) {
307 uint uvalue = (uint)new_value.j;
308 return set_uint_flag(f->_name, uvalue, origin, err_msg);
309 } else if (f->is_intx()) {
310 intx ivalue = (intx)new_value.j;
311 return set_intx_flag(f->_name, ivalue, origin, err_msg);
312 } else if (f->is_uintx()) {
313 uintx uvalue = (uintx)new_value.j;
314 return set_uintx_flag(f->_name, uvalue, origin, err_msg);
315 } else if (f->is_uint64_t()) {
316 uint64_t uvalue = (uint64_t)new_value.j;
317 return set_uint64_t_flag(f->_name, uvalue, origin, err_msg);
318 } else if (f->is_size_t()) {
|
72 }
73 switch (error) {
74 case Flag::MISSING_NAME:
75 buffer_concat(buffer, "flag name is missing."); break;
76 case Flag::MISSING_VALUE:
77 buffer_concat(buffer, "parsing the textual form of the value."); break;
78 case Flag::NON_WRITABLE:
79 buffer_concat(buffer, "flag is not writeable."); break;
80 case Flag::OUT_OF_BOUNDS:
81 print_flag_error_message_bounds(name, buffer); break;
82 case Flag::VIOLATES_CONSTRAINT:
83 buffer_concat(buffer, "value violates its flag's constraint."); break;
84 case Flag::INVALID_FLAG:
85 buffer_concat(buffer, "there is no flag with the given name."); break;
86 case Flag::ERR_OTHER:
87 buffer_concat(buffer, "other, unspecified error related to setting the flag."); break;
88 case Flag::SUCCESS:
89 break;
90 }
91
92 err_msg.print("%s", buffer);
93 }
94
95 // set a boolean global flag
96 Flag::Error WriteableFlags::set_bool_flag(const char* name, const char* arg, Flag::Flags origin, FormatBuffer<80>& err_msg) {
97 int value = true;
98
99 if (sscanf(arg, "%d", &value)) {
100 return set_bool_flag(name, value != 0, origin, err_msg);
101 }
102 err_msg.print("flag value must be a boolean (1 or 0)");
103 return Flag::WRONG_FORMAT;
104 }
105
106 Flag::Error WriteableFlags::set_bool_flag(const char* name, bool value, Flag::Flags origin, FormatBuffer<80>& err_msg) {
107 Flag::Error err = CommandLineFlags::boolAtPut(name, &value, origin);
108 print_flag_error_message_if_needed(err, name, err_msg);
109 return err;
110 }
111
112 // set a int global flag
275 return set_int_flag(f->_name, flag_value, origin, err_msg);
276 } else if (f->is_uint()) {
277 return set_uint_flag(f->_name, flag_value, origin, err_msg);
278 } else if (f->is_intx()) {
279 return set_intx_flag(f->_name, flag_value, origin, err_msg);
280 } else if (f->is_uintx()) {
281 return set_uintx_flag(f->_name, flag_value, origin, err_msg);
282 } else if (f->is_uint64_t()) {
283 return set_uint64_t_flag(f->_name, flag_value, origin, err_msg);
284 } else if (f->is_size_t()) {
285 return set_size_t_flag(f->_name, flag_value, origin, err_msg);
286 } else if (f->is_ccstr()) {
287 return set_ccstr_flag(f->_name, flag_value, origin, err_msg);
288 } else {
289 ShouldNotReachHere();
290 }
291 return Flag::ERR_OTHER;
292 }
293
294 // a writeable flag setter accepting 'jvalue' values
295 Flag::Error WriteableFlags::set_flag_from_jvalue(Flag* f, const void* value, Flag::Flags origin,
296 FormatBuffer<80>& err_msg) {
297 jvalue new_value = *(jvalue*)value;
298 if (f->is_bool()) {
299 bool bvalue = (new_value.z == JNI_TRUE ? true : false);
300 return set_bool_flag(f->_name, bvalue, origin, err_msg);
301 } else if (f->is_int()) {
302 int ivalue = (int)new_value.j;
303 return set_int_flag(f->_name, ivalue, origin, err_msg);
304 } else if (f->is_uint()) {
305 uint uvalue = (uint)new_value.j;
306 return set_uint_flag(f->_name, uvalue, origin, err_msg);
307 } else if (f->is_intx()) {
308 intx ivalue = (intx)new_value.j;
309 return set_intx_flag(f->_name, ivalue, origin, err_msg);
310 } else if (f->is_uintx()) {
311 uintx uvalue = (uintx)new_value.j;
312 return set_uintx_flag(f->_name, uvalue, origin, err_msg);
313 } else if (f->is_uint64_t()) {
314 uint64_t uvalue = (uint64_t)new_value.j;
315 return set_uint64_t_flag(f->_name, uvalue, origin, err_msg);
316 } else if (f->is_size_t()) {
|