363 range->print(st); |
363 range->print(st); |
364 } else if (unspecified == true) { |
364 } else if (unspecified == true) { |
365 st->print("[ ... ]"); |
365 st->print("[ ... ]"); |
366 } |
366 } |
367 } |
367 } |
|
368 |
|
369 bool CommandLineFlagRangeList::check_ranges() { |
|
370 //#define PRINT_RANGES_SIZES |
|
371 #ifdef PRINT_RANGES_SIZES |
|
372 { |
|
373 size_t size_ranges = sizeof(CommandLineFlagRangeList); |
|
374 for (int i=0; i<length(); i++) { |
|
375 size_ranges += sizeof(CommandLineFlagRange); |
|
376 CommandLineFlagRange* range = at(i); |
|
377 const char* name = range->name(); |
|
378 Flag* flag = Flag::find_flag(name, strlen(name), true, true); |
|
379 if (flag->is_intx()) { |
|
380 size_ranges += 2*sizeof(intx); |
|
381 size_ranges += sizeof(CommandLineFlagRange*); |
|
382 } else if (flag->is_uintx()) { |
|
383 size_ranges += 2*sizeof(uintx); |
|
384 size_ranges += sizeof(CommandLineFlagRange*); |
|
385 } else if (flag->is_uint64_t()) { |
|
386 size_ranges += 2*sizeof(uint64_t); |
|
387 size_ranges += sizeof(CommandLineFlagRange*); |
|
388 } else if (flag->is_size_t()) { |
|
389 size_ranges += 2*sizeof(size_t); |
|
390 size_ranges += sizeof(CommandLineFlagRange*); |
|
391 } else if (flag->is_double()) { |
|
392 size_ranges += 2*sizeof(double); |
|
393 size_ranges += sizeof(CommandLineFlagRange*); |
|
394 } |
|
395 } |
|
396 fprintf(stderr, "Size of %d ranges: " SIZE_FORMAT " bytes\n", |
|
397 length(), size_ranges); |
|
398 } |
|
399 #endif // PRINT_RANGES_SIZES |
|
400 |
|
401 // Check ranges. |
|
402 bool status = true; |
|
403 for (int i=0; i<length(); i++) { |
|
404 CommandLineFlagRange* range = at(i); |
|
405 const char* name = range->name(); |
|
406 Flag* flag = Flag::find_flag(name, strlen(name), true, true); |
|
407 if (flag != NULL) { |
|
408 if (flag->is_intx()) { |
|
409 intx value = flag->get_intx(); |
|
410 if (range->check_intx(value, true) != Flag::SUCCESS) status = false; |
|
411 } else if (flag->is_uintx()) { |
|
412 uintx value = flag->get_uintx(); |
|
413 if (range->check_uintx(value, true) != Flag::SUCCESS) status = false; |
|
414 } else if (flag->is_uint64_t()) { |
|
415 uint64_t value = flag->get_uint64_t(); |
|
416 if (range->check_uint64_t(value, true) != Flag::SUCCESS) status = false; |
|
417 } else if (flag->is_size_t()) { |
|
418 size_t value = flag->get_size_t(); |
|
419 if (range->check_size_t(value, true) != Flag::SUCCESS) status = false; |
|
420 } else if (flag->is_double()) { |
|
421 double value = flag->get_double(); |
|
422 if (range->check_double(value, true) != Flag::SUCCESS) status = false; |
|
423 } |
|
424 } |
|
425 } |
|
426 return status; |
|
427 } |