{"action":"created","comment":{"url":"https://api.github.com/repos/eclipse/openj9/pulls/comments/220112157","pull_request_review_id":158441658,"id":220112157,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMDExMjE1Nw==","diff_hunk":"@@ -0,0 +1,485 @@\n+/*******************************************************************************\n+ * Copyright (c) 2018, 2018 IBM Corp. and others\n+ *\n+ * This program and the accompanying materials are made available under\n+ * the terms of the Eclipse Public License 2.0 which accompanies this\n+ * distribution and is available at https://www.eclipse.org/legal/epl-2.0/\n+ * or the Apache License, Version 2.0 which accompanies this distribution and\n+ * is available at https://www.apache.org/licenses/LICENSE-2.0.\n+ *\n+ * This Source Code may also be made available under the following\n+ * Secondary Licenses when the conditions for such availability set\n+ * forth in the Eclipse Public License, v. 2.0 are satisfied: GNU\n+ * General Public License, version 2 with the GNU Classpath\n+ * Exception [1] and GNU General Public License, version 2 with the\n+ * OpenJDK Assembly Exception [2].\n+ *\n+ * [1] https://www.gnu.org/software/classpath/license.html\n+ * [2] http://openjdk.java.net/legal/assembly-exception.html\n+ *\n+ * SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception\n+ *******************************************************************************/\n+\n+#include \"optimizer/BoolArrayStoreTransformer.hpp\"\n+#include \"infra/Cfg.hpp\"\n+#include \"il/Node.hpp\"\n+#include \"il/Block.hpp\"\n+#include \"il/Node_inlines.hpp\"\n+#include \"il/TreeTop.hpp\"\n+#include \"omr/compiler/il/OMRTreeTop_inlines.hpp\"\n+#include \"il/symbol/AutomaticSymbol.hpp\"\n+#include <stack>\n+#include <deque>\n+\n+/*\n+ * This transformer is used to make sure the behavior of bastore in JIT code\n+ * complies with JVM specs:\n+ *\n+ * If the arrayref refers to an array whose components are of type boolean,\n+ * then the int value is narrowed by taking the bitwise AND of value and 1;\n+ * the result is stored as the component of the array indexed by index\n+ *\n+ * bastore can be array store to either boolean or byte array. To\n+ * figure out which bastore is for boolean array, the following steps are taken:\n+ *\n+ * 1. Normal IL generation pass solves the cases where the array base node is parm\n+ *    ,field, or call. It also collects info about if there are stores of boolean\n+ *    or bytes array type to any autos. If only one type of array or multi dimension\n+ *    array ever appears in the IL trees, the bstorei nodes can only be this one type.\n+ * 2. If arrays of both types exist in the IL trees, the transformer do a DFS traverse\n+ *    of the CFG and tries to propagate auto types as best effort. This\n+ *    approach might still leave some array's type unknown when there are stores of NULL\n+ *    to an auto, or there are loops, or the base array node is from a multinewarray.\n+ * 3. A runtime check is added for the array base node if the type is still unknown\n+ *    for any bstorei nodes after the above steps. The check will very likely be folded\n+ *    away by global value propagation and the overhead for important method body\n+ *    should be minimum.\n+ */\n+\n+#define OPT_DETAILS \"O^O BOOL ARRAY STORE TRANSFORMER: \"\n+\n+static char * getTypeName(TR_YesNoMaybe type, char * buffer)\n+   {\n+   switch (type)\n+      {\n+      case TR_yes:\n+         strcpy(buffer, \"[Z\");\n+         break;\n+      case TR_no:\n+         strcpy(buffer, \"[B\");\n+         break;\n+      case TR_maybe:\n+         strcpy(buffer, \"unknown type\");\n+         break;\n+      }\n+   return buffer;\n+   }\n+\n+static void printTypeInfo(TR_BoolArrayStoreTransformer::TypeInfo *typeInfo, TR::Compilation *comp)\n+   {\n+   int localIndex = 0;\n+   for (auto it = typeInfo->begin(); it != typeInfo->end(); it++)\n+      {\n+      if (*it != TR_maybe)\n+         {\n+         char buffer[15];\n+         traceMsg(comp, \"( local # %d: %s )  \", localIndex, getTypeName(*it, buffer));\n+         }\n+      localIndex++;\n+      }\n+   }\n+\n+TR_BoolArrayStoreTransformer::TR_BoolArrayStoreTransformer(NodeSet *bstoreiUnknownArrayTypeNodes, NodeSet *bstoreiBoolArrayTypeNodes)\n+   :\n+   _bstoreiUnknownArrayTypeNodes(bstoreiUnknownArrayTypeNodes),\n+   _bstoreiBoolArrayTypeNodes(bstoreiBoolArrayTypeNodes),\n+   _hasBoolArrayAuto(false),\n+   _hasByteArrayAuto(false),\n+   _numLocals(0)\n+   {\n+   _comp = TR::comp();\n+   }\n+\n+void TR_BoolArrayStoreTransformer::perform()\n+   {\n+   if (comp()->getOption(TR_TraceILGen))\n+      traceMsg(comp(), \"<BoolArrayStoreTransformer>\\n\");\n+\n+   if (!_bstoreiUnknownArrayTypeNodes->empty() && _hasBoolArrayAuto)\n+      {\n+      if (_hasByteArrayAuto) // only need to iterate CFG if both byte and boolean array exist\n+         findBoolArrayStoreNodes();\n+      else // if only boolean array exist then all the bstorei nodes are operating on boolean array\n+         {\n+         _bstoreiBoolArrayTypeNodes->insert(_bstoreiUnknownArrayTypeNodes->begin(), _bstoreiUnknownArrayTypeNodes->end());\n+         _bstoreiUnknownArrayTypeNodes->clear();\n+         }\n+      }\n+\n+   if (!_bstoreiBoolArrayTypeNodes->empty())\n+      transformBoolArrayStoreNodes();\n+\n+   if (!_bstoreiUnknownArrayTypeNodes->empty())\n+      transformUnknownTypeArrayStore();\n+\n+   if (comp()->getOption(TR_TraceILGen))\n+      traceMsg(comp(), \"</BoolArrayStoreTransformer>\\n\");\n+   }\n+\n+void TR_BoolArrayStoreTransformer::collectLocals(TR_Array<List<TR::SymbolReference>> *autosListArray)\n+   {\n+   for (int i = 0; autosListArray && i < autosListArray->size(); i++)\n+      {\n+      List<TR::SymbolReference> autosList = (*autosListArray)[i];\n+      ListIterator<TR::SymbolReference> autosIt(&autosList);\n+      for (TR::SymbolReference* symRef = autosIt.getFirst(); symRef; symRef = autosIt.getNext())\n+         {\n+         TR::DataType dt = symRef->getSymbol()->getDataType();","path":"runtime/compiler/optimizer/BoolArrayStoreTransformer.cpp","position":null,"original_position":137,"commit_id":"4a22e83aac0f3dc78b701a5dd03f599e904cfdd1","original_commit_id":"0b84be28426115d998fc146d432a7dda32205ef8","user":{"login":"cathyzhyi","id":14285834,"node_id":"MDQ6VXNlcjE0Mjg1ODM0","avatar_url":"https://avatars1.githubusercontent.com/u/14285834?v=4","gravatar_id":"","url":"https://api.github.com/users/cathyzhyi","html_url":"https://github.com/cathyzhyi","followers_url":"https://api.github.com/users/cathyzhyi/followers","following_url":"https://api.github.com/users/cathyzhyi/following{/other_user}","gists_url":"https://api.github.com/users/cathyzhyi/gists{/gist_id}","starred_url":"https://api.github.com/users/cathyzhyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cathyzhyi/subscriptions","organizations_url":"https://api.github.com/users/cathyzhyi/orgs","repos_url":"https://api.github.com/users/cathyzhyi/repos","events_url":"https://api.github.com/users/cathyzhyi/events{/privacy}","received_events_url":"https://api.github.com/users/cathyzhyi/received_events","type":"User","site_admin":false},"body":"deleted.","created_at":"2018-09-25T09:03:02Z","updated_at":"2018-09-25T09:03:02Z","html_url":"https://github.com/eclipse/openj9/pull/2910#discussion_r220112157","pull_request_url":"https://api.github.com/repos/eclipse/openj9/pulls/2910","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/comments/220112157"},"html":{"href":"https://github.com/eclipse/openj9/pull/2910#discussion_r220112157"},"pull_request":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/2910"}},"in_reply_to_id":219606704},"pull_request":{"url":"https://api.github.com/repos/eclipse/openj9/pulls/2910","id":216300153,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE2MzAwMTUz","html_url":"https://github.com/eclipse/openj9/pull/2910","diff_url":"https://github.com/eclipse/openj9/pull/2910.diff","patch_url":"https://github.com/eclipse/openj9/pull/2910.patch","issue_url":"https://api.github.com/repos/eclipse/openj9/issues/2910","number":2910,"state":"open","locked":false,"title":"WIP: Fix bastore il trees to comply with JVM spec","user":{"login":"cathyzhyi","id":14285834,"node_id":"MDQ6VXNlcjE0Mjg1ODM0","avatar_url":"https://avatars1.githubusercontent.com/u/14285834?v=4","gravatar_id":"","url":"https://api.github.com/users/cathyzhyi","html_url":"https://github.com/cathyzhyi","followers_url":"https://api.github.com/users/cathyzhyi/followers","following_url":"https://api.github.com/users/cathyzhyi/following{/other_user}","gists_url":"https://api.github.com/users/cathyzhyi/gists{/gist_id}","starred_url":"https://api.github.com/users/cathyzhyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cathyzhyi/subscriptions","organizations_url":"https://api.github.com/users/cathyzhyi/orgs","repos_url":"https://api.github.com/users/cathyzhyi/repos","events_url":"https://api.github.com/users/cathyzhyi/events{/privacy}","received_events_url":"https://api.github.com/users/cathyzhyi/received_events","type":"User","site_admin":false},"body":"The JVM spec states: \"If the arrayref refers to an array whose\r\ncomponents are of type boolean, then the int value is narrowed by taking\r\nthe bitwise AND of value and 1; the result is stored as the component of\r\nthe array indexed by index\"\r\n\r\nThis is the JIT part of the change. The VM part is #2046\r\n\r\nIssue: #2049\r\n\r\nSigned-off-by: Yi Zhang <yizhang@ca.ibm.com>","created_at":"2018-09-18T13:04:40Z","updated_at":"2018-09-25T09:03:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"6205ecaf4969416c8b2f528b601374494f718126","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/eclipse/openj9/pulls/2910/commits","review_comments_url":"https://api.github.com/repos/eclipse/openj9/pulls/2910/comments","review_comment_url":"https://api.github.com/repos/eclipse/openj9/pulls/comments{/number}","comments_url":"https://api.github.com/repos/eclipse/openj9/issues/2910/comments","statuses_url":"https://api.github.com/repos/eclipse/openj9/statuses/4a22e83aac0f3dc78b701a5dd03f599e904cfdd1","head":{"label":"cathyzhyi:bastore","ref":"bastore","sha":"4a22e83aac0f3dc78b701a5dd03f599e904cfdd1","user":{"login":"cathyzhyi","id":14285834,"node_id":"MDQ6VXNlcjE0Mjg1ODM0","avatar_url":"https://avatars1.githubusercontent.com/u/14285834?v=4","gravatar_id":"","url":"https://api.github.com/users/cathyzhyi","html_url":"https://github.com/cathyzhyi","followers_url":"https://api.github.com/users/cathyzhyi/followers","following_url":"https://api.github.com/users/cathyzhyi/following{/other_user}","gists_url":"https://api.github.com/users/cathyzhyi/gists{/gist_id}","starred_url":"https://api.github.com/users/cathyzhyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cathyzhyi/subscriptions","organizations_url":"https://api.github.com/users/cathyzhyi/orgs","repos_url":"https://api.github.com/users/cathyzhyi/repos","events_url":"https://api.github.com/users/cathyzhyi/events{/privacy}","received_events_url":"https://api.github.com/users/cathyzhyi/received_events","type":"User","site_admin":false},"repo":{"id":103860318,"node_id":"MDEwOlJlcG9zaXRvcnkxMDM4NjAzMTg=","name":"openj9","full_name":"cathyzhyi/openj9","private":false,"owner":{"login":"cathyzhyi","id":14285834,"node_id":"MDQ6VXNlcjE0Mjg1ODM0","avatar_url":"https://avatars1.githubusercontent.com/u/14285834?v=4","gravatar_id":"","url":"https://api.github.com/users/cathyzhyi","html_url":"https://github.com/cathyzhyi","followers_url":"https://api.github.com/users/cathyzhyi/followers","following_url":"https://api.github.com/users/cathyzhyi/following{/other_user}","gists_url":"https://api.github.com/users/cathyzhyi/gists{/gist_id}","starred_url":"https://api.github.com/users/cathyzhyi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cathyzhyi/subscriptions","organizations_url":"https://api.github.com/users/cathyzhyi/orgs","repos_url":"https://api.github.com/users/cathyzhyi/repos","events_url":"https://api.github.com/users/cathyzhyi/events{/privacy}","received_events_url":"https://api.github.com/users/cathyzhyi/received_events","type":"User","site_admin":false},"html_url":"https://github.com/cathyzhyi/openj9","description":"OpenJ9","fork":true,"url":"https://api.github.com/repos/cathyzhyi/openj9","forks_url":"https://api.github.com/repos/cathyzhyi/openj9/forks","keys_url":"https://api.github.com/repos/cathyzhyi/openj9/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cathyzhyi/openj9/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cathyzhyi/openj9/teams","hooks_url":"https://api.github.com/repos/cathyzhyi/openj9/hooks","issue_events_url":"https://api.github.com/repos/cathyzhyi/openj9/issues/events{/number}","events_url":"https://api.github.com/repos/cathyzhyi/openj9/events","assignees_url":"https://api.github.com/repos/cathyzhyi/openj9/assignees{/user}","branches_url":"https://api.github.com/repos/cathyzhyi/openj9/branches{/branch}","tags_url":"https://api.github.com/repos/cathyzhyi/openj9/tags","blobs_url":"https://api.github.com/repos/cathyzhyi/openj9/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cathyzhyi/openj9/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cathyzhyi/openj9/git/refs{/sha}","trees_url":"https://api.github.com/repos/cathyzhyi/openj9/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cathyzhyi/openj9/statuses/{sha}","languages_url":"https://api.github.com/repos/cathyzhyi/openj9/languages","stargazers_url":"https://api.github.com/repos/cathyzhyi/openj9/stargazers","contributors_url":"https://api.github.com/repos/cathyzhyi/openj9/contributors","subscribers_url":"https://api.github.com/repos/cathyzhyi/openj9/subscribers","subscription_url":"https://api.github.com/repos/cathyzhyi/openj9/subscription","commits_url":"https://api.github.com/repos/cathyzhyi/openj9/commits{/sha}","git_commits_url":"https://api.github.com/repos/cathyzhyi/openj9/git/commits{/sha}","comments_url":"https://api.github.com/repos/cathyzhyi/openj9/comments{/number}","issue_comment_url":"https://api.github.com/repos/cathyzhyi/openj9/issues/comments{/number}","contents_url":"https://api.github.com/repos/cathyzhyi/openj9/contents/{+path}","compare_url":"https://api.github.com/repos/cathyzhyi/openj9/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cathyzhyi/openj9/merges","archive_url":"https://api.github.com/repos/cathyzhyi/openj9/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cathyzhyi/openj9/downloads","issues_url":"https://api.github.com/repos/cathyzhyi/openj9/issues{/number}","pulls_url":"https://api.github.com/repos/cathyzhyi/openj9/pulls{/number}","milestones_url":"https://api.github.com/repos/cathyzhyi/openj9/milestones{/number}","notifications_url":"https://api.github.com/repos/cathyzhyi/openj9/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cathyzhyi/openj9/labels{/name}","releases_url":"https://api.github.com/repos/cathyzhyi/openj9/releases{/id}","deployments_url":"https://api.github.com/repos/cathyzhyi/openj9/deployments","created_at":"2017-09-17T20:40:58Z","updated_at":"2018-03-19T19:07:35Z","pushed_at":"2018-09-25T07:58:48Z","git_url":"git://github.com/cathyzhyi/openj9.git","ssh_url":"git@github.com:cathyzhyi/openj9.git","clone_url":"https://github.com/cathyzhyi/openj9.git","svn_url":"https://github.com/cathyzhyi/openj9","homepage":null,"size":34923,"stargazers_count":0,"watchers_count":0,"language":"Java","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":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"eclipse:master","ref":"master","sha":"c96d25fe65e85de67da1781aba30e8979337d6af","user":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"repo":{"id":101408117,"node_id":"MDEwOlJlcG9zaXRvcnkxMDE0MDgxMTc=","name":"openj9","full_name":"eclipse/openj9","private":false,"owner":{"login":"eclipse","id":56974,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU2OTc0","avatar_url":"https://avatars1.githubusercontent.com/u/56974?v=4","gravatar_id":"","url":"https://api.github.com/users/eclipse","html_url":"https://github.com/eclipse","followers_url":"https://api.github.com/users/eclipse/followers","following_url":"https://api.github.com/users/eclipse/following{/other_user}","gists_url":"https://api.github.com/users/eclipse/gists{/gist_id}","starred_url":"https://api.github.com/users/eclipse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eclipse/subscriptions","organizations_url":"https://api.github.com/users/eclipse/orgs","repos_url":"https://api.github.com/users/eclipse/repos","events_url":"https://api.github.com/users/eclipse/events{/privacy}","received_events_url":"https://api.github.com/users/eclipse/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/eclipse/openj9","description":"Eclipse OpenJ9: A Java Virtual Machine for OpenJDK that's optimized for small footprint, fast start-up, and high throughput.   Builds on Eclipse OMR (https://github.com/eclipse/omr) and combines with the Extensions for OpenJDK for OpenJ9 repo.","fork":false,"url":"https://api.github.com/repos/eclipse/openj9","forks_url":"https://api.github.com/repos/eclipse/openj9/forks","keys_url":"https://api.github.com/repos/eclipse/openj9/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eclipse/openj9/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eclipse/openj9/teams","hooks_url":"https://api.github.com/repos/eclipse/openj9/hooks","issue_events_url":"https://api.github.com/repos/eclipse/openj9/issues/events{/number}","events_url":"https://api.github.com/repos/eclipse/openj9/events","assignees_url":"https://api.github.com/repos/eclipse/openj9/assignees{/user}","branches_url":"https://api.github.com/repos/eclipse/openj9/branches{/branch}","tags_url":"https://api.github.com/repos/eclipse/openj9/tags","blobs_url":"https://api.github.com/repos/eclipse/openj9/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eclipse/openj9/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eclipse/openj9/git/refs{/sha}","trees_url":"https://api.github.com/repos/eclipse/openj9/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eclipse/openj9/statuses/{sha}","languages_url":"https://api.github.com/repos/eclipse/openj9/languages","stargazers_url":"https://api.github.com/repos/eclipse/openj9/stargazers","contributors_url":"https://api.github.com/repos/eclipse/openj9/contributors","subscribers_url":"https://api.github.com/repos/eclipse/openj9/subscribers","subscription_url":"https://api.github.com/repos/eclipse/openj9/subscription","commits_url":"https://api.github.com/repos/eclipse/openj9/commits{/sha}","git_commits_url":"https://api.github.com/repos/eclipse/openj9/git/commits{/sha}","comments_url":"https://api.github.com/repos/eclipse/openj9/comments{/number}","issue_comment_url":"https://api.github.com/repos/eclipse/openj9/issues/comments{/number}","contents_url":"https://api.github.com/repos/eclipse/openj9/contents/{+path}","compare_url":"https://api.github.com/repos/eclipse/openj9/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eclipse/openj9/merges","archive_url":"https://api.github.com/repos/eclipse/openj9/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eclipse/openj9/downloads","issues_url":"https://api.github.com/repos/eclipse/openj9/issues{/number}","pulls_url":"https://api.github.com/repos/eclipse/openj9/pulls{/number}","milestones_url":"https://api.github.com/repos/eclipse/openj9/milestones{/number}","notifications_url":"https://api.github.com/repos/eclipse/openj9/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eclipse/openj9/labels{/name}","releases_url":"https://api.github.com/repos/eclipse/openj9/releases{/id}","deployments_url":"https://api.github.com/repos/eclipse/openj9/deployments","created_at":"2017-08-25T13:46:07Z","updated_at":"2018-09-25T00:27:57Z","pushed_at":"2018-09-25T07:58:50Z","git_url":"git://github.com/eclipse/openj9.git","ssh_url":"git@github.com:eclipse/openj9.git","clone_url":"https://github.com/eclipse/openj9.git","svn_url":"https://github.com/eclipse/openj9","homepage":"","size":34595,"stargazers_count":1422,"watchers_count":1422,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":280,"mirror_url":null,"archived":false,"open_issues_count":459,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":280,"open_issues":459,"watchers":1422,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/2910"},"html":{"href":"https://github.com/eclipse/openj9/pull/2910"},"issue":{"href":"https://api.github.com/repos/eclipse/openj9/issues/2910"},"comments":{"href":"https://api.github.com/repos/eclipse/openj9/issues/2910/comments"},"review_comments":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/2910/comments"},"review_comment":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/eclipse/openj9/pulls/2910/commits"},"statuses":{"href":"https://api.github.com/repos/eclipse/openj9/statuses/4a22e83aac0f3dc78b701a5dd03f599e904cfdd1"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"cathyzhyi"}}