{"action":"created","comment":{"url":"https://api.github.com/repos/scala-native/scala-native/pulls/comments/68487131","id":68487131,"diff_hunk":"@@ -2,119 +2,201 @@ package scala.scalanative\n package runtime\n \n // Note 1:\n-// Arrays.scala is currently implemented as textual templating that is expanded through project/gyb.py script.\n+// Arrays.scala is currently implemented as textual templating that is expanded through project/gyb.py script. \n // Update Arrays.scala.gyb and re-generate the source\n+// $ ./project/gyb.py \\ \n+//     nativelib/src/main/scala/scala/scalanative/runtime/Arrays.scala.gyb > \\\n+//     nativelib/src/main/scala/scala/scalanative/runtime/Arrays.scala\n+\n \n // Note 2:\n // Array of primitiveTypes don't contain pointers, runtime.allocAtomic() is called for memory allocation\n // Array of Object do contain pointers. runtime.alloc() is called for memory allocation\n \n-%{\n-   primitiveTypes = ['Boolean', 'Char', 'Byte', 'Short',\n-            'Int', 'Long', 'Float', 'Double']\n-}%\n+// Note 3:\n+// PrimitiveArray.helperClone can allocate memory with GC.malloc_atomic() because \n+// it will overwrite all data (no need to call llvm.memset)\n+\n \n import native._\n+import Intrinsics._\n \n @struct class ArrayHeader(val info: Ptr[_], val length: Int)\n \n+%{\n+   primitiveTypes = ['Boolean', 'Char', 'Byte', 'Short',\n+            'Int', 'Long', 'Float', 'Double']\n+}%\n+\n sealed abstract class Array[T]\n     extends java.io.Serializable with java.lang.Cloneable {\n   /** Number of elements of the array. */\n   def length: Int =\n     // TODO: Update once we support ptr->field\n     !(this.cast[Ptr[Byte]] + sizeof[Ptr[_]]).cast[Ptr[Int]]\n-\n+    \n   /** Loads element at i, throws IndexOutOfBoundsException. */\n   def apply(i: Int): T\n \n   /** Stores value to element i, throws IndexOutOfBoundsException. */\n   def update(i: Int, value: T): Unit\n \n   /** Create a shallow of given array. */\n-  protected override def clone(): Array[T] = undefined\n+  protected override def clone(): Array[T] = undefined  \n }\n \n-final class ObjectArray private () extends Array[Object] {\n-  def apply(i: Int): Object =\n-    if (i < 0 || i >= length)\n-      throw new IndexOutOfBoundsException(i.toString)\n-    else {\n-      val headptr = (this.cast[Ptr[Byte]] + sizeof[ArrayHeader]).cast[Ptr[Object]]\n-      headptr(i)\n-    }\n+object Array {\n+  def copy (from: AnyRef, fromPos: Int, to: AnyRef, toPos: Int, length: Int): Unit = {\n+    if (from == null)\n+      throw new NullPointerException()\n+    \n+    if (to == null)\n+      throw new NullPointerException()\n+    \n+    val fromTypeId = instanceTypeId(from)\n+    val toTypeId = instanceTypeId(to)\n+    \n+    if (fromTypeId == arrayObjectTypeId && toTypeId == arrayObjectTypeId)\n+      from.asInstanceOf[ObjectArray].copyToArray (fromPos, to.asInstanceOf[ObjectArray], toPos, length)\n+    \n+% for T in primitiveTypes:\n+\n+    else if (fromTypeId == array${T}TypeId && toTypeId == array${T}TypeId) \n+      from.asInstanceOf[${T}Array].copyToArray (fromPos, to.asInstanceOf[${T}Array], toPos, length)\n+      \n+% end\n+\n+    else\n+      throw new ArrayStoreException (\"Not implemented yet.\")\n+  }\n+  \n+  // the id's chosen by the compiler/linker for differents types of array\n+\n+  val arrayObjectTypeId = typeId (typeof[scalanative.runtime.ObjectArray])\n+  \n+% for T in primitiveTypes:\n+\n+  val array${T}TypeId = typeId (typeof[scalanative.runtime.${T}Array])\n+  \n+% end  \n+    \n+  private def typeId (ptr : Ptr[Type]): Int = {\n+    (!ptr).id    \n+  }\n+  \n+  private def instanceTypeId (any : AnyRef): Int = {\n+    typeId(runtime.getType(any))\n+  }\n+  \n+  @inline private[runtime] def validateBoundaries (from: Array[_], fromPos: Int, to: Array[_], toPos: Int, len: Int): Unit = {\n+    if (len < 0)\n+      throw new IndexOutOfBoundsException(\"length is negative\")\n \n-  def update(i: Int, value: Object): Unit =\n-    if (i < 0 || i >= length)\n+    if (fromPos < 0 || fromPos + len > from.length)\n+      throw new IndexOutOfBoundsException(fromPos.toString)\n+\n+    if (toPos < 0 || toPos + len > to.length)\n+      throw new IndexOutOfBoundsException(toPos.toString)    \n+  }\n+  \n+  @inline private[runtime] def pointerAt(arr: Array[_], sizeOneElement: CSize, i: Int): Ptr[_] = {\n+    if (i < 0 || i >= arr.length)\n       throw new IndexOutOfBoundsException(i.toString)\n     else {\n-      val headptr = (this.cast[Ptr[Byte]] + sizeof[ArrayHeader]).cast[Ptr[Object]]\n-      headptr(i) = value\n+      (arr.cast[Ptr[Byte]] + sizeof[ArrayHeader] + sizeOneElement * i).cast[Ptr[_]]\n     }\n-\n-  protected override def clone(): ObjectArray = {\n-    val newarr = ObjectArray.alloc(length)\n-    ObjectArray.copy(this, 0, newarr, 0, length)\n-    newarr\n   }\n+  \n+  @inline private[runtime] def helperClone(from: Array[_], length: Int, stride: CSize): Ptr[_] = {\n+    val arrsize = sizeof[ArrayHeader] + stride * length\n+    val arr = GC.malloc(arrsize)\n+    `llvm.memcpy.p0i8.p0i8.i64`(arr.cast[Ptr[Byte]], from.cast[Ptr[Byte]], arrsize, 1, false)\n+    arr        \n+  }  \n+  \n+  def alloc(length: Int, arrinfo:  Ptr[Type], stride: CSize): Ptr[_] = {\n+    val arrsize = sizeof[ArrayHeader] + stride * length\n+    val arr = runtime.alloc(arrinfo, arrsize)\n+    // set the length\n+    !(arr.cast[Ptr[Byte]] + sizeof[Ptr[_]]).cast[Ptr[Int]] = length    \n+    arr        \n+  } \n }\n \n-object ObjectArray {\n-  def copy(from: ObjectArray, fromPos: Int,\n-           to: ObjectArray, toPos: Int, length: Int): Unit = {\n-    ???\n+object PrimitiveArray {\n+  @inline private[runtime] def helperClone(src: Array[_], length: Int, stride: CSize): Ptr[_] = {\n+    val arrsize = sizeof[ArrayHeader] + stride * length\n+    val arr = GC.malloc_atomic(arrsize)\n+    `llvm.memcpy.p0i8.p0i8.i64`(arr.cast[Ptr[Byte]], src.cast[Ptr[Byte]], arrsize, 1, false)\n+    arr\n   }\n-\n-  def alloc(length: Int): ObjectArray = {\n-    val arrty = typeof[ObjectArray]\n-    val arrsize = sizeof[ArrayHeader] + sizeof[Object] * length\n-    val arr = runtime.alloc(arrty, arrsize)\n+  \n+  def alloc(length: Int, arrinfo:  Ptr[Type], stride: CSize): Ptr[_] = {\n+    val arrsize = sizeof[ArrayHeader] + stride * length\n+    // Primitive arrays don't contain pointers \n+    val arr = runtime.allocAtomic(arrinfo, arrsize)\n     // set the length\n-    !(arr.cast[Ptr[Byte]] + sizeof[Ptr[_]]).cast[Ptr[Int]] = length\n-    arr.cast[ObjectArray]\n+    !(arr.cast[Ptr[Byte]] + sizeof[Ptr[_]]).cast[Ptr[Int]] = length    \n+    arr        \n   }\n }\n \n-% for T in primitiveTypes:\n+final class ObjectArray private () extends Array[Object] {\n+  def apply(i: Int): Object = ! (Array.pointerAt(this, sizeof[Object], i).cast[Ptr[Object]])\n+\n+  def update(i: Int, value: Object): Unit = ! (Array.pointerAt(this, sizeof[Object], i).cast[Ptr[Object]]) = value\n+\n+  protected override def clone(): ObjectArray = Array.helperClone (this, length, sizeof[Object]).cast[ObjectArray]\n+  \n+  def stride: CSize = sizeof[Object]","path":"nativelib/src/main/scala/scala/scalanative/runtime/Arrays.scala.gyb","position":186,"original_position":186,"commit_id":"6c7178448fada55d8f0ec6f210eebf0f3f638067","original_commit_id":"6c7178448fada55d8f0ec6f210eebf0f3f638067","user":{"login":"densh","id":320966,"avatar_url":"https://avatars.githubusercontent.com/u/320966?v=3","gravatar_id":"","url":"https://api.github.com/users/densh","html_url":"https://github.com/densh","followers_url":"https://api.github.com/users/densh/followers","following_url":"https://api.github.com/users/densh/following{/other_user}","gists_url":"https://api.github.com/users/densh/gists{/gist_id}","starred_url":"https://api.github.com/users/densh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/densh/subscriptions","organizations_url":"https://api.github.com/users/densh/orgs","repos_url":"https://api.github.com/users/densh/repos","events_url":"https://api.github.com/users/densh/events{/privacy}","received_events_url":"https://api.github.com/users/densh/received_events","type":"User","site_admin":false},"body":"This one should also go to companion.","created_at":"2016-06-25T10:09:56Z","updated_at":"2016-06-25T10:09:56Z","html_url":"https://github.com/scala-native/scala-native/pull/184#discussion_r68487131","pull_request_url":"https://api.github.com/repos/scala-native/scala-native/pulls/184","_links":{"self":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/comments/68487131"},"html":{"href":"https://github.com/scala-native/scala-native/pull/184#discussion_r68487131"},"pull_request":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/184"}}},"pull_request":{"url":"https://api.github.com/repos/scala-native/scala-native/pulls/184","id":73987196,"html_url":"https://github.com/scala-native/scala-native/pull/184","diff_url":"https://github.com/scala-native/scala-native/pull/184.diff","patch_url":"https://github.com/scala-native/scala-native/pull/184.patch","issue_url":"https://api.github.com/repos/scala-native/scala-native/issues/184","number":184,"state":"open","locked":false,"title":"implement array.clone() and basic array.copy()","user":{"login":"fbertra","id":18035,"avatar_url":"https://avatars.githubusercontent.com/u/18035?v=3","gravatar_id":"","url":"https://api.github.com/users/fbertra","html_url":"https://github.com/fbertra","followers_url":"https://api.github.com/users/fbertra/followers","following_url":"https://api.github.com/users/fbertra/following{/other_user}","gists_url":"https://api.github.com/users/fbertra/gists{/gist_id}","starred_url":"https://api.github.com/users/fbertra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fbertra/subscriptions","organizations_url":"https://api.github.com/users/fbertra/orgs","repos_url":"https://api.github.com/users/fbertra/repos","events_url":"https://api.github.com/users/fbertra/events{/privacy}","received_events_url":"https://api.github.com/users/fbertra/received_events","type":"User","site_admin":false},"body":"Modified files:\r\n\r\nMain logic:\r\n- nativelib/src/main/scala/scala/scalanative/runtime/Arrays.scala\r\n- nativelib/src/main/scala/scala/scalanative/runtime/Arrays.scala.gyb  \r\n\r\nNew methods to allocate memory for array::clone()\r\n- nativelib/src/main/scala/scala/scalanative/runtime/package.scala\r\n\r\nCall scalanative.runtime.Array::copy from java/scala legacy methods\r\n- scalalib/overrides-2.11/scala/Array.scala\r\n- javalib/src/main/scala/java/lang/System.scala\r\n","created_at":"2016-06-15T21:27:04Z","updated_at":"2016-06-25T10:09:56Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b975d991c7d48047e77125b22f17e82987472410","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/scala-native/scala-native/pulls/184/commits","review_comments_url":"https://api.github.com/repos/scala-native/scala-native/pulls/184/comments","review_comment_url":"https://api.github.com/repos/scala-native/scala-native/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scala-native/scala-native/issues/184/comments","statuses_url":"https://api.github.com/repos/scala-native/scala-native/statuses/6c7178448fada55d8f0ec6f210eebf0f3f638067","head":{"label":"fbertra:implement_array_clone_basic_copy_pr","ref":"implement_array_clone_basic_copy_pr","sha":"6c7178448fada55d8f0ec6f210eebf0f3f638067","user":{"login":"fbertra","id":18035,"avatar_url":"https://avatars.githubusercontent.com/u/18035?v=3","gravatar_id":"","url":"https://api.github.com/users/fbertra","html_url":"https://github.com/fbertra","followers_url":"https://api.github.com/users/fbertra/followers","following_url":"https://api.github.com/users/fbertra/following{/other_user}","gists_url":"https://api.github.com/users/fbertra/gists{/gist_id}","starred_url":"https://api.github.com/users/fbertra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fbertra/subscriptions","organizations_url":"https://api.github.com/users/fbertra/orgs","repos_url":"https://api.github.com/users/fbertra/repos","events_url":"https://api.github.com/users/fbertra/events{/privacy}","received_events_url":"https://api.github.com/users/fbertra/received_events","type":"User","site_admin":false},"repo":{"id":59599153,"name":"scala-native","full_name":"fbertra/scala-native","owner":{"login":"fbertra","id":18035,"avatar_url":"https://avatars.githubusercontent.com/u/18035?v=3","gravatar_id":"","url":"https://api.github.com/users/fbertra","html_url":"https://github.com/fbertra","followers_url":"https://api.github.com/users/fbertra/followers","following_url":"https://api.github.com/users/fbertra/following{/other_user}","gists_url":"https://api.github.com/users/fbertra/gists{/gist_id}","starred_url":"https://api.github.com/users/fbertra/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fbertra/subscriptions","organizations_url":"https://api.github.com/users/fbertra/orgs","repos_url":"https://api.github.com/users/fbertra/repos","events_url":"https://api.github.com/users/fbertra/events{/privacy}","received_events_url":"https://api.github.com/users/fbertra/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/fbertra/scala-native","description":"Your favourite language gets closer to bare metal.","fork":true,"url":"https://api.github.com/repos/fbertra/scala-native","forks_url":"https://api.github.com/repos/fbertra/scala-native/forks","keys_url":"https://api.github.com/repos/fbertra/scala-native/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fbertra/scala-native/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fbertra/scala-native/teams","hooks_url":"https://api.github.com/repos/fbertra/scala-native/hooks","issue_events_url":"https://api.github.com/repos/fbertra/scala-native/issues/events{/number}","events_url":"https://api.github.com/repos/fbertra/scala-native/events","assignees_url":"https://api.github.com/repos/fbertra/scala-native/assignees{/user}","branches_url":"https://api.github.com/repos/fbertra/scala-native/branches{/branch}","tags_url":"https://api.github.com/repos/fbertra/scala-native/tags","blobs_url":"https://api.github.com/repos/fbertra/scala-native/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fbertra/scala-native/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fbertra/scala-native/git/refs{/sha}","trees_url":"https://api.github.com/repos/fbertra/scala-native/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fbertra/scala-native/statuses/{sha}","languages_url":"https://api.github.com/repos/fbertra/scala-native/languages","stargazers_url":"https://api.github.com/repos/fbertra/scala-native/stargazers","contributors_url":"https://api.github.com/repos/fbertra/scala-native/contributors","subscribers_url":"https://api.github.com/repos/fbertra/scala-native/subscribers","subscription_url":"https://api.github.com/repos/fbertra/scala-native/subscription","commits_url":"https://api.github.com/repos/fbertra/scala-native/commits{/sha}","git_commits_url":"https://api.github.com/repos/fbertra/scala-native/git/commits{/sha}","comments_url":"https://api.github.com/repos/fbertra/scala-native/comments{/number}","issue_comment_url":"https://api.github.com/repos/fbertra/scala-native/issues/comments{/number}","contents_url":"https://api.github.com/repos/fbertra/scala-native/contents/{+path}","compare_url":"https://api.github.com/repos/fbertra/scala-native/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fbertra/scala-native/merges","archive_url":"https://api.github.com/repos/fbertra/scala-native/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fbertra/scala-native/downloads","issues_url":"https://api.github.com/repos/fbertra/scala-native/issues{/number}","pulls_url":"https://api.github.com/repos/fbertra/scala-native/pulls{/number}","milestones_url":"https://api.github.com/repos/fbertra/scala-native/milestones{/number}","notifications_url":"https://api.github.com/repos/fbertra/scala-native/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fbertra/scala-native/labels{/name}","releases_url":"https://api.github.com/repos/fbertra/scala-native/releases{/id}","deployments_url":"https://api.github.com/repos/fbertra/scala-native/deployments","created_at":"2016-05-24T18:41:11Z","updated_at":"2016-05-24T18:41:13Z","pushed_at":"2016-06-22T19:41:35Z","git_url":"git://github.com/fbertra/scala-native.git","ssh_url":"git@github.com:fbertra/scala-native.git","clone_url":"https://github.com/fbertra/scala-native.git","svn_url":"https://github.com/fbertra/scala-native","homepage":"http://scala-native.org","size":2240,"stargazers_count":0,"watchers_count":0,"language":"Scala","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":0,"default_branch":"master"}},"base":{"label":"scala-native:master","ref":"master","sha":"0d496231d3d27137edc6267ff86b2e5addf75f9d","user":{"login":"scala-native","id":17545605,"avatar_url":"https://avatars.githubusercontent.com/u/17545605?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-native","html_url":"https://github.com/scala-native","followers_url":"https://api.github.com/users/scala-native/followers","following_url":"https://api.github.com/users/scala-native/following{/other_user}","gists_url":"https://api.github.com/users/scala-native/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-native/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-native/subscriptions","organizations_url":"https://api.github.com/users/scala-native/orgs","repos_url":"https://api.github.com/users/scala-native/repos","events_url":"https://api.github.com/users/scala-native/events{/privacy}","received_events_url":"https://api.github.com/users/scala-native/received_events","type":"Organization","site_admin":false},"repo":{"id":27235687,"name":"scala-native","full_name":"scala-native/scala-native","owner":{"login":"scala-native","id":17545605,"avatar_url":"https://avatars.githubusercontent.com/u/17545605?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-native","html_url":"https://github.com/scala-native","followers_url":"https://api.github.com/users/scala-native/followers","following_url":"https://api.github.com/users/scala-native/following{/other_user}","gists_url":"https://api.github.com/users/scala-native/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-native/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-native/subscriptions","organizations_url":"https://api.github.com/users/scala-native/orgs","repos_url":"https://api.github.com/users/scala-native/repos","events_url":"https://api.github.com/users/scala-native/events{/privacy}","received_events_url":"https://api.github.com/users/scala-native/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scala-native/scala-native","description":"Your favourite language gets closer to bare metal.","fork":false,"url":"https://api.github.com/repos/scala-native/scala-native","forks_url":"https://api.github.com/repos/scala-native/scala-native/forks","keys_url":"https://api.github.com/repos/scala-native/scala-native/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scala-native/scala-native/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scala-native/scala-native/teams","hooks_url":"https://api.github.com/repos/scala-native/scala-native/hooks","issue_events_url":"https://api.github.com/repos/scala-native/scala-native/issues/events{/number}","events_url":"https://api.github.com/repos/scala-native/scala-native/events","assignees_url":"https://api.github.com/repos/scala-native/scala-native/assignees{/user}","branches_url":"https://api.github.com/repos/scala-native/scala-native/branches{/branch}","tags_url":"https://api.github.com/repos/scala-native/scala-native/tags","blobs_url":"https://api.github.com/repos/scala-native/scala-native/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scala-native/scala-native/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scala-native/scala-native/git/refs{/sha}","trees_url":"https://api.github.com/repos/scala-native/scala-native/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scala-native/scala-native/statuses/{sha}","languages_url":"https://api.github.com/repos/scala-native/scala-native/languages","stargazers_url":"https://api.github.com/repos/scala-native/scala-native/stargazers","contributors_url":"https://api.github.com/repos/scala-native/scala-native/contributors","subscribers_url":"https://api.github.com/repos/scala-native/scala-native/subscribers","subscription_url":"https://api.github.com/repos/scala-native/scala-native/subscription","commits_url":"https://api.github.com/repos/scala-native/scala-native/commits{/sha}","git_commits_url":"https://api.github.com/repos/scala-native/scala-native/git/commits{/sha}","comments_url":"https://api.github.com/repos/scala-native/scala-native/comments{/number}","issue_comment_url":"https://api.github.com/repos/scala-native/scala-native/issues/comments{/number}","contents_url":"https://api.github.com/repos/scala-native/scala-native/contents/{+path}","compare_url":"https://api.github.com/repos/scala-native/scala-native/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scala-native/scala-native/merges","archive_url":"https://api.github.com/repos/scala-native/scala-native/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scala-native/scala-native/downloads","issues_url":"https://api.github.com/repos/scala-native/scala-native/issues{/number}","pulls_url":"https://api.github.com/repos/scala-native/scala-native/pulls{/number}","milestones_url":"https://api.github.com/repos/scala-native/scala-native/milestones{/number}","notifications_url":"https://api.github.com/repos/scala-native/scala-native/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scala-native/scala-native/labels{/name}","releases_url":"https://api.github.com/repos/scala-native/scala-native/releases{/id}","deployments_url":"https://api.github.com/repos/scala-native/scala-native/deployments","created_at":"2014-11-27T17:38:28Z","updated_at":"2016-06-25T07:44:37Z","pushed_at":"2016-06-25T10:02:08Z","git_url":"git://github.com/scala-native/scala-native.git","ssh_url":"git@github.com:scala-native/scala-native.git","clone_url":"https://github.com/scala-native/scala-native.git","svn_url":"https://github.com/scala-native/scala-native","homepage":"http://scala-native.org","size":2497,"stargazers_count":1847,"watchers_count":1847,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":71,"mirror_url":null,"open_issues_count":72,"forks":71,"open_issues":72,"watchers":1847,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/184"},"html":{"href":"https://github.com/scala-native/scala-native/pull/184"},"issue":{"href":"https://api.github.com/repos/scala-native/scala-native/issues/184"},"comments":{"href":"https://api.github.com/repos/scala-native/scala-native/issues/184/comments"},"review_comments":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/184/comments"},"review_comment":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scala-native/scala-native/pulls/184/commits"},"statuses":{"href":"https://api.github.com/repos/scala-native/scala-native/statuses/6c7178448fada55d8f0ec6f210eebf0f3f638067"}}}}
{"actor":{"display_login":"densh"}}