{"action":"created","comment":{"url":"https://api.github.com/repos/scala-js/scala-js/pulls/comments/28139043","id":28139043,"diff_hunk":"@@ -0,0 +1,454 @@\n+/*\n+ *  Ported by Alistair Johnson from https://android.googlesource.com/platform/libcore/+/master/luni/src/main/java/java/math/Multiplication.java\n+ */\n+\n+/*\n+ *  Licensed to the Apache Software Foundation (ASF) under one or more\n+ *  contributor license agreements.  See the NOTICE file distributed with\n+ *  this work for additional information regarding copyright ownership.\n+ *  The ASF licenses this file to You under the Apache License, Version 2.0\n+ *  (the \"License\"); you may not use this file except in compliance with\n+ *  the License.  You may obtain a copy of the License at\n+ *\n+ *     http://www.apache.org/licenses/LICENSE-2.0\n+ *\n+ *  Unless required by applicable law or agreed to in writing, software\n+ *  distributed under the License is distributed on an \"AS IS\" BASIS,\n+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+ *  See the License for the specific language governing permissions and\n+ *  limitations under the License.\n+ */\n+\n+package java.math\n+\n+/**\n+ * Object that provides all multiplication of {@link BigInteger} methods.\n+ */\n+object Multiplication {\n+\n+  /**\n+   * An array with powers of ten that fit in the type {@code int}.\n+   * ({@code 10^0,10^1,...,10^9})\n+   */\n+  val tenPows = newArrayOfPows(10, 10)\n+\n+  /**\n+   * An array with powers of five that fit in the type {@code int}.\n+   * ({@code 5^0,5^1,...,5^13})\n+   */\n+  val fivePows = newArrayOfPows(14, 5)\n+\n+  /**\n+   * An array with the first powers of ten in {@code BigInteger} version.\n+   * ({@code 10^0,10^1,...,10^31})\n+   */\n+  val bigTenPows = new Array[BigInteger](32)\n+\n+  /**\n+   * An array with the first powers of five in {@code BigInteger} version.\n+   * ({@code 5^0,5^1,...,5^31})\n+   */\n+  val bigFivePows =  new Array[BigInteger](32)\n+\n+  val whenUseKaratsuba = 63\n+\n+  initialiseArrays()\n+\n+  /**\n+   * Multiplies an array of integers by an integer value.\n+   *\n+   * @param a the array of integers\n+   * @param aSize the number of elements of intArray to be multiplied\n+   * @param factor the multiplier\n+   * @return the top digit of production\n+   */\n+  def multiplyByInt(a: Array[Int], aSize: Int, factor: Int): Int =\n+    multiplyByInt(a, a, aSize, factor)\n+\n+  /**\n+   * Multiplies a number by a positive integer.\n+   * @param bi an arbitrary {@code BigInteger}\n+   * @param factor a positive {@code int} number\n+   * @return {@code val * factor}\n+   */\n+  def multiplyByPosInt(bi: BigInteger, factor: Int): BigInteger = {\n+    val resSign: Int = bi.sign\n+    val aNumberLength = bi.numberLength\n+    val aDigits = bi.digits\n+\n+    if (resSign == 0) {\n+      BigInteger.ZERO\n+    } else if (aNumberLength == 1) {\n+      val res: Long = unsignedMultAddAdd(aDigits(0), factor, 0, 0)\n+      val resLo = res.toInt\n+      val resHi = (res >>> 32).toInt\n+      if (resHi == 0) new BigInteger(resSign, resLo)\n+      else new BigInteger(resSign, 2, Array(resLo, resHi))\n+    } else {\n+      val resLength = aNumberLength + 1\n+      val resDigits = new Array[Int](resLength)\n+      resDigits(aNumberLength) = multiplyByInt(resDigits, aDigits, aNumberLength, factor)\n+      val result = new BigInteger(resSign, resLength, resDigits)\n+      result.cutOffLeadingZeroes()\n+      result\n+    }\n+  }\n+\n+  /**\n+   * Multiplies a number by a power of ten.\n+   * This method is used in {@code BigDecimal} class.\n+   * @param bi the number to be multiplied\n+   * @param exp a positive {@code long} exponent\n+   * @return {@code val * 10<sup>exp</sup>}\n+   */\n+  def multiplyByTenPow(bi: BigInteger, exp: Long): BigInteger = {\n+    if (exp < tenPows.length) multiplyByPosInt(bi, tenPows(exp.toInt))\n+    else bi.multiply(powerOf10(exp))\n+  }\n+\n+  /**\n+   * Performs a<sup>2</sup>.\n+   *\n+   * @param a The number to square.\n+   * @param aLen The length of the number to square.\n+   */\n+  def square(a: Array[Int], aLen: Int, res: Array[Int]): Array[Int] = {\n+    var carry: Long = 0l\n+\n+    for (i <- 0 until aLen) {\n+      carry = 0\n+      for (j <- i + 1 until aLen) {\n+        carry = unsignedMultAddAdd(a(i), a(j), res(i + j), carry.toInt)\n+        res(i + j) = carry.toInt\n+        carry >>>= 32\n+      }\n+      res(i + aLen) = carry.toInt\n+    }\n+    BitLevel.shiftLeftOneBit(res, res, aLen << 1)\n+    carry = 0\n+    var i = 0\n+    var index = 0\n+    while (i < aLen) {\n+      carry = unsignedMultAddAdd(a(i), a(i), res(index), carry.toInt)\n+      res(index) = carry.toInt\n+      carry >>>= 32\n+      index += 1\n+      carry += res(index) & 0xFFFFFFFFL\n+      res(index) = carry.toInt\n+      carry >>>= 32\n+      i += 1\n+      index += 1\n+    }\n+    res\n+  }\n+\n+  /**\n+   * Computes the value unsigned ((uint)a*(uint)b + (uint)c + (uint)d). This\n+   * method could improve the readability and performance of the code.\n+   *\n+   * @param a parameter 1\n+   * @param b parameter 2\n+   * @param c parameter 3\n+   * @param d parameter 4\n+   * @return value of expression\n+   */\n+  def unsignedMultAddAdd(a: Int, b: Int, c: Int, d: Int): Long =\n+    (a & 0xFFFFFFFFL) * (b & 0xFFFFFFFFL) + (c & 0xFFFFFFFFL) + (d & 0xFFFFFFFFL)\n+\n+  /**\n+   * Performs the multiplication with the Karatsuba's algorithm. <b>Karatsuba's\n+   * algorithm:</b> <tt>\n+   *             u = u<sub>1</sub> * B + u<sub>0</sub><br>\n+   *             v = v<sub>1</sub> * B + v<sub>0</sub><br>\n+   *\n+   *\n+   *  u*v = (u<sub>1</sub> * v<sub>1</sub>) * B<sub>2</sub> + ((u<sub>1</sub> - u<sub>0</sub>) * (v<sub>0</sub> - v<sub>1</sub>) + u<sub>1</sub> * v<sub>1</sub> +\n+   *  u<sub>0</sub> * v<sub>0</sub> ) * B + u<sub>0</sub> * v<sub>0</sub><br>\n+   *</tt>\n+   *\n+   * @param op1 first factor of the product\n+   * @param op2 second factor of the product\n+   * @return {@code op1 * op2}\n+   * @see #multiply(BigInteger, BigInteger)\n+   */\n+  def karatsuba(val1: BigInteger, val2: BigInteger): BigInteger = {\n+    var op1 = val1\n+    var op2 = val2\n+\n+    if (op2.numberLength > op1.numberLength) {\n+      val temp: BigInteger = op1\n+      op1 = op2\n+      op2 = temp\n+    }\n+    if (op2.numberLength < whenUseKaratsuba) {\n+      multiplyPAP(op1, op2)\n+    } else {\n+      /*\n+       * Karatsuba: u = u1*B + u0 v = v1*B + v0 u*v = (u1*v1)*B^2 +\n+       * ((u1-u0)*(v0-v1) + u1*v1 + u0*v0)*B + u0*v0\n+       */\n+      val ndiv2 = (op1.numberLength & 0xFFFFFFFE) << 4\n+      val upperOp1 = op1.shiftRight(ndiv2)\n+      val upperOp2 = op2.shiftRight(ndiv2)\n+      val lowerOp1 = op1.subtract(upperOp1.shiftLeft(ndiv2))\n+      val lowerOp2 = op2.subtract(upperOp2.shiftLeft(ndiv2))\n+\n+      var upper = karatsuba(upperOp1, upperOp2)\n+      val lower = karatsuba(lowerOp1, lowerOp2)\n+      var middle = karatsuba(upperOp1.subtract(lowerOp1), lowerOp2.subtract(upperOp2))\n+      middle = middle.add(upper).add(lower)\n+      middle = middle.shiftLeft(ndiv2)\n+      upper = upper.shiftLeft(ndiv2 << 1)\n+      upper.add(middle).add(lower)\n+    }\n+  }\n+\n+  def multArraysPAP(aDigits: Array[Int], aLen: Int, bDigits: Array[Int],\n+                    bLen: Int, resDigits: Array[Int]): Unit = {\n+    if (!(aLen == 0 || bLen == 0)) {\n+      if (aLen == 1)\n+        resDigits(bLen) = multiplyByInt(resDigits, bDigits, bLen, aDigits(0))\n+      else if (bLen == 1)\n+        resDigits(aLen) = multiplyByInt(resDigits, aDigits, aLen, bDigits(0))\n+      else\n+        multPAP(aDigits, bDigits, resDigits, aLen, bLen)\n+    }\n+  }\n+\n+  def multiply(x: BigInteger, y: BigInteger): BigInteger = karatsuba(x, y)\n+\n+  /**\n+   * Multiplies two BigIntegers. Implements traditional scholar algorithm\n+   * described by Knuth.\n+   *\n+   * <br>\n+   * <tt>\n+   *         <table border=\"0\">\n+   * <tbody>\n+   *\n+   *\n+   * <tr>\n+   * <td align=\"center\">A=</td>\n+   * <td>a<sub>3</sub></td>\n+   * <td>a<sub>2</sub></td>\n+   * <td>a<sub>1</sub></td>\n+   * <td>a<sub>0</sub></td>\n+   * <td></td>\n+   * <td></td>\n+   * </tr>\n+   *\n+   * <tr>\n+   * <td align=\"center\">B=</td>\n+   * <td></td>\n+   * <td>b<sub>2</sub></td>\n+   * <td>b<sub>1</sub></td>\n+   * <td>b<sub>1</sub></td>\n+   * <td></td>\n+   * <td></td>\n+   * </tr>\n+   *\n+   * <tr>\n+   * <td></td>\n+   * <td></td>\n+   * <td></td>\n+   * <td>b<sub>0</sub>*a<sub>3</sub></td>\n+   * <td>b<sub>0</sub>*a<sub>2</sub></td>\n+   * <td>b<sub>0</sub>*a<sub>1</sub></td>\n+   * <td>b<sub>0</sub>*a<sub>0</sub></td>\n+   * </tr>\n+   *\n+   * <tr>\n+   * <td></td>\n+   * <td></td>\n+   * <td>b<sub>1</sub>*a<sub>3</sub></td>\n+   * <td>b<sub>1</sub>*a<sub>2</sub></td>\n+   * <td>b<sub>1</sub>*a1</td>\n+   * <td>b<sub>1</sub>*a0</td>\n+   * </tr>\n+   *\n+   * <tr>\n+   * <td>+</td>\n+   * <td>b<sub>2</sub>*a<sub>3</sub></td>\n+   * <td>b<sub>2</sub>*a<sub>2</sub></td>\n+   * <td>b<sub>2</sub>*a<sub>1</sub></td>\n+   * <td>b<sub>2</sub>*a<sub>0</sub></td>\n+   * </tr>\n+   *\n+   * <tr>\n+   * <td></td>\n+   * <td>______</td>\n+   * <td>______</td>\n+   * <td>______</td>\n+   * <td>______</td>\n+   * <td>______</td>\n+   * <td>______</td>\n+   * </tr>\n+   *\n+   * <tr>\n+   *\n+   * <td align=\"center\">A*B=R=</td>\n+   * <td align=\"center\">r<sub>5</sub></td>\n+   * <td align=\"center\">r<sub>4</sub></td>\n+   * <td align=\"center\">r<sub>3</sub></td>\n+   * <td align=\"center\">r<sub>2</sub></td>\n+   * <td align=\"center\">r<sub>1</sub></td>\n+   * <td align=\"center\">r<sub>0</sub></td>\n+   * <td></td>\n+   * </tr>\n+   *\n+   * </tbody>\n+   * </table>\n+   *\n+   *</tt>\n+   *\n+   * @param op1 first factor of the multiplication {@code op1 >= 0}\n+   * @param op2 second factor of the multiplication {@code op2 >= 0}\n+   * @return a {@code BigInteger} of value {@code op1 * op2}\n+   */\n+  def multiplyPAP(a: BigInteger, b: BigInteger): BigInteger = {\n+    val aLen = a.numberLength\n+    val bLen = b.numberLength\n+    val resLength = aLen + bLen\n+    val resSign =\n+      if (a.sign != b.sign) -1\n+      else 1\n+\n+    if (resLength == 2) {\n+      val v = unsignedMultAddAdd(a.digits(0), b.digits(0), 0, 0)\n+      val valueLo = v.toInt\n+      val valueHi = (v >>> 32).toInt\n+      if (valueHi == 0) new BigInteger(resSign, valueLo)\n+      else new BigInteger(resSign, 2, Array(valueLo, valueHi))\n+    } else {\n+      val aDigits = a.digits\n+      val bDigits = b.digits\n+      val resDigits = new Array[Int](resLength)\n+      multArraysPAP(aDigits, aLen, bDigits, bLen, resDigits)\n+      val result = new BigInteger(resSign, resLength, resDigits)\n+      result.cutOffLeadingZeroes()\n+      result\n+    }\n+  }\n+\n+  def pow(base: BigInteger, exponent: Int): BigInteger = {\n+    var _exponent = exponent\n+    var res = BigInteger.ONE\n+    var acc = base\n+    while (_exponent > 1) {\n+      if ((_exponent & 1) != 0)\n+        res = res.multiply(acc)\n+      acc = {\n+        if (acc.numberLength == 1) {\n+          acc.multiply(acc)\n+        } else {\n+          val a = new Array[Int](acc.numberLength << 1)\n+          val sq = square(acc.digits, acc.numberLength, a)\n+          new BigInteger(1, sq)\n+        }\n+      }\n+      _exponent >>= 1\n+    }\n+    res = res.multiply(acc)\n+    res\n+  }\n+  \n+  /**\n+   * It calculates a power of ten, which exponent could be out of 32-bit range.\n+   * Note that internally this method will be used in the worst case with\n+   * an exponent equals to: {@code Integer.MAX_VALUE - Integer.MIN_VALUE}.\n+   * @param exp the exponent of power of ten, it must be positive.\n+   * @return a {@code BigInteger} with value {@code 10<sup>exp</sup>}.\n+   */\n+  def powerOf10(exp: Long): BigInteger = {\n+    // \"SMALL POWERS\"\n+    if (exp < bigTenPows.length) {\n+      bigTenPows(exp.toInt)\n+    }\n+    else if (exp <= 50){\n+      BigInteger.TEN.pow(exp.toInt)\n+    }\n+    // \"LARGE POWERS\"\n+    else if (exp <= java.lang.Integer.MAX_VALUE) {\n+      bigFivePows(1).pow(exp.toInt).shiftLeft(exp.toInt)\n+    }\n+    else { //\"HUGE POWERS\"\n+      val powerOfFive = bigFivePows(1).pow(Integer.MAX_VALUE)\n+      var res: BigInteger  = powerOfFive\n+      var longExp = exp -  java.lang.Integer.MAX_VALUE\n+      val intExp = (exp % java.lang.Integer.MAX_VALUE).toInt\n+      while (longExp > java.lang.Integer.MAX_VALUE) {\n+        res = res.multiply(powerOfFive)\n+        longExp -= java.lang.Integer.MAX_VALUE\n+      }\n+      res = res.multiply(bigFivePows(1).pow(intExp))\n+      res = res.shiftLeft(java.lang.Integer.MAX_VALUE)\n+      longExp = exp - java.lang.Integer.MAX_VALUE\n+      while (longExp > java.lang.Integer.MAX_VALUE) {\n+        res = res.shiftLeft(java.lang.Integer.MAX_VALUE)\n+        longExp -= java.lang.Integer.MAX_VALUE\n+      }\n+      res.shiftLeft(intExp)\n+    }\n+  }\n+\n+  /**\n+   * Multiplies a number by a power of five.\n+   * This method is used in {@code BigDecimal} class.\n+   * @param val the number to be multiplied\n+   * @param exp a positive {@code int} exponent\n+   * @return {@code val * 5<sup>exp</sup>}\n+   */\n+  def multiplyByFivePow(bi: BigInteger, exp: Int): BigInteger = {\n+    if (exp < fivePows.length) multiplyByPosInt(bi, fivePows(exp))\n+    else if (exp < bigFivePows.length) bi.multiply(bigFivePows(exp))\n+    else bi.multiply(bigFivePows(1).pow(exp))\n+  }\n+\n+  private def initialiseArrays(): Unit = {\n+    var fivePow = 1L\n+    for (i <- 0 until 32) {\n+      if (i <= 18) {\n+        bigFivePows(i) = BigInteger.valueOf(fivePow)\n+        bigTenPows(i) = BigInteger.valueOf(fivePow << i)\n+        fivePow *= 5\n+      } else {\n+        bigFivePows(i) = bigFivePows(i - 1).multiply(bigFivePows(1))\n+        bigTenPows(i) = bigTenPows(i - 1).multiply(BigInteger.TEN)\n+      }\n+    }\n+  }\n+\n+  private def multiplyByInt(res: Array[Int], a: Array[Int], aSize: Int,\n+        factor: Int): Int = {","path":"javalib/src/main/scala/java/math/Multiplication.scala","position":422,"original_position":422,"commit_id":"a92f3b24c0b473f82ba0e05c017d34c2a439edf5","original_commit_id":"a92f3b24c0b473f82ba0e05c017d34c2a439edf5","user":{"login":"sjrd","id":535934,"avatar_url":"https://avatars.githubusercontent.com/u/535934?v=3","gravatar_id":"","url":"https://api.github.com/users/sjrd","html_url":"https://github.com/sjrd","followers_url":"https://api.github.com/users/sjrd/followers","following_url":"https://api.github.com/users/sjrd/following{/other_user}","gists_url":"https://api.github.com/users/sjrd/gists{/gist_id}","starred_url":"https://api.github.com/users/sjrd/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sjrd/subscriptions","organizations_url":"https://api.github.com/users/sjrd/orgs","repos_url":"https://api.github.com/users/sjrd/repos","events_url":"https://api.github.com/users/sjrd/events{/privacy}","received_events_url":"https://api.github.com/users/sjrd/received_events","type":"User","site_admin":false},"body":"4 spaces. etc.","created_at":"2015-04-10T11:59:57Z","updated_at":"2015-04-10T11:59:57Z","html_url":"https://github.com/scala-js/scala-js/pull/1549#discussion_r28139043","pull_request_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1549","_links":{"self":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/comments/28139043"},"html":{"href":"https://github.com/scala-js/scala-js/pull/1549#discussion_r28139043"},"pull_request":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1549"}}},"pull_request":{"url":"https://api.github.com/repos/scala-js/scala-js/pulls/1549","id":31272316,"html_url":"https://github.com/scala-js/scala-js/pull/1549","diff_url":"https://github.com/scala-js/scala-js/pull/1549.diff","patch_url":"https://github.com/scala-js/scala-js/pull/1549.patch","issue_url":"https://api.github.com/repos/scala-js/scala-js/issues/1549","number":1549,"state":"open","locked":false,"title":"BigDecimal and BigInteger","user":{"login":"InTheNow","id":5887373,"avatar_url":"https://avatars.githubusercontent.com/u/5887373?v=3","gravatar_id":"","url":"https://api.github.com/users/InTheNow","html_url":"https://github.com/InTheNow","followers_url":"https://api.github.com/users/InTheNow/followers","following_url":"https://api.github.com/users/InTheNow/following{/other_user}","gists_url":"https://api.github.com/users/InTheNow/gists{/gist_id}","starred_url":"https://api.github.com/users/InTheNow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/InTheNow/subscriptions","organizations_url":"https://api.github.com/users/InTheNow/orgs","repos_url":"https://api.github.com/users/InTheNow/repos","events_url":"https://api.github.com/users/InTheNow/events{/privacy}","received_events_url":"https://api.github.com/users/InTheNow/received_events","type":"User","site_admin":false},"body":"Implements https://github.com/scala-js/scala-js/issues/373\r\n\r\nNotes: \r\n- There are four tests marked as xit, all relating to float infinity being casted to doubl infinity\r\n- There are a couple of comments of \"Todo:\" where some functionality _could_ go into main javalib.\r\n","created_at":"2015-03-16T18:45:35Z","updated_at":"2015-04-10T11:59:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"031eed65e50d46bb4429373dddfc8c6903fae858","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1549/commits","review_comments_url":"https://api.github.com/repos/scala-js/scala-js/pulls/1549/comments","review_comment_url":"https://api.github.com/repos/scala-js/scala-js/pulls/comments{/number}","comments_url":"https://api.github.com/repos/scala-js/scala-js/issues/1549/comments","statuses_url":"https://api.github.com/repos/scala-js/scala-js/statuses/a92f3b24c0b473f82ba0e05c017d34c2a439edf5","head":{"label":"InTheNow:BigNumerics","ref":"BigNumerics","sha":"a92f3b24c0b473f82ba0e05c017d34c2a439edf5","user":{"login":"InTheNow","id":5887373,"avatar_url":"https://avatars.githubusercontent.com/u/5887373?v=3","gravatar_id":"","url":"https://api.github.com/users/InTheNow","html_url":"https://github.com/InTheNow","followers_url":"https://api.github.com/users/InTheNow/followers","following_url":"https://api.github.com/users/InTheNow/following{/other_user}","gists_url":"https://api.github.com/users/InTheNow/gists{/gist_id}","starred_url":"https://api.github.com/users/InTheNow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/InTheNow/subscriptions","organizations_url":"https://api.github.com/users/InTheNow/orgs","repos_url":"https://api.github.com/users/InTheNow/repos","events_url":"https://api.github.com/users/InTheNow/events{/privacy}","received_events_url":"https://api.github.com/users/InTheNow/received_events","type":"User","site_admin":false},"repo":{"id":16174535,"name":"scala-js","full_name":"InTheNow/scala-js","owner":{"login":"InTheNow","id":5887373,"avatar_url":"https://avatars.githubusercontent.com/u/5887373?v=3","gravatar_id":"","url":"https://api.github.com/users/InTheNow","html_url":"https://github.com/InTheNow","followers_url":"https://api.github.com/users/InTheNow/followers","following_url":"https://api.github.com/users/InTheNow/following{/other_user}","gists_url":"https://api.github.com/users/InTheNow/gists{/gist_id}","starred_url":"https://api.github.com/users/InTheNow/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/InTheNow/subscriptions","organizations_url":"https://api.github.com/users/InTheNow/orgs","repos_url":"https://api.github.com/users/InTheNow/repos","events_url":"https://api.github.com/users/InTheNow/events{/privacy}","received_events_url":"https://api.github.com/users/InTheNow/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/InTheNow/scala-js","description":"Scala.js, a Scala to JavaScript compiler","fork":true,"url":"https://api.github.com/repos/InTheNow/scala-js","forks_url":"https://api.github.com/repos/InTheNow/scala-js/forks","keys_url":"https://api.github.com/repos/InTheNow/scala-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/InTheNow/scala-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/InTheNow/scala-js/teams","hooks_url":"https://api.github.com/repos/InTheNow/scala-js/hooks","issue_events_url":"https://api.github.com/repos/InTheNow/scala-js/issues/events{/number}","events_url":"https://api.github.com/repos/InTheNow/scala-js/events","assignees_url":"https://api.github.com/repos/InTheNow/scala-js/assignees{/user}","branches_url":"https://api.github.com/repos/InTheNow/scala-js/branches{/branch}","tags_url":"https://api.github.com/repos/InTheNow/scala-js/tags","blobs_url":"https://api.github.com/repos/InTheNow/scala-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/InTheNow/scala-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/InTheNow/scala-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/InTheNow/scala-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/InTheNow/scala-js/statuses/{sha}","languages_url":"https://api.github.com/repos/InTheNow/scala-js/languages","stargazers_url":"https://api.github.com/repos/InTheNow/scala-js/stargazers","contributors_url":"https://api.github.com/repos/InTheNow/scala-js/contributors","subscribers_url":"https://api.github.com/repos/InTheNow/scala-js/subscribers","subscription_url":"https://api.github.com/repos/InTheNow/scala-js/subscription","commits_url":"https://api.github.com/repos/InTheNow/scala-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/InTheNow/scala-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/InTheNow/scala-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/InTheNow/scala-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/InTheNow/scala-js/contents/{+path}","compare_url":"https://api.github.com/repos/InTheNow/scala-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/InTheNow/scala-js/merges","archive_url":"https://api.github.com/repos/InTheNow/scala-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/InTheNow/scala-js/downloads","issues_url":"https://api.github.com/repos/InTheNow/scala-js/issues{/number}","pulls_url":"https://api.github.com/repos/InTheNow/scala-js/pulls{/number}","milestones_url":"https://api.github.com/repos/InTheNow/scala-js/milestones{/number}","notifications_url":"https://api.github.com/repos/InTheNow/scala-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/InTheNow/scala-js/labels{/name}","releases_url":"https://api.github.com/repos/InTheNow/scala-js/releases{/id}","created_at":"2014-01-23T14:24:12Z","updated_at":"2015-04-07T12:49:33Z","pushed_at":"2015-04-09T14:59:03Z","git_url":"git://github.com/InTheNow/scala-js.git","ssh_url":"git@github.com:InTheNow/scala-js.git","clone_url":"https://github.com/InTheNow/scala-js.git","svn_url":"https://github.com/InTheNow/scala-js","homepage":"http://www.scala-js.org/","size":7940,"stargazers_count":0,"watchers_count":0,"language":"Scala","has_issues":false,"has_downloads":true,"has_wiki":true,"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-js:master","ref":"master","sha":"6bb21c20032a5d0d810b0b7769365f127ee45ea8","user":{"login":"scala-js","id":6039724,"avatar_url":"https://avatars.githubusercontent.com/u/6039724?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-js","html_url":"https://github.com/scala-js","followers_url":"https://api.github.com/users/scala-js/followers","following_url":"https://api.github.com/users/scala-js/following{/other_user}","gists_url":"https://api.github.com/users/scala-js/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-js/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-js/subscriptions","organizations_url":"https://api.github.com/users/scala-js/orgs","repos_url":"https://api.github.com/users/scala-js/repos","events_url":"https://api.github.com/users/scala-js/events{/privacy}","received_events_url":"https://api.github.com/users/scala-js/received_events","type":"Organization","site_admin":false},"repo":{"id":8272315,"name":"scala-js","full_name":"scala-js/scala-js","owner":{"login":"scala-js","id":6039724,"avatar_url":"https://avatars.githubusercontent.com/u/6039724?v=3","gravatar_id":"","url":"https://api.github.com/users/scala-js","html_url":"https://github.com/scala-js","followers_url":"https://api.github.com/users/scala-js/followers","following_url":"https://api.github.com/users/scala-js/following{/other_user}","gists_url":"https://api.github.com/users/scala-js/gists{/gist_id}","starred_url":"https://api.github.com/users/scala-js/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/scala-js/subscriptions","organizations_url":"https://api.github.com/users/scala-js/orgs","repos_url":"https://api.github.com/users/scala-js/repos","events_url":"https://api.github.com/users/scala-js/events{/privacy}","received_events_url":"https://api.github.com/users/scala-js/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/scala-js/scala-js","description":"Scala.js, the Scala to JavaScript compiler","fork":false,"url":"https://api.github.com/repos/scala-js/scala-js","forks_url":"https://api.github.com/repos/scala-js/scala-js/forks","keys_url":"https://api.github.com/repos/scala-js/scala-js/keys{/key_id}","collaborators_url":"https://api.github.com/repos/scala-js/scala-js/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/scala-js/scala-js/teams","hooks_url":"https://api.github.com/repos/scala-js/scala-js/hooks","issue_events_url":"https://api.github.com/repos/scala-js/scala-js/issues/events{/number}","events_url":"https://api.github.com/repos/scala-js/scala-js/events","assignees_url":"https://api.github.com/repos/scala-js/scala-js/assignees{/user}","branches_url":"https://api.github.com/repos/scala-js/scala-js/branches{/branch}","tags_url":"https://api.github.com/repos/scala-js/scala-js/tags","blobs_url":"https://api.github.com/repos/scala-js/scala-js/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/scala-js/scala-js/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/scala-js/scala-js/git/refs{/sha}","trees_url":"https://api.github.com/repos/scala-js/scala-js/git/trees{/sha}","statuses_url":"https://api.github.com/repos/scala-js/scala-js/statuses/{sha}","languages_url":"https://api.github.com/repos/scala-js/scala-js/languages","stargazers_url":"https://api.github.com/repos/scala-js/scala-js/stargazers","contributors_url":"https://api.github.com/repos/scala-js/scala-js/contributors","subscribers_url":"https://api.github.com/repos/scala-js/scala-js/subscribers","subscription_url":"https://api.github.com/repos/scala-js/scala-js/subscription","commits_url":"https://api.github.com/repos/scala-js/scala-js/commits{/sha}","git_commits_url":"https://api.github.com/repos/scala-js/scala-js/git/commits{/sha}","comments_url":"https://api.github.com/repos/scala-js/scala-js/comments{/number}","issue_comment_url":"https://api.github.com/repos/scala-js/scala-js/issues/comments{/number}","contents_url":"https://api.github.com/repos/scala-js/scala-js/contents/{+path}","compare_url":"https://api.github.com/repos/scala-js/scala-js/compare/{base}...{head}","merges_url":"https://api.github.com/repos/scala-js/scala-js/merges","archive_url":"https://api.github.com/repos/scala-js/scala-js/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/scala-js/scala-js/downloads","issues_url":"https://api.github.com/repos/scala-js/scala-js/issues{/number}","pulls_url":"https://api.github.com/repos/scala-js/scala-js/pulls{/number}","milestones_url":"https://api.github.com/repos/scala-js/scala-js/milestones{/number}","notifications_url":"https://api.github.com/repos/scala-js/scala-js/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/scala-js/scala-js/labels{/name}","releases_url":"https://api.github.com/repos/scala-js/scala-js/releases{/id}","created_at":"2013-02-18T16:33:55Z","updated_at":"2015-04-09T19:39:16Z","pushed_at":"2015-04-10T10:46:28Z","git_url":"git://github.com/scala-js/scala-js.git","ssh_url":"git@github.com:scala-js/scala-js.git","clone_url":"https://github.com/scala-js/scala-js.git","svn_url":"https://github.com/scala-js/scala-js","homepage":"http://www.scala-js.org/","size":14927,"stargazers_count":1605,"watchers_count":1605,"language":"Scala","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":126,"mirror_url":null,"open_issues_count":43,"forks":126,"open_issues":43,"watchers":1605,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1549"},"html":{"href":"https://github.com/scala-js/scala-js/pull/1549"},"issue":{"href":"https://api.github.com/repos/scala-js/scala-js/issues/1549"},"comments":{"href":"https://api.github.com/repos/scala-js/scala-js/issues/1549/comments"},"review_comments":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1549/comments"},"review_comment":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/scala-js/scala-js/pulls/1549/commits"},"statuses":{"href":"https://api.github.com/repos/scala-js/scala-js/statuses/a92f3b24c0b473f82ba0e05c017d34c2a439edf5"}}}}