[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