summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornineonine <mail4chemik@gmail.com>2022-12-15 19:37:55 -0800
committernineonine <mail4chemik@gmail.com>2022-12-15 19:37:55 -0800
commit3883ce1b2e6c4b25047c047c440b1f4d2650e7f1 (patch)
tree84cf5bd5a7b0650cdb5a543ff98243d4de656209
parent4f46dffc3113f02a14103e45d6bd5db3315a8e69 (diff)
downloadhaskell-3883ce1b2e6c4b25047c047c440b1f4d2650e7f1.tar.gz
More flags
-rw-r--r--rts/OptParse.c24
-rw-r--r--rts/include/rts/OptParse.h3
-rw-r--r--testsuite/tests/rts/OptParseTest.c37
-rw-r--r--testsuite/tests/rts/OptParseTest.stderr70
-rw-r--r--testsuite/tests/rts/OptParseTest.stdout22
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 ===