{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/jitutils/pulls/comments/192270915","pull_request_review_id":125015632,"id":192270915,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5MjI3MDkxNQ==","diff_hunk":"@@ -100,85 +398,323 @@ private static TimeSpan PrepareMethod(Type t, MicroMethodInfo mMI)\n         BindingFlags.Static\n     );\n \n-    static class GlobalMethodHolder\n+    private static Assembly LoadAssembly(string assemblyPath)\n     {\n-        public static MicroMethodInfo[] GlobalMethodInfoSet;\n+        Assembly result = null;\n \n-        public static void PopulateGlobalMethodInfoSet(MethodInfo[] globalMethods)\n+        // The core library needs special handling as it often is in fragile ngen format\n+        if (assemblyPath.EndsWith(\"System.Private.CoreLib.dll\") || assemblyPath.EndsWith(\"mscorlib.dll\"))\n         {\n-            int index;\n-            int numberOfMethods;\n+            result = typeof(object).Assembly;\n+        }\n+        else\n+        {\n+            try\n+            {\n+                result = Assembly.LoadFrom(assemblyPath);\n+            }\n+            catch (ArgumentException)\n+            {\n+                Console.WriteLine(\"Assembly load failure ({0}): ArgumentException\", assemblyPath);\n+            }\n+            catch (BadImageFormatException e)\n+            {\n+                Console.WriteLine(\"Assembly load failure ({0}): BadImageFormatException (is it a managed assembly?)\", assemblyPath);\n+                Console.WriteLine(e);\n+            }\n+            catch (FileLoadException)\n+            {\n+                Console.WriteLine(\"Assembly load failure ({0}): FileLoadException\", assemblyPath);\n+            }\n+            catch (FileNotFoundException)\n+            {\n+                Console.WriteLine(\"Assembly load failure ({0}): file not found\", assemblyPath);\n+            }\n+            catch (UnauthorizedAccessException)\n+            {\n+                Console.WriteLine(\"Assembly load failure ({0}): UnauthorizedAccessException\", assemblyPath);\n+            }\n+        }\n+\n+        return result;\n+    }\n+\n+    static MethodBase[] GetMethods(Type t)\n+    {\n+        if (Object.ReferenceEquals(t, typeof(GlobalMethodHolder)))\n+        {\n+            return GlobalMethodHolder.GlobalMethodInfoSet;\n+        }\n+\n+        MethodInfo[] mi = t.GetMethods(BindingFlagsForCollectingAllMethodsOrCtors);\n+        ConstructorInfo[] ci = t.GetConstructors(BindingFlagsForCollectingAllMethodsOrCtors);\n+        MethodBase[] mMI = new MethodBase[mi.Length + ci.Length];\n+\n+        for (int i = 0; i < mi.Length; i++)\n+        {\n+            mMI[i] = mi[i];\n+        }\n+\n+        for (int i = 0; i < ci.Length; i++)\n+        {\n+            mMI[i + mi.Length] = ci[i];\n+        }\n+\n+        return mMI;\n+    }\n \n-            numberOfMethods = globalMethods.Length;\n+    private static List<Type> LoadTypes(Assembly assembly)\n+    {\n+        List<Type> result = new List<Type>();\n \n-            GlobalMethodInfoSet = new MicroMethodInfo[numberOfMethods];\n+        var globalMethods = assembly.ManifestModule.GetMethods(BindingFlagsForCollectingAllMethodsOrCtors);\n \n-            for (index = 0; index < numberOfMethods; index++)\n+        if (globalMethods.Length > 0)\n+        {\n+            GlobalMethodHolder.PopulateGlobalMethodInfoSet(globalMethods);\n+            result.Add(typeof(GlobalMethodHolder));\n+        }\n+\n+        try\n+        {\n+            result.AddRange(assembly.GetTypes());\n+            return result;\n+        }\n+        catch (ReflectionTypeLoadException e)\n+        {\n+            Console.WriteLine(\"ReflectionTypeLoadException {0}\", assembly);\n+            Exception[] ea = e.LoaderExceptions;\n+            foreach (Exception e2 in ea)\n             {\n-                GlobalMethodInfoSet[index].RMH = globalMethods[index].MethodHandle;\n-                GlobalMethodInfoSet[index].name = globalMethods[index].Name;\n-                GlobalMethodInfoSet[index].IsAbstract = globalMethods[index].IsAbstract;\n-                GlobalMethodInfoSet[index].ContainsGenericParameters = globalMethods[index].ContainsGenericParameters;\n+                string[] ts = e2.ToString().Split('\\'');\n+                string temp = ts[1];\n+                ts = temp.Split(',');\n+                temp = ts[0];\n+                Console.WriteLine(\"ReflectionTypeLoadException {0} {1}\", temp, assembly);\n             }\n+            return null;\n+        }\n+        catch (FileLoadException)\n+        {\n+            Console.WriteLine(\"FileLoadException {0}\", assembly);\n+            return null;\n+        }\n+        catch (FileNotFoundException e)\n+        {\n+            string temp = e.ToString();\n+            string[] ts = temp.Split('\\'');\n+            temp = ts[1];\n+            Console.WriteLine(\"FileNotFoundException {1} {0}\", temp, assembly);\n+            return null;\n         }\n     }\n \n-    private static int GetRMHCountOnly(Type t)\n+    public int Work(string assemblyName)\n     {\n-        if (Object.ReferenceEquals(t, typeof(GlobalMethodHolder)))\n+        Assembly assembly = LoadAssembly(Path.GetFullPath(assemblyName));\n+\n+        if (assembly == null)\n         {\n-            return GlobalMethodHolder.GlobalMethodInfoSet.Length;\n+            return 102;","path":"src/pmi/pmi.cs","position":548,"original_position":548,"commit_id":"d250e0d10e432d1f03440b3cadeedb4d66e9ee0d","original_commit_id":"d250e0d10e432d1f03440b3cadeedb4d66e9ee0d","user":{"login":"AndyAyersMS","id":10121823,"node_id":"MDQ6VXNlcjEwMTIxODIz","avatar_url":"https://avatars1.githubusercontent.com/u/10121823?v=4","gravatar_id":"","url":"https://api.github.com/users/AndyAyersMS","html_url":"https://github.com/AndyAyersMS","followers_url":"https://api.github.com/users/AndyAyersMS/followers","following_url":"https://api.github.com/users/AndyAyersMS/following{/other_user}","gists_url":"https://api.github.com/users/AndyAyersMS/gists{/gist_id}","starred_url":"https://api.github.com/users/AndyAyersMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndyAyersMS/subscriptions","organizations_url":"https://api.github.com/users/AndyAyersMS/orgs","repos_url":"https://api.github.com/users/AndyAyersMS/repos","events_url":"https://api.github.com/users/AndyAyersMS/events{/privacy}","received_events_url":"https://api.github.com/users/AndyAyersMS/received_events","type":"User","site_admin":false},"body":"This is more or less what the old code did.\r\n\r\nWe may eventually need to parameterize the Walker so we can have different failure handling mechanisms depending on how we integrate this into higher level tools.","created_at":"2018-06-01T00:10:38Z","updated_at":"2018-06-01T00:10:38Z","html_url":"https://github.com/dotnet/jitutils/pull/128#discussion_r192270915","pull_request_url":"https://api.github.com/repos/dotnet/jitutils/pulls/128","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/comments/192270915"},"html":{"href":"https://github.com/dotnet/jitutils/pull/128#discussion_r192270915"},"pull_request":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/128"}},"in_reply_to_id":192255713},"pull_request":{"url":"https://api.github.com/repos/dotnet/jitutils/pulls/128","id":191887495,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkxODg3NDk1","html_url":"https://github.com/dotnet/jitutils/pull/128","diff_url":"https://github.com/dotnet/jitutils/pull/128.diff","patch_url":"https://github.com/dotnet/jitutils/pull/128.patch","issue_url":"https://api.github.com/repos/dotnet/jitutils/issues/128","number":128,"state":"open","locked":false,"title":"PMI: rework as visitor pattern to support generic type exploration","user":{"login":"AndyAyersMS","id":10121823,"node_id":"MDQ6VXNlcjEwMTIxODIz","avatar_url":"https://avatars1.githubusercontent.com/u/10121823?v=4","gravatar_id":"","url":"https://api.github.com/users/AndyAyersMS","html_url":"https://github.com/AndyAyersMS","followers_url":"https://api.github.com/users/AndyAyersMS/followers","following_url":"https://api.github.com/users/AndyAyersMS/following{/other_user}","gists_url":"https://api.github.com/users/AndyAyersMS/gists{/gist_id}","starred_url":"https://api.github.com/users/AndyAyersMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndyAyersMS/subscriptions","organizations_url":"https://api.github.com/users/AndyAyersMS/orgs","repos_url":"https://api.github.com/users/AndyAyersMS/repos","events_url":"https://api.github.com/users/AndyAyersMS/events{/privacy}","received_events_url":"https://api.github.com/users/AndyAyersMS/received_events","type":"User","site_admin":false},"body":"This change adds the ability for PMI to create instantations of some\r\ngeneric types (limited to types with one or two parameters only for now).\r\n\r\nBecause of constraints it is not possible to easily tell in advance how\r\nmany instantations will result. Also in the future we will want to do\r\nsomething similar for generic methods, and may want to produce different\r\nkinds of output markup.\r\n\r\nSo this change also refactors the PMI code to use a visitor pattern for\r\ntraversing types and methods. Three concrete visitors are implemented:\r\none for counting types and methods, one for jitting a range of methods, and\r\none for jitting just a single method.\r\n\r\nThe actual strategy for instantiating generics is held in the `Worker` class.\r\nWe attempt up to 4 instantations of single parameter types and 8 of two\r\nparameter types, with a mixture of types. There is room for enhancement here,\r\nboth in trying out suitable struct types and in looking for types that will\r\nsatisfy various constraints. A limited amount of constraint validation is\r\ndone up front.\r\n\r\nAside from extra methods and types seen via instantations this should be\r\nfunctionally equivalent to the base version.","created_at":"2018-05-31T22:11:41Z","updated_at":"2018-06-01T00:10:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a25956860bd20be3b732d122c71403c5ec7abe49","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/jitutils/pulls/128/commits","review_comments_url":"https://api.github.com/repos/dotnet/jitutils/pulls/128/comments","review_comment_url":"https://api.github.com/repos/dotnet/jitutils/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/jitutils/issues/128/comments","statuses_url":"https://api.github.com/repos/dotnet/jitutils/statuses/d250e0d10e432d1f03440b3cadeedb4d66e9ee0d","head":{"label":"AndyAyersMS:Refactor","ref":"Refactor","sha":"d250e0d10e432d1f03440b3cadeedb4d66e9ee0d","user":{"login":"AndyAyersMS","id":10121823,"node_id":"MDQ6VXNlcjEwMTIxODIz","avatar_url":"https://avatars1.githubusercontent.com/u/10121823?v=4","gravatar_id":"","url":"https://api.github.com/users/AndyAyersMS","html_url":"https://github.com/AndyAyersMS","followers_url":"https://api.github.com/users/AndyAyersMS/followers","following_url":"https://api.github.com/users/AndyAyersMS/following{/other_user}","gists_url":"https://api.github.com/users/AndyAyersMS/gists{/gist_id}","starred_url":"https://api.github.com/users/AndyAyersMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndyAyersMS/subscriptions","organizations_url":"https://api.github.com/users/AndyAyersMS/orgs","repos_url":"https://api.github.com/users/AndyAyersMS/repos","events_url":"https://api.github.com/users/AndyAyersMS/events{/privacy}","received_events_url":"https://api.github.com/users/AndyAyersMS/received_events","type":"User","site_admin":false},"repo":{"id":64791799,"node_id":"MDEwOlJlcG9zaXRvcnk2NDc5MTc5OQ==","name":"jitutils","full_name":"AndyAyersMS/jitutils","owner":{"login":"AndyAyersMS","id":10121823,"node_id":"MDQ6VXNlcjEwMTIxODIz","avatar_url":"https://avatars1.githubusercontent.com/u/10121823?v=4","gravatar_id":"","url":"https://api.github.com/users/AndyAyersMS","html_url":"https://github.com/AndyAyersMS","followers_url":"https://api.github.com/users/AndyAyersMS/followers","following_url":"https://api.github.com/users/AndyAyersMS/following{/other_user}","gists_url":"https://api.github.com/users/AndyAyersMS/gists{/gist_id}","starred_url":"https://api.github.com/users/AndyAyersMS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndyAyersMS/subscriptions","organizations_url":"https://api.github.com/users/AndyAyersMS/orgs","repos_url":"https://api.github.com/users/AndyAyersMS/repos","events_url":"https://api.github.com/users/AndyAyersMS/events{/privacy}","received_events_url":"https://api.github.com/users/AndyAyersMS/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/AndyAyersMS/jitutils","description":null,"fork":true,"url":"https://api.github.com/repos/AndyAyersMS/jitutils","forks_url":"https://api.github.com/repos/AndyAyersMS/jitutils/forks","keys_url":"https://api.github.com/repos/AndyAyersMS/jitutils/keys{/key_id}","collaborators_url":"https://api.github.com/repos/AndyAyersMS/jitutils/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/AndyAyersMS/jitutils/teams","hooks_url":"https://api.github.com/repos/AndyAyersMS/jitutils/hooks","issue_events_url":"https://api.github.com/repos/AndyAyersMS/jitutils/issues/events{/number}","events_url":"https://api.github.com/repos/AndyAyersMS/jitutils/events","assignees_url":"https://api.github.com/repos/AndyAyersMS/jitutils/assignees{/user}","branches_url":"https://api.github.com/repos/AndyAyersMS/jitutils/branches{/branch}","tags_url":"https://api.github.com/repos/AndyAyersMS/jitutils/tags","blobs_url":"https://api.github.com/repos/AndyAyersMS/jitutils/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/AndyAyersMS/jitutils/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/AndyAyersMS/jitutils/git/refs{/sha}","trees_url":"https://api.github.com/repos/AndyAyersMS/jitutils/git/trees{/sha}","statuses_url":"https://api.github.com/repos/AndyAyersMS/jitutils/statuses/{sha}","languages_url":"https://api.github.com/repos/AndyAyersMS/jitutils/languages","stargazers_url":"https://api.github.com/repos/AndyAyersMS/jitutils/stargazers","contributors_url":"https://api.github.com/repos/AndyAyersMS/jitutils/contributors","subscribers_url":"https://api.github.com/repos/AndyAyersMS/jitutils/subscribers","subscription_url":"https://api.github.com/repos/AndyAyersMS/jitutils/subscription","commits_url":"https://api.github.com/repos/AndyAyersMS/jitutils/commits{/sha}","git_commits_url":"https://api.github.com/repos/AndyAyersMS/jitutils/git/commits{/sha}","comments_url":"https://api.github.com/repos/AndyAyersMS/jitutils/comments{/number}","issue_comment_url":"https://api.github.com/repos/AndyAyersMS/jitutils/issues/comments{/number}","contents_url":"https://api.github.com/repos/AndyAyersMS/jitutils/contents/{+path}","compare_url":"https://api.github.com/repos/AndyAyersMS/jitutils/compare/{base}...{head}","merges_url":"https://api.github.com/repos/AndyAyersMS/jitutils/merges","archive_url":"https://api.github.com/repos/AndyAyersMS/jitutils/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/AndyAyersMS/jitutils/downloads","issues_url":"https://api.github.com/repos/AndyAyersMS/jitutils/issues{/number}","pulls_url":"https://api.github.com/repos/AndyAyersMS/jitutils/pulls{/number}","milestones_url":"https://api.github.com/repos/AndyAyersMS/jitutils/milestones{/number}","notifications_url":"https://api.github.com/repos/AndyAyersMS/jitutils/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/AndyAyersMS/jitutils/labels{/name}","releases_url":"https://api.github.com/repos/AndyAyersMS/jitutils/releases{/id}","deployments_url":"https://api.github.com/repos/AndyAyersMS/jitutils/deployments","created_at":"2016-08-02T20:52:07Z","updated_at":"2016-08-02T20:52:08Z","pushed_at":"2018-05-31T22:09:25Z","git_url":"git://github.com/AndyAyersMS/jitutils.git","ssh_url":"git@github.com:AndyAyersMS/jitutils.git","clone_url":"https://github.com/AndyAyersMS/jitutils.git","svn_url":"https://github.com/AndyAyersMS/jitutils","homepage":null,"size":327,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"dotnet:master","ref":"master","sha":"0a8ac2ff2d3b2a709d6b2ce1093e26b88ab8a959","user":{"login":"dotnet","id":9141961,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNDE5NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":58085226,"node_id":"MDEwOlJlcG9zaXRvcnk1ODA4NTIyNg==","name":"jitutils","full_name":"dotnet/jitutils","owner":{"login":"dotnet","id":9141961,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkxNDE5NjE=","avatar_url":"https://avatars0.githubusercontent.com/u/9141961?v=4","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/jitutils","description":null,"fork":false,"url":"https://api.github.com/repos/dotnet/jitutils","forks_url":"https://api.github.com/repos/dotnet/jitutils/forks","keys_url":"https://api.github.com/repos/dotnet/jitutils/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/jitutils/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/jitutils/teams","hooks_url":"https://api.github.com/repos/dotnet/jitutils/hooks","issue_events_url":"https://api.github.com/repos/dotnet/jitutils/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/jitutils/events","assignees_url":"https://api.github.com/repos/dotnet/jitutils/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/jitutils/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/jitutils/tags","blobs_url":"https://api.github.com/repos/dotnet/jitutils/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/jitutils/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/jitutils/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/jitutils/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/jitutils/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/jitutils/languages","stargazers_url":"https://api.github.com/repos/dotnet/jitutils/stargazers","contributors_url":"https://api.github.com/repos/dotnet/jitutils/contributors","subscribers_url":"https://api.github.com/repos/dotnet/jitutils/subscribers","subscription_url":"https://api.github.com/repos/dotnet/jitutils/subscription","commits_url":"https://api.github.com/repos/dotnet/jitutils/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/jitutils/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/jitutils/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/jitutils/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/jitutils/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/jitutils/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/jitutils/merges","archive_url":"https://api.github.com/repos/dotnet/jitutils/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/jitutils/downloads","issues_url":"https://api.github.com/repos/dotnet/jitutils/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/jitutils/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/jitutils/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/jitutils/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/jitutils/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/jitutils/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/jitutils/deployments","created_at":"2016-05-04T21:29:36Z","updated_at":"2018-05-31T20:50:47Z","pushed_at":"2018-05-31T22:11:42Z","git_url":"git://github.com/dotnet/jitutils.git","ssh_url":"git@github.com:dotnet/jitutils.git","clone_url":"https://github.com/dotnet/jitutils.git","svn_url":"https://github.com/dotnet/jitutils","homepage":null,"size":320,"stargazers_count":32,"watchers_count":32,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":22,"mirror_url":null,"archived":false,"open_issues_count":26,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":22,"open_issues":26,"watchers":32,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/128"},"html":{"href":"https://github.com/dotnet/jitutils/pull/128"},"issue":{"href":"https://api.github.com/repos/dotnet/jitutils/issues/128"},"comments":{"href":"https://api.github.com/repos/dotnet/jitutils/issues/128/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/128/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/jitutils/pulls/128/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/jitutils/statuses/d250e0d10e432d1f03440b3cadeedb4d66e9ee0d"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"AndyAyersMS"}}