diff options
author | nineonine <mail4chemik@gmail.com> | 2022-12-15 19:37:55 -0800 |
---|---|---|
committer | nineonine <mail4chemik@gmail.com> | 2022-12-15 19:37:55 -0800 |
commit | 3883ce1b2e6c4b25047c047c440b1f4d2650e7f1 (patch) | |
tree | 84cf5bd5a7b0650cdb5a543ff98243d4de656209 | |
parent | 4f46dffc3113f02a14103e45d6bd5db3315a8e69 (diff) | |
download | haskell-3883ce1b2e6c4b25047c047c440b1f4d2650e7f1.tar.gz |
More flags
-rw-r--r-- | rts/OptParse.c | 24 | ||||
-rw-r--r-- | rts/include/rts/OptParse.h | 3 | ||||
-rw-r--r-- | testsuite/tests/rts/OptParseTest.c | 37 | ||||
-rw-r--r-- | testsuite/tests/rts/OptParseTest.stderr | 70 | ||||
-rw-r--r-- | testsuite/tests/rts/OptParseTest.stdout | 22 |
5 files changed, 150 insertions, 6 deletions
diff --git a/rts/OptParse.c b/rts/OptParse.c index c4e4b9ab31..4abd4a6127 100644 --- a/rts/OptParse.c +++ b/rts/OptParse.c @@ -67,6 +67,9 @@ rtsFlags[] = { [NURSERY_CHUNK_SIZE] = {UNSAFE, STGWORD64, "alloc-area-chunksize", "n", true}, [GC_BELL] = {UNSAFE, VOID, "gc-bell", "B", false}, [COMPACT_GC] = {UNSAFE, DOUBLE, "compact-gc", "c", false}, + [USE_MARK_REGION] = {UNSAFE, VOID, "use-mark-region", "w", false}, + [OLD_GEN_FACTOR] = {UNSAFE, DOUBLE, "old-gen-factor", "F", true}, + [RETURN_DECAY_FACTOR] = {UNSAFE, DOUBLE, "return-decay-factor", "Fd", true}, // The 'NULL' of flags. Long name just for debugging [UNKNOWN_RTS_OPTION] = {SAFE, VOID, "UNKNOWN_RTS_OPTION", NULL, false}, }; @@ -183,6 +186,7 @@ parse_flag_value(RtsFlagKey i, bool isLongName, char *arg0, bool *error) case VOID: { switch (i) { case GC_BELL: + case USE_MARK_REGION: if (hasValue) UNEXPECTED_ARGUMENT(error, name, arg0); } return NO_VAL(i); @@ -219,25 +223,33 @@ parse_flag_value(RtsFlagKey i, bool isLongName, char *arg0, bool *error) } case DOUBLE: { double res; + // account for '=' that is used with long-form names + // some long-from names can have no value though so account for that as well + if (isLongName && arg[offset] == '=') offset++; switch (i) { case EVENTLOG_FLUSH_INTERVAL: { - res = parseDouble(arg+offset+1, error); + res = parseDouble(arg+offset, error); break; } case LONG_GC_SYNC: { - res = parseDouble(arg+offset+1, error); + res = parseDouble(arg+offset, error); break; } case COMPACT_GC: { // special treatment when used as a switch if (!hasValue) return NO_VAL(i); - res = parseDouble(arg+offset+1, error); + res = parseDouble(arg+offset, error); break; } - default: { - *error = true; - errorBelch("invalid double '%s' for '%s'", &arg[offset + 1], rtsFlags[i].longName); + case OLD_GEN_FACTOR: { + res = parseDouble(arg+offset, error); + break; + } + case RETURN_DECAY_FACTOR: { + res = parseDouble(arg+offset, error); + break; } + default: {} } if (*error) { BAD_VALUE(error, arg); diff --git a/rts/include/rts/OptParse.h b/rts/include/rts/OptParse.h index 36c9660ca5..d4349fe760 100644 --- a/rts/include/rts/OptParse.h +++ b/rts/include/rts/OptParse.h @@ -48,6 +48,9 @@ typedef enum _RtsFlagKey { NO_AUTO_HEAP_SAMPLES, NURSERY_CHUNK_SIZE, COMPACT_GC, + USE_MARK_REGION, + OLD_GEN_FACTOR, + RETURN_DECAY_FACTOR, UNKNOWN_RTS_OPTION, } RtsFlagKey; diff --git a/testsuite/tests/rts/OptParseTest.c b/testsuite/tests/rts/OptParseTest.c index 39fe2cb72d..661f9c1d5f 100644 --- a/testsuite/tests/rts/OptParseTest.c +++ b/testsuite/tests/rts/OptParseTest.c @@ -349,6 +349,43 @@ int main (int argc, char *argv[]) _FAIL_TEST("--compact-gc="); _FAIL_TEST("--compact-gc=blah"); + _TEST( "--use-mark-region", USE_MARK_REGION + , "use-mark-region", "w" + , VOID, UNSAFE, NO_VAL(USE_MARK_REGION)); + _TEST( "-w", USE_MARK_REGION + , "use-mark-region", "w" + , VOID, UNSAFE, NO_VAL(USE_MARK_REGION)); + _FAIL_TEST("--use-mark-region="); + _FAIL_TEST("--use-mark-region=123G"); + _FAIL_TEST("--use-mark-region=false"); + _FAIL_TEST("-w3622"); + + _TEST( "--old-gen-factor=11288", OLD_GEN_FACTOR + , "old-gen-factor", "F" + , DOUBLE, UNSAFE, DOUBLE_VAL(OLD_GEN_FACTOR, 11288.0)); + _TEST( "-F188", OLD_GEN_FACTOR + , "old-gen-factor", "F" + , DOUBLE, UNSAFE, DOUBLE_VAL(OLD_GEN_FACTOR, 188.0)); + _FAIL_TEST("--old-gen-factor"); + _FAIL_TEST("--old-gen-factor="); + _FAIL_TEST("--old-gen-factor=blah"); + _FAIL_TEST("-F"); + _FAIL_TEST("-F="); + _FAIL_TEST("-Fblah"); + + _TEST( "--return-decay-factor=11288", RETURN_DECAY_FACTOR + , "return-decay-factor", "Fd" + , DOUBLE, UNSAFE, DOUBLE_VAL(RETURN_DECAY_FACTOR, 11288.0)); + _TEST( "-Fd188", RETURN_DECAY_FACTOR + , "return-decay-factor", "Fd" + , DOUBLE, UNSAFE, DOUBLE_VAL(RETURN_DECAY_FACTOR, 188.0)); + _FAIL_TEST("--return-decay-factor"); + _FAIL_TEST("--return-decay-factor="); + _FAIL_TEST("--return-decay-factor=blah"); + _FAIL_TEST("-Fd"); + _FAIL_TEST("-Fd="); + _FAIL_TEST("-Fdblah"); + printf("\n=== OptParseTest END ===\n"); return 0; } diff --git a/testsuite/tests/rts/OptParseTest.stderr b/testsuite/tests/rts/OptParseTest.stderr index 6c996ec6fb..029cc071b1 100644 --- a/testsuite/tests/rts/OptParseTest.stderr +++ b/testsuite/tests/rts/OptParseTest.stderr @@ -409,3 +409,73 @@ unknown RTS option: --compact-gc= (FAIL_TEST) input: --compact-gc=blah bad value for compact-gc=blah + +(TEST) input: --use-mark-region +24: use-mark-region w UNSAFE + +(TEST) input: -w +24: use-mark-region w UNSAFE + +(FAIL_TEST) input: --use-mark-region= +unknown RTS option: --use-mark-region= + +(FAIL_TEST) input: --use-mark-region=123G +flag use-mark-region given an argument when none was expected: --use-mark-region=123G + +(FAIL_TEST) input: --use-mark-region=false +flag use-mark-region given an argument when none was expected: --use-mark-region=false + +(FAIL_TEST) input: -w3622 +flag w given an argument when none was expected: -w3622 + +(TEST) input: --old-gen-factor=11288 +25: old-gen-factor F UNSAFE +expected: 11288.000000 actual: 11288.000000 + +(TEST) input: -F188 +25: old-gen-factor F UNSAFE +expected: 188.000000 actual: 188.000000 + +(FAIL_TEST) input: --old-gen-factor +unknown RTS option: --old-gen-factor + +(FAIL_TEST) input: --old-gen-factor= +unknown RTS option: --old-gen-factor= + +(FAIL_TEST) input: --old-gen-factor=blah +bad value for old-gen-factor=blah + +(FAIL_TEST) input: -F +unknown RTS option: -F + +(FAIL_TEST) input: -F= +unknown RTS option: -F= + +(FAIL_TEST) input: -Fblah +unknown RTS option: -Fblah + +(TEST) input: --return-decay-factor=11288 +26: return-decay-factor Fd UNSAFE +expected: 11288.000000 actual: 11288.000000 + +(TEST) input: -Fd188 +26: return-decay-factor Fd UNSAFE +expected: 188.000000 actual: 188.000000 + +(FAIL_TEST) input: --return-decay-factor +unknown RTS option: --return-decay-factor + +(FAIL_TEST) input: --return-decay-factor= +unknown RTS option: --return-decay-factor= + +(FAIL_TEST) input: --return-decay-factor=blah +bad value for return-decay-factor=blah + +(FAIL_TEST) input: -Fd +unknown RTS option: -Fd + +(FAIL_TEST) input: -Fd= +unknown RTS option: -Fd= + +(FAIL_TEST) input: -Fdblah +unknown RTS option: -Fdblah diff --git a/testsuite/tests/rts/OptParseTest.stdout b/testsuite/tests/rts/OptParseTest.stdout index 25b32f24e2..fba6a5c9d3 100644 --- a/testsuite/tests/rts/OptParseTest.stdout +++ b/testsuite/tests/rts/OptParseTest.stdout @@ -266,4 +266,26 @@ 23: compact-gc c UNSAFE value: 0.000000 +(TEST) input: --use-mark-region +24: use-mark-region w UNSAFE + +(TEST) input: -w +24: use-mark-region w UNSAFE + +(TEST) input: --old-gen-factor=11288 +25: old-gen-factor F UNSAFE + value: 11288.000000 + +(TEST) input: -F188 +25: old-gen-factor F UNSAFE + value: 188.000000 + +(TEST) input: --return-decay-factor=11288 +26: return-decay-factor Fd UNSAFE + value: 11288.000000 + +(TEST) input: -Fd188 +26: return-decay-factor Fd UNSAFE + value: 188.000000 + === OptParseTest END === |