{"action":"created","comment":{"url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/comments/24539108","id":24539108,"diff_hunk":"@@ -62,70 +66,166 @@ struct Config\n     minPoolSize:N  - initial and minimum pool size in MB (%lld)\n     maxPoolSize:N  - maximum pool size in MB (%lld)\n     incPoolSize:N  - pool size increment MB (%lld)\n+    heapSizeFactor:N - targeted heap size to used memory ratio (%f)\n \";\n-        printf(s.ptr, disable, profile, cast(long)initReserve,\n-               cast(long)minPoolSize, cast(long)maxPoolSize, cast(long)incPoolSize);\n+        printf(s.ptr, disable, profile, cast(long)initReserve, cast(long)minPoolSize,\n+               cast(long)maxPoolSize, cast(long)incPoolSize, heapSizeFactor);\n     }\n \n-    bool parseOptions(const(char)[] opt) @nogc nothrow\n+    bool parseOptions(const(char)[] opt)\n     {\n-        size_t p = 0;\n-        while(p < opt.length)\n+        opt = skip!isspace(opt);\n+        while (opt.length)\n         {\n-            while (p < opt.length && isspace(opt[p]))\n-                p++;\n-            if (p >= opt.length)\n-                break;\n-            auto q = p;\n-            while (q < opt.length && opt[q] != ':' && opt[q] != '=' && !isspace(opt[q]))\n-                q++;\n-\n-            auto s = opt[p .. q];\n-            if(s == \"help\")\n+            auto tail = find!(c => c == ':' || c == '=')(opt);\n+            auto name = opt[0 .. $ - tail.length];\n+            if (tail.length <= 1)\n+                return optError(\"Missing argument for\", name);\n+            tail = tail[1 .. $];\n+\n+            switch (name)\n             {\n-                help();\n-                p = q;\n-            }\n-            else if (q < opt.length)\n+            case \"help\": help(); break;\n+\n+            foreach (field; __traits(allMembers, Config))\n             {\n-                auto r = q + 1;\n-                size_t v = 0;\n-                for ( ; r < opt.length && isdigit(opt[r]); r++)\n-                    v = v * 10 + opt[r] - '0';\n-                if(r == q + 1)\n-                {\n-                    printf(\"numeric argument expected for GC option \\\"%.*s\\\"\\n\", cast(int) s.length, s.ptr);\n-                    return false;\n-                }\n-                if(s == \"disable\")\n-                    disable = v != 0;\n-                else if(s == \"profile\")\n-                    profile = v != 0;\n-                else if(s == \"precise\")\n-                    precise = v != 0;\n-                else if(s == \"concurrent\")\n-                    concurrent = v != 0;\n-                else if(s == \"initReserve\")\n-                    initReserve = v;\n-                else if(s == \"minPoolSize\")\n-                    minPoolSize = v;\n-                else if(s == \"maxPoolSize\")\n-                    maxPoolSize = v;\n-                else if(s == \"incPoolSize\")\n-                    incPoolSize = v;\n-                else\n+                static if (!is(typeof(__traits(getMember, this, field)) == function))\n                 {\n-                    printf(\"Unknown GC option \\\"%.*s\\\"\\n\", cast(int) s.length, s.ptr);\n-                    return false;\n+                case field:\n+                    if (!parse(name, tail, __traits(getMember, this, field)))\n+                        return false;\n+                    break;\n                 }\n-                p = r;\n             }\n-            else\n-            {\n-                printf(\"Incomplete GC option \\\"%.*s\\\"\\n\", cast(int) s.length, s.ptr);\n-                return false;\n+            break;\n+\n+            default:\n+                return optError(\"Unknown\", name);\n             }\n+            opt = skip!isspace(tail);\n         }\n         return true;\n     }\n }\n+\n+private:\n+\n+bool optError(in char[] msg, in char[] name)\n+{\n+    version (unittest) if (inUnittest) return false;\n+\n+    fprintf(stderr, \"%.*s GC option '%.*s'.\\n\",\n+            cast(int)msg.length, msg.ptr,\n+            cast(int)name.length, name.ptr);\n+    return false;\n+}\n+\n+inout(char)[] skip(alias pred)(inout(char)[] str)\n+{\n+    return find!(c => !pred(c))(str);\n+}\n+\n+inout(char)[] find(alias pred)(inout(char)[] str)\n+{\n+    foreach (i; 0 .. str.length)\n+        if (pred(str[i])) return str[i .. $];\n+    return null;\n+}\n+\n+bool parse(T:size_t)(const(char)[] optname, ref const(char)[] str, ref T res)\n+in { assert(str.length); }\n+body\n+{\n+    size_t i, v;\n+    for (; i < str.length && isdigit(str[i]); ++i)\n+        v = 10 * v + str[i] - '0';\n+\n+    if (!i)\n+        return parseError(\"a number\", optname, str);\n+    str = str[i .. $];\n+    res = v;\n+    return true;\n+}\n+\n+bool parse(T:bool)(const(char)[] optname, ref const(char)[] str, ref T res)\n+in { assert(str.length); }\n+body\n+{\n+    if (str[0] == '1' || str[0] == 'y' || str[0] == 'Y')\n+        res = true;\n+    else if (str[0] == '0' || str[0] == 'n' || str[0] == 'N')\n+        res = false;\n+    else\n+        return parseError(\"'0/n/N' or '1/y/Y'\", optname, str);\n+    str = str[1 .. $];\n+    return true;\n+}\n+\n+bool parse(T:float)(const(char)[] optname, ref const(char)[] str, ref T res)\n+in { assert(str.length); }\n+body\n+{\n+    // % uint f %n \\0\n+    char[1 + 10 + 1 + 2 + 1] fmt=void;\n+    // specify max-width\n+    immutable n = snprintf(fmt.ptr, fmt.length, \"%%%uf%%n\", cast(uint)str.length);\n+    assert(n > 4 && n < fmt.length);\n+\n+    int nscanned;\n+    if (sscanf(str.ptr, fmt.ptr, &res, &nscanned) < 1)\n+        return parseError(\"a float\", optname, str);\n+    str = str[nscanned .. $];\n+    return true;\n+}\n+\n+bool parseError(in char[] exp, in char[] opt, in char[] got)\n+{\n+    version (unittest) if (inUnittest) return false;\n+\n+    fprintf(stderr, \"Expecting %.*s as argument for GC option '%.*s', got '%.*s' instead.\\n\",\n+            cast(int)exp.length, exp.ptr,\n+            cast(int)opt.length, opt.ptr,\n+            cast(int)got.length, got.ptr);\n+        return false;","path":"src/gc/config.d","position":206,"original_position":206,"commit_id":"16e05107c1e54b846951791bd6625715a6b88ce3","original_commit_id":"16e05107c1e54b846951791bd6625715a6b88ce3","user":{"login":"rainers","id":702284,"avatar_url":"https://avatars.githubusercontent.com/u/702284?v=3","gravatar_id":"","url":"https://api.github.com/users/rainers","html_url":"https://github.com/rainers","followers_url":"https://api.github.com/users/rainers/followers","following_url":"https://api.github.com/users/rainers/following{/other_user}","gists_url":"https://api.github.com/users/rainers/gists{/gist_id}","starred_url":"https://api.github.com/users/rainers/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rainers/subscriptions","organizations_url":"https://api.github.com/users/rainers/orgs","repos_url":"https://api.github.com/users/rainers/repos","events_url":"https://api.github.com/users/rainers/events{/privacy}","received_events_url":"https://api.github.com/users/rainers/received_events","type":"User","site_admin":false},"body":"bad Indentation here","created_at":"2015-02-11T22:14:14Z","updated_at":"2015-02-11T22:14:14Z","html_url":"https://github.com/D-Programming-Language/druntime/pull/1098#discussion_r24539108","pull_request_url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098","_links":{"self":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/comments/24539108"},"html":{"href":"https://github.com/D-Programming-Language/druntime/pull/1098#discussion_r24539108"},"pull_request":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098"}}},"pull_request":{"url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098","id":27312015,"html_url":"https://github.com/D-Programming-Language/druntime/pull/1098","diff_url":"https://github.com/D-Programming-Language/druntime/pull/1098.diff","patch_url":"https://github.com/D-Programming-Language/druntime/pull/1098.patch","issue_url":"https://api.github.com/repos/D-Programming-Language/druntime/issues/1098","number":1098,"state":"open","locked":false,"title":"new heap growth strategy","user":{"login":"MartinNowak","id":288976,"avatar_url":"https://avatars.githubusercontent.com/u/288976?v=3","gravatar_id":"","url":"https://api.github.com/users/MartinNowak","html_url":"https://github.com/MartinNowak","followers_url":"https://api.github.com/users/MartinNowak/followers","following_url":"https://api.github.com/users/MartinNowak/following{/other_user}","gists_url":"https://api.github.com/users/MartinNowak/gists{/gist_id}","starred_url":"https://api.github.com/users/MartinNowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartinNowak/subscriptions","organizations_url":"https://api.github.com/users/MartinNowak/orgs","repos_url":"https://api.github.com/users/MartinNowak/repos","events_url":"https://api.github.com/users/MartinNowak/events{/privacy}","received_events_url":"https://api.github.com/users/MartinNowak/received_events","type":"User","site_admin":false},"body":"- keep track of used number of small/large pages\r\n- update collect thresholds after each collection\r\n- make heap size to used memory size ratio configurable","created_at":"2015-01-13T22:45:27Z","updated_at":"2015-02-11T22:14:14Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d3837446ce83770f4b79db524d7ba4516bb49009","assignee":null,"milestone":{"url":"https://api.github.com/repos/D-Programming-Language/druntime/milestones/4","labels_url":"https://api.github.com/repos/D-Programming-Language/druntime/milestones/4/labels","id":821355,"number":4,"title":"2.067","description":null,"creator":{"login":"MartinNowak","id":288976,"avatar_url":"https://avatars.githubusercontent.com/u/288976?v=3","gravatar_id":"","url":"https://api.github.com/users/MartinNowak","html_url":"https://github.com/MartinNowak","followers_url":"https://api.github.com/users/MartinNowak/followers","following_url":"https://api.github.com/users/MartinNowak/following{/other_user}","gists_url":"https://api.github.com/users/MartinNowak/gists{/gist_id}","starred_url":"https://api.github.com/users/MartinNowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartinNowak/subscriptions","organizations_url":"https://api.github.com/users/MartinNowak/orgs","repos_url":"https://api.github.com/users/MartinNowak/repos","events_url":"https://api.github.com/users/MartinNowak/events{/privacy}","received_events_url":"https://api.github.com/users/MartinNowak/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":1,"state":"open","created_at":"2014-10-10T16:06:25Z","updated_at":"2015-02-11T19:06:27Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098/commits","review_comments_url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098/comments","review_comment_url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/comments/{number}","comments_url":"https://api.github.com/repos/D-Programming-Language/druntime/issues/1098/comments","statuses_url":"https://api.github.com/repos/D-Programming-Language/druntime/statuses/16e05107c1e54b846951791bd6625715a6b88ce3","head":{"label":"MartinNowak:gcGrowth","ref":"gcGrowth","sha":"16e05107c1e54b846951791bd6625715a6b88ce3","user":{"login":"MartinNowak","id":288976,"avatar_url":"https://avatars.githubusercontent.com/u/288976?v=3","gravatar_id":"","url":"https://api.github.com/users/MartinNowak","html_url":"https://github.com/MartinNowak","followers_url":"https://api.github.com/users/MartinNowak/followers","following_url":"https://api.github.com/users/MartinNowak/following{/other_user}","gists_url":"https://api.github.com/users/MartinNowak/gists{/gist_id}","starred_url":"https://api.github.com/users/MartinNowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartinNowak/subscriptions","organizations_url":"https://api.github.com/users/MartinNowak/orgs","repos_url":"https://api.github.com/users/MartinNowak/repos","events_url":"https://api.github.com/users/MartinNowak/events{/privacy}","received_events_url":"https://api.github.com/users/MartinNowak/received_events","type":"User","site_admin":false},"repo":{"id":1503717,"name":"druntime","full_name":"MartinNowak/druntime","owner":{"login":"MartinNowak","id":288976,"avatar_url":"https://avatars.githubusercontent.com/u/288976?v=3","gravatar_id":"","url":"https://api.github.com/users/MartinNowak","html_url":"https://github.com/MartinNowak","followers_url":"https://api.github.com/users/MartinNowak/followers","following_url":"https://api.github.com/users/MartinNowak/following{/other_user}","gists_url":"https://api.github.com/users/MartinNowak/gists{/gist_id}","starred_url":"https://api.github.com/users/MartinNowak/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MartinNowak/subscriptions","organizations_url":"https://api.github.com/users/MartinNowak/orgs","repos_url":"https://api.github.com/users/MartinNowak/repos","events_url":"https://api.github.com/users/MartinNowak/events{/privacy}","received_events_url":"https://api.github.com/users/MartinNowak/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MartinNowak/druntime","description":"Low level runtime library for the D programming language","fork":true,"url":"https://api.github.com/repos/MartinNowak/druntime","forks_url":"https://api.github.com/repos/MartinNowak/druntime/forks","keys_url":"https://api.github.com/repos/MartinNowak/druntime/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MartinNowak/druntime/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MartinNowak/druntime/teams","hooks_url":"https://api.github.com/repos/MartinNowak/druntime/hooks","issue_events_url":"https://api.github.com/repos/MartinNowak/druntime/issues/events{/number}","events_url":"https://api.github.com/repos/MartinNowak/druntime/events","assignees_url":"https://api.github.com/repos/MartinNowak/druntime/assignees{/user}","branches_url":"https://api.github.com/repos/MartinNowak/druntime/branches{/branch}","tags_url":"https://api.github.com/repos/MartinNowak/druntime/tags","blobs_url":"https://api.github.com/repos/MartinNowak/druntime/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MartinNowak/druntime/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MartinNowak/druntime/git/refs{/sha}","trees_url":"https://api.github.com/repos/MartinNowak/druntime/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MartinNowak/druntime/statuses/{sha}","languages_url":"https://api.github.com/repos/MartinNowak/druntime/languages","stargazers_url":"https://api.github.com/repos/MartinNowak/druntime/stargazers","contributors_url":"https://api.github.com/repos/MartinNowak/druntime/contributors","subscribers_url":"https://api.github.com/repos/MartinNowak/druntime/subscribers","subscription_url":"https://api.github.com/repos/MartinNowak/druntime/subscription","commits_url":"https://api.github.com/repos/MartinNowak/druntime/commits{/sha}","git_commits_url":"https://api.github.com/repos/MartinNowak/druntime/git/commits{/sha}","comments_url":"https://api.github.com/repos/MartinNowak/druntime/comments{/number}","issue_comment_url":"https://api.github.com/repos/MartinNowak/druntime/issues/comments/{number}","contents_url":"https://api.github.com/repos/MartinNowak/druntime/contents/{+path}","compare_url":"https://api.github.com/repos/MartinNowak/druntime/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MartinNowak/druntime/merges","archive_url":"https://api.github.com/repos/MartinNowak/druntime/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MartinNowak/druntime/downloads","issues_url":"https://api.github.com/repos/MartinNowak/druntime/issues{/number}","pulls_url":"https://api.github.com/repos/MartinNowak/druntime/pulls{/number}","milestones_url":"https://api.github.com/repos/MartinNowak/druntime/milestones{/number}","notifications_url":"https://api.github.com/repos/MartinNowak/druntime/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MartinNowak/druntime/labels{/name}","releases_url":"https://api.github.com/repos/MartinNowak/druntime/releases{/id}","created_at":"2011-03-20T17:19:15Z","updated_at":"2015-01-29T20:43:20Z","pushed_at":"2015-02-11T19:42:45Z","git_url":"git://github.com/MartinNowak/druntime.git","ssh_url":"git@github.com:MartinNowak/druntime.git","clone_url":"https://github.com/MartinNowak/druntime.git","svn_url":"https://github.com/MartinNowak/druntime","homepage":"d-programming-language.org","size":9517,"stargazers_count":1,"watchers_count":1,"language":"D","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"D-Programming-Language:master","ref":"master","sha":"db4b4766f5d02e762e65022d5f66f4444ccce1b7","user":{"login":"D-Programming-Language","id":565913,"avatar_url":"https://avatars.githubusercontent.com/u/565913?v=3","gravatar_id":"","url":"https://api.github.com/users/D-Programming-Language","html_url":"https://github.com/D-Programming-Language","followers_url":"https://api.github.com/users/D-Programming-Language/followers","following_url":"https://api.github.com/users/D-Programming-Language/following{/other_user}","gists_url":"https://api.github.com/users/D-Programming-Language/gists{/gist_id}","starred_url":"https://api.github.com/users/D-Programming-Language/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/D-Programming-Language/subscriptions","organizations_url":"https://api.github.com/users/D-Programming-Language/orgs","repos_url":"https://api.github.com/users/D-Programming-Language/repos","events_url":"https://api.github.com/users/D-Programming-Language/events{/privacy}","received_events_url":"https://api.github.com/users/D-Programming-Language/received_events","type":"Organization","site_admin":false},"repo":{"id":1257087,"name":"druntime","full_name":"D-Programming-Language/druntime","owner":{"login":"D-Programming-Language","id":565913,"avatar_url":"https://avatars.githubusercontent.com/u/565913?v=3","gravatar_id":"","url":"https://api.github.com/users/D-Programming-Language","html_url":"https://github.com/D-Programming-Language","followers_url":"https://api.github.com/users/D-Programming-Language/followers","following_url":"https://api.github.com/users/D-Programming-Language/following{/other_user}","gists_url":"https://api.github.com/users/D-Programming-Language/gists{/gist_id}","starred_url":"https://api.github.com/users/D-Programming-Language/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/D-Programming-Language/subscriptions","organizations_url":"https://api.github.com/users/D-Programming-Language/orgs","repos_url":"https://api.github.com/users/D-Programming-Language/repos","events_url":"https://api.github.com/users/D-Programming-Language/events{/privacy}","received_events_url":"https://api.github.com/users/D-Programming-Language/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/D-Programming-Language/druntime","description":"Low level runtime library for the D programming language","fork":false,"url":"https://api.github.com/repos/D-Programming-Language/druntime","forks_url":"https://api.github.com/repos/D-Programming-Language/druntime/forks","keys_url":"https://api.github.com/repos/D-Programming-Language/druntime/keys{/key_id}","collaborators_url":"https://api.github.com/repos/D-Programming-Language/druntime/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/D-Programming-Language/druntime/teams","hooks_url":"https://api.github.com/repos/D-Programming-Language/druntime/hooks","issue_events_url":"https://api.github.com/repos/D-Programming-Language/druntime/issues/events{/number}","events_url":"https://api.github.com/repos/D-Programming-Language/druntime/events","assignees_url":"https://api.github.com/repos/D-Programming-Language/druntime/assignees{/user}","branches_url":"https://api.github.com/repos/D-Programming-Language/druntime/branches{/branch}","tags_url":"https://api.github.com/repos/D-Programming-Language/druntime/tags","blobs_url":"https://api.github.com/repos/D-Programming-Language/druntime/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/D-Programming-Language/druntime/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/D-Programming-Language/druntime/git/refs{/sha}","trees_url":"https://api.github.com/repos/D-Programming-Language/druntime/git/trees{/sha}","statuses_url":"https://api.github.com/repos/D-Programming-Language/druntime/statuses/{sha}","languages_url":"https://api.github.com/repos/D-Programming-Language/druntime/languages","stargazers_url":"https://api.github.com/repos/D-Programming-Language/druntime/stargazers","contributors_url":"https://api.github.com/repos/D-Programming-Language/druntime/contributors","subscribers_url":"https://api.github.com/repos/D-Programming-Language/druntime/subscribers","subscription_url":"https://api.github.com/repos/D-Programming-Language/druntime/subscription","commits_url":"https://api.github.com/repos/D-Programming-Language/druntime/commits{/sha}","git_commits_url":"https://api.github.com/repos/D-Programming-Language/druntime/git/commits{/sha}","comments_url":"https://api.github.com/repos/D-Programming-Language/druntime/comments{/number}","issue_comment_url":"https://api.github.com/repos/D-Programming-Language/druntime/issues/comments/{number}","contents_url":"https://api.github.com/repos/D-Programming-Language/druntime/contents/{+path}","compare_url":"https://api.github.com/repos/D-Programming-Language/druntime/compare/{base}...{head}","merges_url":"https://api.github.com/repos/D-Programming-Language/druntime/merges","archive_url":"https://api.github.com/repos/D-Programming-Language/druntime/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/D-Programming-Language/druntime/downloads","issues_url":"https://api.github.com/repos/D-Programming-Language/druntime/issues{/number}","pulls_url":"https://api.github.com/repos/D-Programming-Language/druntime/pulls{/number}","milestones_url":"https://api.github.com/repos/D-Programming-Language/druntime/milestones{/number}","notifications_url":"https://api.github.com/repos/D-Programming-Language/druntime/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/D-Programming-Language/druntime/labels{/name}","releases_url":"https://api.github.com/repos/D-Programming-Language/druntime/releases{/id}","created_at":"2011-01-15T07:01:38Z","updated_at":"2015-02-11T14:12:40Z","pushed_at":"2015-02-09T18:40:41Z","git_url":"git://github.com/D-Programming-Language/druntime.git","ssh_url":"git@github.com:D-Programming-Language/druntime.git","clone_url":"https://github.com/D-Programming-Language/druntime.git","svn_url":"https://github.com/D-Programming-Language/druntime","homepage":"dlang.org","size":16436,"stargazers_count":346,"watchers_count":346,"language":"D","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":224,"mirror_url":null,"open_issues_count":28,"forks":224,"open_issues":28,"watchers":346,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098"},"html":{"href":"https://github.com/D-Programming-Language/druntime/pull/1098"},"issue":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/issues/1098"},"comments":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/issues/1098/comments"},"review_comments":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098/comments"},"review_comment":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/comments/{number}"},"commits":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/pulls/1098/commits"},"statuses":{"href":"https://api.github.com/repos/D-Programming-Language/druntime/statuses/16e05107c1e54b846951791bd6625715a6b88ce3"}}}}