[Git][ghc/ghc][wip/T19626] More flags
Alex D (@nineonine)
gitlab at gitlab.haskell.org
Fri Dec 16 03:54:38 UTC 2022
Alex D pushed to branch wip/T19626 at Glasgow Haskell Compiler / GHC
Commits:
3883ce1b by nineonine at 2022-12-15T19:37:55-08:00
More flags
- - - - -
5 changed files:
- rts/OptParse.c
- rts/include/rts/OptParse.h
- testsuite/tests/rts/OptParseTest.c
- testsuite/tests/rts/OptParseTest.stderr
- testsuite/tests/rts/OptParseTest.stdout
Changes:
=====================================
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);
=====================================
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;
=====================================
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;
}
=====================================
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
=====================================
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 ===
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3883ce1b2e6c4b25047c047c440b1f4d2650e7f1
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/3883ce1b2e6c4b25047c047c440b1f4d2650e7f1
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221215/fcd7a89b/attachment-0001.html>
More information about the ghc-commits
mailing list