)]}'
{
  "log": [
    {
      "commit": "a5f7082aabed29c0e429c722292c66ec8ecf9591",
      "tree": "c61a4d70bd9ecfae0735a04bee0eb9bfd6a51b47",
      "parents": [
        "804d24ec58004ea1c8a7a51160a6d8d88f2f78cc"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Nov 01 14:27:54 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 01 14:27:54 2018"
      },
      "message": "Correct URL in announcement of move"
    },
    {
      "commit": "804d24ec58004ea1c8a7a51160a6d8d88f2f78cc",
      "tree": "15b45ef3fc9aef0c38003099f3d5ac60bcce8fe2",
      "parents": [
        "ce5c2fa1ad6a8fa4beb4eacdbd3bf9997162d144"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Nov 01 14:26:49 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Nov 01 14:26:49 2018"
      },
      "message": "Announce the move"
    },
    {
      "commit": "ce5c2fa1ad6a8fa4beb4eacdbd3bf9997162d144",
      "tree": "1bc4d63e6241b0e41f1c41be7ba69725365bea21",
      "parents": [
        "25948e6812569f1a491b9223c48f231fecb07ccc",
        "a720ae8cfc877a7d049fbf90d7976b504bef3c11"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:50:19 2018"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:50:19 2018"
      },
      "message": "Merge branch \u0027master\u0027 of github.com:google/skylark\n\nChange-Id: Iae455d64e1cf9d9e2276fc39a69786cab3b40650\n"
    },
    {
      "commit": "25948e6812569f1a491b9223c48f231fecb07ccc",
      "tree": "7ded894ebd3e2a8d19baa624c0ecf669981f1c7c",
      "parents": [
        "f738557a0c0e2472bac2bcbdb3d960ceddff5835"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:49:46 2018"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:49:46 2018"
      },
      "message": "Add CNAME file for GitHub Pages\n\nChange-Id: I13b1c6842ddd19d594609816ffc4c5541e1a9754\n"
    },
    {
      "commit": "a720ae8cfc877a7d049fbf90d7976b504bef3c11",
      "tree": "2f433f9843d0f7f6dd262fcb93c7483c8f157e1f",
      "parents": [
        "f738557a0c0e2472bac2bcbdb3d960ceddff5835"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:43:42 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:43:42 2018"
      },
      "message": "Create CNAME"
    },
    {
      "commit": "f738557a0c0e2472bac2bcbdb3d960ceddff5835",
      "tree": "a826286bca1a258cf01a6a68839831733ee90c92",
      "parents": [
        "f8d1ad6305a0ac1d1033c13e17d9aa648f7891ae",
        "9c6a142a746464bfab213da344647b913815ef4b"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:35:18 2018"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:35:18 2018"
      },
      "message": "Merge branch \u0027master\u0027 of github.com:google/skylark\n\nChange-Id: Ie65c9aca11de2ec6396a12c934d475045600e455\n"
    },
    {
      "commit": "f8d1ad6305a0ac1d1033c13e17d9aa648f7891ae",
      "tree": "fccb5f196408b9ed818519e76487eff71e6ed965",
      "parents": [
        "8160121a4f3bdd86c16f1772825b50eddcf04d72"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:33:18 2018"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:33:18 2018"
      },
      "message": "docs: add index.html placeholder for GitHub pages\n\nThis file will be eventually be served by go.starlark.net and will\ncause \"go get\" to download packages from GitHub.\n\nChange-Id: I9a5085665f94a7521b71f75c9a2d9dc247bcf691\n"
    },
    {
      "commit": "9c6a142a746464bfab213da344647b913815ef4b",
      "tree": "2d0ba2b710c1de10fe030fae2df28df3b45ea52c",
      "parents": [
        "8160121a4f3bdd86c16f1772825b50eddcf04d72"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 21:13:10 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 22 21:13:10 2018"
      },
      "message": "internal/compile: bump version number (#138)\n\n...as the previous change changed the compilation function, invalidating existing bytecode."
    },
    {
      "commit": "8160121a4f3bdd86c16f1772825b50eddcf04d72",
      "tree": "8d0298caf7e2818eb68a41890fcc61e386a9566f",
      "parents": [
        "aeec83fba69eac2758484f82b32c86742979b014"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 17:41:53 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 22 17:41:53 2018"
      },
      "message": "skylark: fix a crash in call f(*args, named\u003dvalue) (#136)\n\n* skylark: fix a crash in call f(*args, named\u003dvalue)\r\n\r\nFixes #135"
    },
    {
      "commit": "aeec83fba69eac2758484f82b32c86742979b014",
      "tree": "95c357bee364b8cacb90aaa0c27b64e370950f61",
      "parents": [
        "f94b021a287bdc82ccd4d1dbbd1cbf0c174161c9"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 22 17:24:13 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 22 17:24:13 2018"
      },
      "message": "skylark: rename Callable.Call to CallInternal (#134)\n\nClients must now always call skylark.Call(thread, c, args, kwargs),\r\nnever c.CallInternal(thread, args, kwargs).\r\n\r\nA Skylark thread now accurately reports the stack of Skylark callables,\r\nwhether Skylark functions, interpreter built-ins, or application-defined\r\nbuiltins.  The latter category was necessarily missing before.\r\n\r\nThis is a breaking API change (sorry), but it should be easy to fix.\r\n"
    },
    {
      "commit": "f94b021a287bdc82ccd4d1dbbd1cbf0c174161c9",
      "tree": "1f4ba3408349bd1b488a507b2232c2fedfcdebd4",
      "parents": [
        "c996edef1e1c5263a4d5d9fa50d92ce7ee79aa84"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 12 19:31:48 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 12 19:31:48 2018"
      },
      "message": "hash: use Go runtime\u0027s hash function (#133)\n\nIt uses AESENC instructions on amd64 and for strings of length \u003e\u003d12 starts to rapidly outperform the software implementation. It requires the linkname hack.\r\n\r\nBenchmarkStringHash/hard-1-12         \t300000000\t         4.24 ns/op\r\nBenchmarkStringHash/soft-1-12         \t1000000000\t         2.48 ns/op\r\nBenchmarkStringHash/hard-2-12         \t300000000\t         4.88 ns/op\r\nBenchmarkStringHash/soft-2-12         \t500000000\t         3.08 ns/op\r\nBenchmarkStringHash/hard-4-12         \t200000000\t         6.19 ns/op\r\nBenchmarkStringHash/soft-4-12         \t300000000\t         4.38 ns/op\r\nBenchmarkStringHash/hard-8-12         \t200000000\t         7.58 ns/op\r\nBenchmarkStringHash/soft-8-12         \t300000000\t         5.70 ns/op\r\nBenchmarkStringHash/hard-16-12        \t200000000\t         8.49 ns/op\r\nBenchmarkStringHash/soft-16-12        \t100000000\t        10.8 ns/op\r\nBenchmarkStringHash/hard-32-12        \t200000000\t         8.68 ns/op\r\nBenchmarkStringHash/soft-32-12        \t50000000\t        24.8 ns/op\r\nBenchmarkStringHash/hard-64-12        \t100000000\t        10.5 ns/op\r\nBenchmarkStringHash/soft-64-12        \t30000000\t        56.6 ns/op\r\nBenchmarkStringHash/hard-128-12       \t100000000\t        15.3 ns/op\r\nBenchmarkStringHash/soft-128-12       \t10000000\t       125 ns/op\r\nBenchmarkStringHash/hard-256-12       \t100000000\t        17.7 ns/op\r\nBenchmarkStringHash/soft-256-12       \t 5000000\t       267 ns/op\r\nBenchmarkStringHash/hard-512-12       \t50000000\t        26.7 ns/op\r\nBenchmarkStringHash/soft-512-12       \t 3000000\t       551 ns/op\r\nBenchmarkStringHash/hard-1024-12      \t30000000\t        45.1 ns/op\r\nBenchmarkStringHash/soft-1024-12      \t 1000000\t      1143 ns/op"
    },
    {
      "commit": "c996edef1e1c5263a4d5d9fa50d92ce7ee79aa84",
      "tree": "c52158a787e496afdfed759ec182db9e7c459045",
      "parents": [
        "2320ce69c4b8866c23a7640e0d611eb7fffdbd70"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 12 17:53:43 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 12 17:53:43 2018"
      },
      "message": "string: add GoString method (#132)\n\nThis allows you to say fmt.Sprintf(\"%#v\", s) to get the unquoted string."
    },
    {
      "commit": "2320ce69c4b8866c23a7640e0d611eb7fffdbd70",
      "tree": "126b5a524eb8b57da6b2ad8ebb6a237fbe55fe4f",
      "parents": [
        "3ccab945a56de0ff9562f6b27c4aeeeb9669d535"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 05 14:49:00 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 05 14:49:00 2018"
      },
      "message": "syntax: add regression test for recent \u0027not not x\u0027 parser bug (#131)\n\nThis test exercises a case that would not have been fixed\r\nby the proposed solution (#128), which allowed any number\r\nof not operators to be applied to a primary (such as True)\r\nbut did not allow multiple not operators on other expressions\r\n(such as the binary operator 1 \u003e\u003d 1).\r\n"
    },
    {
      "commit": "3ccab945a56de0ff9562f6b27c4aeeeb9669d535",
      "tree": "ffa34479019020203bac3ae6104100150575855a",
      "parents": [
        "c7df0456eb78fc2acc35384fa5986b69ef0e9a09"
      ],
      "author": {
        "name": "jmillikin-stripe",
        "email": "jmillikin@stripe.com",
        "time": "Fri Oct 05 14:09:12 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 05 14:09:12 2018"
      },
      "message": "Add `HasSetKey` interface for user-implemented dict-ish types. (#130)\n\n* Rename `Dict.Set()` to `Dict.SetKey()` os it\u0027s easier to interface on.\r\n\r\n* Add `HasSetKey` interface for user-implemented dict-ish types.\r\n"
    },
    {
      "commit": "c7df0456eb78fc2acc35384fa5986b69ef0e9a09",
      "tree": "945cbbb713a23f94cfc8fd0aa7cf741d58a55ad6",
      "parents": [
        "ea6a6cb3d5aab9ae639eddd2f37007068cf79071"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Oct 04 21:10:12 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 04 21:10:12 2018"
      },
      "message": "syntax: parse \"not not x\" (#129)\n\n+Test\r\n"
    },
    {
      "commit": "ea6a6cb3d5aab9ae639eddd2f37007068cf79071",
      "tree": "f68cb92fb1984d2a90c792c59810226c2b3817f1",
      "parents": [
        "4956ce9eeded4014824fb376f36e655ee53809b0"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Sep 18 19:29:49 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 18 19:29:49 2018"
      },
      "message": "README: update plans regarding Starlark name"
    },
    {
      "commit": "4956ce9eeded4014824fb376f36e655ee53809b0",
      "tree": "f07fc7b1c6d81c33340b42d49ca524a70f689503",
      "parents": [
        "5b0e788dfd99180b0a1af28ca8c5c2ed08d87f09"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Aug 22 21:44:47 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 22 21:44:47 2018"
      },
      "message": "resolve: a non-binding use of a global may precede its binding (#123)\n\nAccording to the agreed Skylark spec, and unlike the Python semantics\r\ncurrently implemented, this program should yield a dynamic error:\r\n\r\n print(len) # dynamic error: uninitialized global\r\n len \u003d 1\r\n print(len)\r\n\r\nWe now defer the resolution of forward-uses at top level until the end\r\nof the module, just as we do for locals.\r\n\r\nFixes #116"
    },
    {
      "commit": "5b0e788dfd99180b0a1af28ca8c5c2ed08d87f09",
      "tree": "bbdcf3750018c0f81349e171472ce20080f56160",
      "parents": [
        "47dc57faa54be605ec3bcee57c32dfe6fec8a113"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Aug 10 17:44:17 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 10 17:44:17 2018"
      },
      "message": "resolve: fix bug in resolve.block.String (#121)\n\nFixes #115\r\n"
    },
    {
      "commit": "47dc57faa54be605ec3bcee57c32dfe6fec8a113",
      "tree": "7fc1b4560a396529c72cbdb00d3df4befc749b20",
      "parents": [
        "0a5e39a3470a7db0846fb24f517d5a41cd344f64"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Aug 09 16:11:31 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 09 16:11:31 2018"
      },
      "message": "spec: add ~ to list of punctuation tokens, and reorganize (#119)\n\nAlso add bitwise ops to Dialect Differences.\r\n"
    },
    {
      "commit": "0a5e39a3470a7db0846fb24f517d5a41cd344f64",
      "tree": "dd79a3fe16c8914f92bbd9f67863c85b4983844a",
      "parents": [
        "878b17a75d1975b64e9242cce2178ea1f599b871"
      ],
      "author": {
        "name": "Hittorp",
        "email": "38788498+Hittorp@users.noreply.github.com",
        "time": "Thu Aug 09 12:02:30 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Aug 09 12:02:30 2018"
      },
      "message": "Add missing bitwise ops: xor, unary not (~), and shifts (#117)\n\n* implement bitwise xor for integers and symmetric difference for sets (^ and ^\u003d operators)\r\n* implement unary ~ operator for integers\r\n* implement left and right bitwise shifts for integers\r\n* enable xor, unary not, and shifts bitwise ops only when -bitwise flag is set\r\n* enable bitwise \u0026 and | only when -bitwise flag is set\r\n* add \u0026\u003d and |\u003d operators\r\n"
    },
    {
      "commit": "878b17a75d1975b64e9242cce2178ea1f599b871",
      "tree": "0cc7b7dbd6a5fe94e9f3c4b205e82265dedbe926",
      "parents": [
        "a64b4113d5428f455f7ce2395ed21651fa701dc3"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Tue Jul 10 18:37:15 2018"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Tue Jul 10 18:37:15 2018"
      },
      "message": "trivial test change\n\nChange-Id: Icd618d8a3612f6329841df9051bd595b38479918\n"
    },
    {
      "commit": "a64b4113d5428f455f7ce2395ed21651fa701dc3",
      "tree": "5405031480a92f966da688b11506a8cac2bab4d8",
      "parents": [
        "cc7dbc2bbe95ffaf3958a80556cd7e7d06d9a395"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jul 02 16:30:49 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 02 16:30:49 2018"
      },
      "message": "syntax: eliminate a bounds-check (#113)\n\n"
    },
    {
      "commit": "cc7dbc2bbe95ffaf3958a80556cd7e7d06d9a395",
      "tree": "cd7c83fc789ef8de9b4d755ca63d61ad94144ff4",
      "parents": [
        "a21eb0f4b7c744457dc92d7ec27ea72924b45fbd"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jul 02 16:30:24 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 02 16:30:24 2018"
      },
      "message": "Builtin: push a Frame on the Thread\u0027s stack even when calling Builtins (#112)\n\n* Builtin: push a Frame on the Thread\u0027s stack even when calling Builtins\r\n\r\nThis makes the stack trace more accurate.\r\n\r\nBreaking API change: (*Frame).Function is superseded by (*Frame).Callable.\r\n"
    },
    {
      "commit": "a21eb0f4b7c744457dc92d7ec27ea72924b45fbd",
      "tree": "d5d8199f3921d63081d279467c16d1b80fad3ff7",
      "parents": [
        "f5fb4d29386c5e5879dfc55d6b5293f6bb550e63"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jun 25 19:30:48 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 25 19:30:48 2018"
      },
      "message": "skylark: update doc: String is not iterable (#111)\n\nFixes issue 44\r\n"
    },
    {
      "commit": "f5fb4d29386c5e5879dfc55d6b5293f6bb550e63",
      "tree": "b8fc9ba63317743fd2694facfcec8e93d05e7fd7",
      "parents": [
        "ce08269736e054a65e00170e9ab7c70d6d002650"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jun 25 15:31:34 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 25 15:31:34 2018"
      },
      "message": "string.{starts,ends}with: allow tuple-of-string argument, like Python (#110)\n\n* string.{starts,ends}with: allow tuple-of-string argument, like Python\r\n\r\nSee https://github.com/bazelbuild/bazel/pull/5455.\r\n\r\nAlso: support optional start, end parameters, following Python and Bazel Skylark.\r\n(This feature always seemed redundant to me.)\r\n\r\nSpec changes, tests.\r\n"
    },
    {
      "commit": "ce08269736e054a65e00170e9ab7c70d6d002650",
      "tree": "f6b1ea3f270cb29b10515944aa5d811453892568",
      "parents": [
        "a51d194e669ad014705a09c71d0e44da79aff927"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Jun 15 16:20:51 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 15 16:20:51 2018"
      },
      "message": "syntax: rename testdata/def.bzl to something innocuous (#108)\n\n...to avoid distracting people making large-scale changes to\r\nBazel/Blaze repositories containing this file.\r\n"
    },
    {
      "commit": "a51d194e669ad014705a09c71d0e44da79aff927",
      "tree": "5cdb8aaeaec55ffd4df63a3e621a8e61ac8eaa21",
      "parents": [
        "572cea2bd78e2f1de8f3e136db9413cf02f097eb"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Jun 01 18:49:20 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 01 18:49:20 2018"
      },
      "message": "spec: fix two copy/paste errors (#107)\n\n"
    },
    {
      "commit": "572cea2bd78e2f1de8f3e136db9413cf02f097eb",
      "tree": "0b7465d77faf5e9c20782aad70e7aea92d70f759",
      "parents": [
        "d3cd7362ae36083bc8fd7f1630053f6916a639de"
      ],
      "author": {
        "name": "Nick Santos",
        "email": "nicholas.j.santos@gmail.com",
        "time": "Fri May 25 20:41:09 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri May 25 20:41:09 2018"
      },
      "message": "example: Use the standard example naming convention to satisfy \u0027go vet\u0027 (#106)\n\n"
    },
    {
      "commit": "d3cd7362ae36083bc8fd7f1630053f6916a639de",
      "tree": "7da2a752187a3d2b9f1934d52158d7bbd0d10fa3",
      "parents": [
        "06804d924f8f4f36e25d858d0eb0bab8e1c8bc80"
      ],
      "author": {
        "name": "Nick Santos",
        "email": "nicholas.j.santos@gmail.com",
        "time": "Fri May 18 16:58:53 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri May 18 16:58:53 2018"
      },
      "message": "value: Add a Sliceable interface for operands of the [] operator (#105)\n\n* value: Add a Sliceable interface for operands of the [] operator. Fixes #104\r\n* library: make the return value of range() a Sliceable. Add tests\r\n"
    },
    {
      "commit": "06804d924f8f4f36e25d858d0eb0bab8e1c8bc80",
      "tree": "1eebffd9b6c6ffc7e96e98d8b1beea757e365369",
      "parents": [
        "67717b5898061eb621519a94a4b89cedede9bca0"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Apr 26 19:12:16 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 26 19:12:16 2018"
      },
      "message": "README: update go get command to fetch dependencies of REPL"
    },
    {
      "commit": "67717b5898061eb621519a94a4b89cedede9bca0",
      "tree": "e07176e9e91f96ef9f3e8ff7729d241fbf59c585",
      "parents": [
        "ede9b31f30c07f7081ae3c112b223d024c7f7a15"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Apr 23 17:28:48 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 23 17:28:48 2018"
      },
      "message": "skylarkstruct: document a road not travelled (#102)\n\nAlso: hide Len function; structs are neither iterables nor sequences (+test)."
    },
    {
      "commit": "ede9b31f30c07f7081ae3c112b223d024c7f7a15",
      "tree": "8f30d3b19ca58ad6a8224e032a1898061350bbcb",
      "parents": [
        "8b5989250bd6eb37b427d751bf1197409d4a449c"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Apr 04 18:55:54 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 04 18:55:54 2018"
      },
      "message": "internal/compile: improve several comments (#101)\n\n"
    },
    {
      "commit": "8b5989250bd6eb37b427d751bf1197409d4a449c",
      "tree": "56fc3bea206d32b48d6c6c3c23749d5774917fda",
      "parents": [
        "c67265e374b0d3814379f37ff33e0e2cdfe4811a"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Apr 04 15:19:04 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 04 15:19:04 2018"
      },
      "message": "remove PACKAGE_NAME hack (#100)\n\nBazel no longer relies on this special (thread-local) variable.\r\n"
    },
    {
      "commit": "c67265e374b0d3814379f37ff33e0e2cdfe4811a",
      "tree": "4680f9366664153d071bfe74e47e4e07d6d7df1e",
      "parents": [
        "8c4023ca890bad71d4936423cee71acfd0a93a8e"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Apr 02 17:19:37 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 02 17:19:37 2018"
      },
      "message": "compile: add test update missing from previous CL (#99)\n\n"
    },
    {
      "commit": "8c4023ca890bad71d4936423cee71acfd0a93a8e",
      "tree": "a2dcb0f6d96bad3d2f7c4e143c4e8509e877e085",
      "parents": [
        "60e4b3d65da9be653c231e535f7e1e56d47ca617"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Apr 02 17:08:46 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 02 17:08:46 2018"
      },
      "message": "interp: materialize a Value for each constant prior to execution (#98)\n\nThis change makes the interpreter materialize compiled constants as\r\nValues during module creation (Program.Init or Eval), rather than on\r\nthe fly as each constant is required. This avoids the need for the\r\nunsafe speed hack.\r\n\r\nAlso, we serialize big.Ints using their gob-encoding, not as a string,\r\nwhich is not only more efficient but allows us to handle all constants\r\nin a uniform manner, with a single CONSTANT opcode instead of separate\r\nones for INT/BIGINT/FLOAT/STRING.\r\n\r\nAlso: sort opcode tables."
    },
    {
      "commit": "60e4b3d65da9be653c231e535f7e1e56d47ca617",
      "tree": "43628bbd9fb0ce0c9b65f4571a8d8266182edde4",
      "parents": [
        "93f3e0c76658e056f7a4125d7625ac49e591aa94"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Apr 02 16:32:39 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 02 16:32:39 2018"
      },
      "message": "compile: optimize a+b statically for literal string/list/tuple (#97)\n\n* compile: optimize a+b statically for literal string/list/tuple\r\n\r\nPreviously, the parser would fold two string literals \"a\"+\"b\" into a\r\nfake string literal, to avoid quadratic runtime cost when a long chain\r\nof strings is added (as often happens due to line length limits).\r\nThis made the syntax tree unfaithful to the source,\r\npreventing the frontend from being used in a reformatting tool.\r\n\r\nThis change does the same optimization in the compiler,\r\nand generalizes it to list and tuple expressions too:\r\n\r\n   \"a  b\" + \"c  d\" \u003d\u003e \"a  bc  d\"\r\n   [a, b] + [c, d] \u003d\u003e [a, b, c, d]\r\n   (a, b) + (c, d) \u003d\u003e (a, b, c, d)\r\n\r\nIt also creates the seam for later addition of the \"accumulator\"\r\noptimization, in which n-ary non-literal additions such as a+b+c are\r\noptimized to:\r\n   acc \u003d start(a)\r\n   acc.add(b)\r\n   acc.add(c)\r\n   acc.done()\r\nI evaluated this optimization but it doesn\u0027t yet pull its weight\r\non the kinds of builds I can do so far.\r\n"
    },
    {
      "commit": "93f3e0c76658e056f7a4125d7625ac49e591aa94",
      "tree": "81337178f016a174aa13883bfa90c7c79f250df4",
      "parents": [
        "0d5491befad9f6af126fdcb886dc58a8f059bea7"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Mar 30 14:42:28 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 30 14:42:28 2018"
      },
      "message": "skylark: byte code compiler and interpreter (#95)\n\nA byte code is a more efficient representation of the program for\r\nexecution, as it is more compact than an AST, and it is readily\r\nserializable, permitting the work of parsing, resolving, and\r\ncompilation to be amortized across runs when the byte code is cached\r\nin the file system.\r\n\r\nThis change defines a simple byte code, compiler, and interpreter for\r\nSkylark, using ideas from Python and Emacs Lisp.\r\n\r\nIt also deletes the tree-based evaluator. I evaluated (ha!) keeping\r\nboth and switching between them dynamically, compiling the program\r\njust before the 2nd or nth invocation of a function. (In a build\r\nsystem, a great many \"functions\" are executed exactly once, such as\r\nthe toplevel of a BUILD file.) However, the performance gain over\r\nalways compiling was barely measurable and did not justify the cost of\r\nmaintaining two different interpreters. Also, just-in-time compilation\r\nmakes program dynamics very complex.\r\n\r\nDetails:\r\n- the toplevel code of a module is now represented as a function\r\n  of no parameters, enabling various simplifications.\r\n- Every Frame now has a Function.  Backtracing is simpler.\r\n  Only the leaf frame (the error) has a position;\r\n  all the parent frames record only the program counter of\r\n  the call instruction, and compute the position from this\r\n  as needed.\r\n- To keep the line number table encoding simple and compact,\r\n  EvalError no longer reports column information.\r\n  It would be nice to add it back with a carefully tuned encoding.\r\n\r\nBreaking API changes:\r\n\r\n- Thread.{Push,Pop} are gone.\r\n  The reason they were initially exposed is exemplified by the\r\n  TestRepeatedExec test case, which is better served by the new API:\r\n\r\n      var predeclared skylark.StringDict\r\n\r\n      // parse and compile\r\n      _, prog, err \u003d SourceProgram(\"foo.sky\", src, predeclared.Has)\r\n\r\n      // \"in between\" stuff goes here\r\n\r\n      // execute toplevel\r\n      globals, err \u003d prog.Init(thread, predeclared)\r\n\r\n- ExecOptions.BeforeExec is gone, and thus so is ExecOptions.\r\n\r\n  This function existed so that clients could \"get in between\"\r\n  producing a program and executing it, but the new low-level API\r\n  (see above) above separates these operations explicitly.\r\n  Now that Exec and ExecOptions are no more expressive than ExecFile,\r\n  they have been deleted.\r\n\r\nThanks to Jay Conrod for earlier rounds of review,\r\nincluding substantial simplifications."
    },
    {
      "commit": "0d5491befad9f6af126fdcb886dc58a8f059bea7",
      "tree": "3a670edd0fd4d92da0ec3be0354f00f48ccf5735",
      "parents": [
        "0569d1c248638eec6329087d289a9049f093c8f9"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Mar 30 14:42:13 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 30 14:42:13 2018"
      },
      "message": "resolver: resolve operand of first \u0027for\u0027 clause in enclosing block (#96)\n\nIn a comprehension such as [e for v in x], the expression x should\r\nbe resolved in the outer block, so [x for x in x] is legal.\r\nThis applies only to the first \u0027in\u0027 operand.\r\n\r\nThis behavior matches Python2 and Python3 and, apparently, Bazel,\r\nthough I\u0027m pretty sure the existing test modified in this CL was\r\nbased on Bazel behavior, which must have changed in the meantime.\r\n\r\nUpdated spec and tests.\r\n"
    },
    {
      "commit": "0569d1c248638eec6329087d289a9049f093c8f9",
      "tree": "4c4bf2052f9feaa659528a2c6b92a33a73f6e4f1",
      "parents": [
        "fd913d9a4119324fc29989bd827e1d270b26b4a7"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Mar 29 18:47:42 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 29 18:47:42 2018"
      },
      "message": "string: rename iterator methods again (#94)\n\nThe names chosen by the Bazel Skylark team are\r\n  now:\t\t\t\tformerly:\r\n  elems\t\t\t\tsplit_elems\r\n  elem_ords\t\t\telems\r\n  codepoints\t\t\tsplit_codepoints\r\n  codepoint_ords\t\tcodepoints\r\n\r\ncodepoints() is the recommended way to iterate over text strings.\r\n"
    },
    {
      "commit": "fd913d9a4119324fc29989bd827e1d270b26b4a7",
      "tree": "31eb9a0c11d8707eb505f5cd031902d95c82bd46",
      "parents": [
        "34403cf36af130550d613fb26785233933dac339"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Mar 29 03:59:43 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 29 03:59:43 2018"
      },
      "message": "spec: fix typo"
    },
    {
      "commit": "34403cf36af130550d613fb26785233933dac339",
      "tree": "bb35b9fef27c8d98ae62a83160785f39c979f6a2",
      "parents": [
        "f11011f2887ba17f71cf974fc319dbb550a48ed5"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 26 18:31:43 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 26 18:31:43 2018"
      },
      "message": "int: document optional + or - sign (#93)\n\n"
    },
    {
      "commit": "f11011f2887ba17f71cf974fc319dbb550a48ed5",
      "tree": "c326aec720e64c6202fece7093b324b8aa0bc88b",
      "parents": [
        "7f065b6f1169366d166004d43168162299ea3455"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Mar 23 19:38:44 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 23 19:38:44 2018"
      },
      "message": "evaluator: replace Function.Syntax method with accessors (#92)\n\n* evaluator: replace Function.Syntax method with accessors\r\n\r\nFuture versions of Function may not have a syntax tree.\r\n\r\nThis is a breaking API change."
    },
    {
      "commit": "7f065b6f1169366d166004d43168162299ea3455",
      "tree": "c65c158386df943a78249ffff49f9ebd524b54a0",
      "parents": [
        "9413ca27032d9df12d45419adc459dc84a50032b"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 19 18:58:49 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 19 18:58:49 2018"
      },
      "message": "evaluator: make \"x in mapping\" ignore errors from Mapping.Get (#90)\n\n* evaluator: make \"x in mapping\" ignore errors from Mapping.Get\r\n\r\nIn the result of Get, the evaluator cannot distinguish \"no such key\"\r\nerrors from true errors (value cycle, type error), so we ignore them all.\r\n\r\nThis matches the Java implementation.\r\n"
    },
    {
      "commit": "9413ca27032d9df12d45419adc459dc84a50032b",
      "tree": "a83e25bb65b54f49505cab857501c2128ab2b785",
      "parents": [
        "0483f815d7a3a8a3869fa03e8cd02850b21e4caa"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 19 17:46:37 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 19 17:46:37 2018"
      },
      "message": "skylark: reject int() with no arguments (#89)\n\n* skylark: reject int() with no arguments\r\n\r\n...and clarify spec to match Java spec, recently changed to match Java impl."
    },
    {
      "commit": "0483f815d7a3a8a3869fa03e8cd02850b21e4caa",
      "tree": "e47ccdb1f9a6f48b1e2555a4c222f9ec1aad8b03",
      "parents": [
        "a1b28d86a00778631c18367411127e0870e33446"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Sat Mar 17 21:50:06 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 17 21:50:06 2018"
      },
      "message": "spec: update stale example that relied on iterable strings"
    },
    {
      "commit": "a1b28d86a00778631c18367411127e0870e33446",
      "tree": "66ab321f857ff36e59bf97e41fa5b2fdaf523cac",
      "parents": [
        "3705afa472e466b8b061cce44b47c9ddc6db696d"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Mar 13 14:59:24 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 13 14:59:24 2018"
      },
      "message": "Remove predeclared names from the module globals dict (#86)\n\n* Remove predeclared names from the module globals dict\r\n\r\nPreviously, the Skylark spec and Go implementation had a notion\r\nof \"predeclared globals\", which are module globals that have a value\r\nbefore execution begins, such as the \u0027glob\u0027 function in\r\nthe Bazel build language.  This is undesirable because it causes\r\nevery module to appear to define \u0027glob\u0027, and it makes this name\r\naccessible to other modules through the load statement.\r\n\r\nThis CL changes the spec and implementation to match the Bazel behavior:\r\npredeclared names like glob are no longer part of the module\u0027s globals dictionary,\r\nbut are treated similar to universal names such as None and len.\r\nFrom the Skylark program\u0027s perspective, there is no difference\r\nbetween per-module predeclared names and universal\r\npredeclared names, and the spec now uses only the term \"predeclared\".\r\nHowever, the resolver distinguishes them as an optimization as this allows\r\nthe evaluator to use separate dictionaries to represent the\r\nuniversal and the per-module portions.\r\n\r\nAPI CHANGE: The ExecFile function has changed, and so must all its callers.\r\nPreviously, it accepted the globals dictionary as a parameter,\r\npopulated with predeclared names, and execution would add more\r\nnames to this dictionary.  Now, it accepts the predeclared\r\ndictionary (which it does not modify), and returns the globals\r\ndictionary.\r\n\r\nAlso: the resolver now assigns an index to each global,\r\nallowing the evaluator to use a flat representation for\r\nglobals similar to that for locals.\r\n\r\nFixes #75\r\n\r\n(See also Google internal issue b/74460309)"
    },
    {
      "commit": "3705afa472e466b8b061cce44b47c9ddc6db696d",
      "tree": "50a6a46dc5aa24c5e61bd1e56df457d0817e7188",
      "parents": [
        "d45fbbac1576cef8bd059a9ca944dda7741bc293"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Sat Mar 10 15:25:09 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 10 15:25:09 2018"
      },
      "message": "spec: s/subsequence/sub-sequence/\n\n...to emphasize that the word is not related to \"subsequent\".\r\n\r\nAlso s/an an/an/"
    },
    {
      "commit": "d45fbbac1576cef8bd059a9ca944dda7741bc293",
      "tree": "5a0038f722ff4c24dfbb0e43021fcd08a1e331b9",
      "parents": [
        "4bb5ab60f93920cb9eab187e579bbfe4f2fe372a"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Sat Mar 10 14:02:48 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 10 14:02:48 2018"
      },
      "message": "README: suggest Ctrl-D to exit the REPL\n\nFixes #85"
    },
    {
      "commit": "4bb5ab60f93920cb9eab187e579bbfe4f2fe372a",
      "tree": "f89ccddc332bd155b0241cb1baea33a33f9738ab",
      "parents": [
        "ae01c0c66bdda9cb627eefcef207464143ec6d2e"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Mar 07 01:21:45 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 07 01:21:45 2018"
      },
      "message": "eval: optimize string\u003d\u003dstring comparisons, which appear in profiles (#83)\n\nAlso, fix carely breakage caused by hiding \u0027freeze\u0027 from tests.\r\n"
    },
    {
      "commit": "ae01c0c66bdda9cb627eefcef207464143ec6d2e",
      "tree": "7fced2da048846049fdfcbaea7150e7bab84bd5d",
      "parents": [
        "601ada0289bb4da7220ae07a66667c1ff510e717"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Mar 06 21:35:26 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 06 21:35:26 2018"
      },
      "message": "grammar: fix two problems with CallSuffix (#82)\n\n1. Unlike parameters, the operands of *args and **kwargs used as\r\n   arguments may be any Test expression, not just an identifier.\r\n2. A trailing comma is not permitted after *args or **kwargs.\r\n\r\nThe implementation already does the right thing (following Python 3).\r\n"
    },
    {
      "commit": "601ada0289bb4da7220ae07a66667c1ff510e717",
      "tree": "b8d96e3dab91c0a422e0298e6ec58037ed7cce36",
      "parents": [
        "15a68dcfe3269e573111581ec858739cc29f3c85"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 05 21:24:26 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 05 21:24:26 2018"
      },
      "message": "skylarktest: expose only the \u0027assert\u0027 member of the assert module (#79)\n\n"
    },
    {
      "commit": "15a68dcfe3269e573111581ec858739cc29f3c85",
      "tree": "bc46873b7dcbdca2a267e1cc25ccfd9eab62a369",
      "parents": [
        "c15f32ee5e9de10bf94abd2f1f078e6a34f4ee46"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 05 21:23:41 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 05 21:23:41 2018"
      },
      "message": "str: print Go nil values gracefully (#80)\n\nSuch values are not legal Skylark values,\r\nbut this change makes it easier to track down their origin."
    },
    {
      "commit": "c15f32ee5e9de10bf94abd2f1f078e6a34f4ee46",
      "tree": "37e532bd4a775ba47816f778d6581d01f1e82964",
      "parents": [
        "fa00d7bbdc0bc33159b9a50f31de281bb0810a31"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 05 19:44:10 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 05 19:44:10 2018"
      },
      "message": "eval: document that Thread.Locals are accessible to Go, not Skylark (#78)\n\n"
    },
    {
      "commit": "fa00d7bbdc0bc33159b9a50f31de281bb0810a31",
      "tree": "80107002d7b520436be3cf456426cf13316a1886",
      "parents": [
        "ab191a020b346a426f0ad3c540ff23bddbe0b1b0"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Mar 05 19:40:59 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 05 19:40:59 2018"
      },
      "message": "string: rename {split_,}bytes methods to {split_,}elems (#77)\n\nThis finesses the question of what the element type of a string is,\r\nallowing us to add a similarly named method to the Java implementation\r\nthat returns UTF-16 codes.\r\n"
    },
    {
      "commit": "ab191a020b346a426f0ad3c540ff23bddbe0b1b0",
      "tree": "66e8928eacda130d0cd45af486a2572b3f2c5250",
      "parents": [
        "11b496306ff83d01ad34c57ed772f22ef69d8a75"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Mar 02 15:20:44 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 02 15:20:44 2018"
      },
      "message": "syntax: add (*LoadStmt).ModuleName accessor method, for convenience (#76)\n\n"
    },
    {
      "commit": "11b496306ff83d01ad34c57ed772f22ef69d8a75",
      "tree": "3fac5567e048b7769e840ecd3ecc8831cfc0816b",
      "parents": [
        "d881464c7bcc61bb69fcf775922bb9c7385235c5"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Feb 28 18:40:59 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 28 18:40:59 2018"
      },
      "message": "skylarkstruct: implement to_proto (#73)\n\n"
    },
    {
      "commit": "d881464c7bcc61bb69fcf775922bb9c7385235c5",
      "tree": "be9db3412cc66d59da6b2fa626cfd1b58096868a",
      "parents": [
        "653c157a7d1b331d43597e65b2f0e0c14286195d"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 22:11:31 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 22:11:31 2018"
      },
      "message": "Revert \"eval: remove deprecated dict+dict operator (#54)\" (#71)\n\nThis reverts commit 345cac49c6fe34e03558fbc9c7413401ede9252:\r\nThis operator is deprecated but still widely used by Bazel."
    },
    {
      "commit": "653c157a7d1b331d43597e65b2f0e0c14286195d",
      "tree": "be1f0ca18f3536e562d2652569b9fe2f9efd63b4",
      "parents": [
        "15b1cb9b233470f186d95baec2bb1d049432c73e"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 22:11:13 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 22:11:13 2018"
      },
      "message": "getattr: return the default value if Attr returns an error (#72)\n\nBut return the original error if there was no default.\r\n\r\nThis is analogous to what #69 did for hasattr.\r\n"
    },
    {
      "commit": "15b1cb9b233470f186d95baec2bb1d049432c73e",
      "tree": "83fadef2f41c11a00f31cf173ce819d1d6d4c281",
      "parents": [
        "cada8688dc321fdee337c3082bb8bd212a3e4242"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 19:38:20 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 19:38:20 2018"
      },
      "message": "eval: allow \u0027list +\u003d x\u0027 where x is not iterable but defines list+x (#70)\n\nThis is the case for Bazel\u0027s depset\r\n(although it really ought to be iterable).\r\n\r\nAdded regression test using hasfields, which is noniterable but\r\ndefines list+hasfields rather arbitraily.\r\n\r\nAlso: improve UnpackArgs failure when argument is a pointer."
    },
    {
      "commit": "cada8688dc321fdee337c3082bb8bd212a3e4242",
      "tree": "9d81dd6ad759107e698565bf30748d9583d5d259",
      "parents": [
        "062beb379b8e2598ef753e48f5fb8e935bdaeaec"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 17:59:19 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 17:59:19 2018"
      },
      "message": "skylarkstruct: several fixes (#69)\n\nDetails:\r\n- hasattr: an error result from Attr does not reliably indicate that\r\n  an attribute was missing. Fall back to checking AttrNames in that case.\r\n- to_{json,proto}: propagate errors correctly.\r\n- Include the constructor value (if nondefault) in the\r\n  no-such-attribute error message. It is crucial for debugging.\r\n- to_json: quote strings correctly.\r\n- Added very basic tests of skylarkstruct, in Skylark."
    },
    {
      "commit": "062beb379b8e2598ef753e48f5fb8e935bdaeaec",
      "tree": "9a4a6d921b50bbfbbb41701999a09cab2bf61787",
      "parents": [
        "3f344d364b6cad5181b907882f9aed83e7084ee3"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 15:41:09 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 15:41:09 2018"
      },
      "message": "eval: add comment on Thread.Load (#66)\n\n"
    },
    {
      "commit": "3f344d364b6cad5181b907882f9aed83e7084ee3",
      "tree": "5258c5111d5d008decac664673575c6aae09c4f8",
      "parents": [
        "c51a9a08f60d1ea908ef78dbfbb58e901fb58bed"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 15:40:57 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 15:40:57 2018"
      },
      "message": "testdata/int: add testcase (#67)\n\n* testdata/int: add testcase\r\n\r\n* Update int.sky\r\n"
    },
    {
      "commit": "c51a9a08f60d1ea908ef78dbfbb58e901fb58bed",
      "tree": "60bdd6483af5a7c16c4aa1bd7b7845200a3f0c67",
      "parents": [
        "28ceca7fdc8d88c4b6a4a64453b2251e00f73f56"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 15:40:44 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 26 15:40:44 2018"
      },
      "message": "testdata/string: add len testcase (#68)\n\n"
    },
    {
      "commit": "28ceca7fdc8d88c4b6a4a64453b2251e00f73f56",
      "tree": "3706e5e34d8cb7fc9426166d626ed9b185172496",
      "parents": [
        "689fc22ccbdf8623bfa12ec5bcaf3484861f9bd5"
      ],
      "author": {
        "name": "Laurent Le Brun",
        "email": "laurentlb@gmail.com",
        "time": "Mon Feb 26 14:01:53 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Feb 26 14:01:53 2018"
      },
      "message": "Add new node ParenExpr (#65)\n\nThis is a no-op for the interpreter, but it adds more information to the\r\nAST."
    },
    {
      "commit": "689fc22ccbdf8623bfa12ec5bcaf3484861f9bd5",
      "tree": "0208b017dfdd4055d527f151b3656dd755e732c5",
      "parents": [
        "a0e5de7e63b47e716cca7226662a4c95d47bf873"
      ],
      "author": {
        "name": "Laurent Le Brun",
        "email": "laurentlb@gmail.com",
        "time": "Thu Feb 22 18:37:18 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Feb 22 18:37:18 2018"
      },
      "message": "Attach comments to AST nodes. (#64)\n\n* Attach comments to AST nodes.\r\n\r\nThis feature is off by default. More testing will be needed before\r\nexposing it to the ParseFile function.\r\n\r\nLogic is copied from Buildifier (https://github.com/bazelbuild/buildtools/tree/master/build).\r\n\r\nbug #63\r\n\r\n* Fix tests by saving the state of \u0027blank\u0027 in the scanner.\r\n\r\n* - Rename flattenAST\r\n- Add new argument to the Parser and the Scanner\r\n- Update tests\r\n\r\n* Remove global constant keepComments\r\n\r\n* Update more tests (new argument to the parser)\r\n\r\n* Add CommentsRef to allow allocating comments\r\n\r\nAddress a few other issues\r\n\r\n* Remove the COMMENT tokens\r\n\r\nParser won\u0027t see COMMENT tokens anymore. The list is kept by the\r\nscanner. This simplifies the code and reverts some of my previous\r\nchanges.\r\n\r\n* Address review comments\r\n\r\n* - Removed the .Suffix boolean\r\n- Renamed CommentsRef to commentsRef\r\n- Simplified assignComments function (reversing was not useful)\r\n\r\n* assignComments leaves early if there is no comments\r\n+ address other review comments\r\n\r\n* Address review comments (for -\u003e if, removed useless code about suffix comments)\r\n"
    },
    {
      "commit": "a0e5de7e63b47e716cca7226662a4c95d47bf873",
      "tree": "1257ad024e46702bc1c9089b9c3f731e599846c6",
      "parents": [
        "69e9615dbc27ae3b4fa64d1fcfa01434f8af4cee"
      ],
      "author": {
        "name": "Laurent Le Brun",
        "email": "laurentlb@gmail.com",
        "time": "Fri Feb 09 17:30:29 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Feb 09 17:30:29 2018"
      },
      "message": "Update grammar (#61)\n\n* Update spec\r\n\r\nOctal numbers syntax + fix bugs in grammar\r\n\r\n* Update grammar.txt\r\n"
    },
    {
      "commit": "69e9615dbc27ae3b4fa64d1fcfa01434f8af4cee",
      "tree": "b645fd7e387a1d522fef6bc7c3b45ff3a98dd009",
      "parents": [
        "f9faf3b301a75792834b7a5d88d65f29baa3d3af"
      ],
      "author": {
        "name": "Mohamed Elqdusy",
        "email": "mohamedelqdusy@gmail.com",
        "time": "Mon Jan 22 19:00:29 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jan 22 19:00:29 2018"
      },
      "message": "Syntax: support multiprecision integer literals (#58)\n\n* Syntax: support multiprecision integer literals\r\n\r\n* Using INT token type for both cases\r\nthe parser is handling int64 and *big.Int values as a token of the type INT\r\n\r\n* Tests for bigInt\r\n\r\n* Testing large integer literals\r\n\r\n* Deleting some comments\r\n\r\n* Fixing a space\r\n"
    },
    {
      "commit": "f9faf3b301a75792834b7a5d88d65f29baa3d3af",
      "tree": "574990be1b44f811a1689b65040f9d23e37e102e",
      "parents": [
        "a1f7f1553b694ca26190a5a83b2f2624b2905a17"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Jan 16 15:06:02 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 16 15:06:02 2018"
      },
      "message": "parser: fix precedence of nested \u0027if\u0027 clauses in list comprehensions (#55)\n\n* parser: fix precedence of nested \u0027if\u0027 clauses in list comprehensions\r\n\r\nBefore, the parser would consume an arbitrary expression after the\r\n\u0027if\u0027 even though it should reduce after x in\r\n  [a for b in c if x if y else z]\r\nNow it consumes only a precedence zero (\"or\"-level) expression.\r\n\r\nThe parser similarly reduces after x when parsing\r\n  [a for b in c if lambda: x if y else z]\r\n\r\n* fix three comment typos\r\n"
    },
    {
      "commit": "a1f7f1553b694ca26190a5a83b2f2624b2905a17",
      "tree": "3e16a206312c5de3faaa0a2830091c5b8be8fc1c",
      "parents": [
        "3b32df93f48ac5670262b39554a19c178bcddd59"
      ],
      "author": {
        "name": "Shan Gao",
        "email": "gaoshan2002@users.noreply.github.com",
        "time": "Wed Jan 10 17:12:13 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Jan 10 17:12:13 2018"
      },
      "message": "remove extra \"was\" (#56)\n\n"
    },
    {
      "commit": "3b32df93f48ac5670262b39554a19c178bcddd59",
      "tree": "f586353ea43627087ce6cad66359d44be5eb6e5f",
      "parents": [
        "345cac49c6fe34e03558fbc9c7413401ede9252c"
      ],
      "author": {
        "name": "Mohamed Elqdusy",
        "email": "mohamedelqdusy@gmail.com",
        "time": "Mon Jan 08 16:20:46 2018"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jan 08 16:20:46 2018"
      },
      "message": "Support binary integers: 0b1101 literals and int(\"0b1101\", 0) (#52)\n\n* Support binary integers: 0b1101 literals and int(\"0b1101\", 0)\r\n\r\n* Specification and tests for binary integers\r\n\r\nAdding documentation for bnary integers in spec.md.\r\nAdding tests for syntax/scan_test.go (for the scanner) and testdata/int.sky for the int(x) function.\r\n\r\n* Correct some test cases in syntax/scan_test.go\r\n\r\n* Correct a test case in testdata/int.sky\r\n"
    },
    {
      "commit": "345cac49c6fe34e03558fbc9c7413401ede9252c",
      "tree": "3d950e786d998c2ac875daacd9e944864aad884a",
      "parents": [
        "b3d9e80219c097a9fd427d5aefa45070e453d575"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Mon Jan 08 15:38:41 2018"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 08 15:38:41 2018"
      },
      "message": "eval: remove deprecated dict+dict operator (#54)\n\n"
    },
    {
      "commit": "b3d9e80219c097a9fd427d5aefa45070e453d575",
      "tree": "80967678eb6c6be7553f545bf80448340f0e9193",
      "parents": [
        "5596825ff3ba24c6630589c5564497f251a40b45"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Sun Dec 31 17:09:34 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Dec 31 17:09:34 2017"
      },
      "message": "README: -lambda flag no longer needed by example"
    },
    {
      "commit": "5596825ff3ba24c6630589c5564497f251a40b45",
      "tree": "b7e12190779f8d8ca56e8801edf565f2c211b101",
      "parents": [
        "e70ab63d2b010f3d059d8ab0ed37b8e48615e9a7"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Dec 22 20:50:31 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Dec 22 20:50:31 2017"
      },
      "message": "repl: factor the REPL into a separate package (#50)\n\n...so that users can build REPLs for their dialects.\r\n\r\nAlso, add support for interrupting the REPL with Control-C."
    },
    {
      "commit": "e70ab63d2b010f3d059d8ab0ed37b8e48615e9a7",
      "tree": "e82d379d6da4c9c1e6f6ffbe44653daf2d811b9a",
      "parents": [
        "71da662e0b778bcc80721ed7b372d6d45417b300"
      ],
      "author": {
        "name": "Yusei Yamanaka",
        "email": "yusei1128@gmail.com",
        "time": "Wed Nov 29 14:04:35 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Nov 29 14:04:35 2017"
      },
      "message": "Fix typo (#47)\n\n"
    },
    {
      "commit": "71da662e0b778bcc80721ed7b372d6d45417b300",
      "tree": "0d505a50b5f430126f6f7b5deea5295e96956793",
      "parents": [
        "1b9d0e7119bc2aca0cd6be14ea0b8b184dc12bd2"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Nov 29 03:08:16 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 29 03:08:16 2017"
      },
      "message": "string.format: handle \"}}\" and \"{-0}\" correctly (#46)\n\nFixes #18"
    },
    {
      "commit": "1b9d0e7119bc2aca0cd6be14ea0b8b184dc12bd2",
      "tree": "c06c0f00ee1a62deb747e9a8829fea0f04552f0d",
      "parents": [
        "48d7cc591137a2a512fedcae4f23beedd678abb7"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Tue Nov 28 19:19:10 2017"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Tue Nov 28 19:19:10 2017"
      },
      "message": "resolve: add missing check for order of parameters and arguments\n\nParameters: required before optional\nArguments: positional before named\n"
    },
    {
      "commit": "48d7cc591137a2a512fedcae4f23beedd678abb7",
      "tree": "649466874577565bd9b833f76c4bdf0f7bda0ab5",
      "parents": [
        "25f3813368b0c3c0a1ca3b7fd1dab0e876f35dac"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "alan@alandonovan.net",
        "time": "Thu Nov 16 17:36:50 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Nov 16 17:36:50 2017"
      },
      "message": "remove executable accidentally committed (#43)\n\n"
    },
    {
      "commit": "25f3813368b0c3c0a1ca3b7fd1dab0e876f35dac",
      "tree": "5c8d7aaf25172302ac3b495d1d9f07442dd90645",
      "parents": [
        "ffb61b871f41afe93fdd2ab826a4f352cb770a83"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 18:23:22 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 10 18:23:22 2017"
      },
      "message": "REPL: add welcome message with doc URL (#41)\n\n"
    },
    {
      "commit": "ffb61b871f41afe93fdd2ab826a4f352cb770a83",
      "tree": "d92f69da823382f5d1dedf310df9ea44c20f9110",
      "parents": [
        "4b42bbfa3923bfb390a735fc94b4d3e90627911a"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 18:23:11 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 10 18:23:11 2017"
      },
      "message": "universe: remove freeze(x) built-in function (#42)\n\nIt\u0027s still useful for testing though, so we move it to assert.sky.\r\n"
    },
    {
      "commit": "4b42bbfa3923bfb390a735fc94b4d3e90627911a",
      "tree": "ad3eae7103a45d4f56dfb9082c715f58d7679851",
      "parents": [
        "70639d2c2e1b4900c2b60889bef4b9e59f340b29"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 18:22:52 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Nov 10 18:22:52 2017"
      },
      "message": "fix vet errors revealed by tip \"go test\" (#40)\n\n"
    },
    {
      "commit": "70639d2c2e1b4900c2b60889bef4b9e59f340b29",
      "tree": "c380b6ca685f5b8ac843a3d3ac9ac59fab9d1aeb",
      "parents": [
        "aa0bc8ec376caaff75fa2c8663023ac3c1f52ec3"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 17:40:24 2017"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 17:40:24 2017"
      },
      "message": "doc/spec.md: minor corrections\n\nChange-Id: Id97fe5a8b23417ce2d9d2f61e296a8668b3227b1\n"
    },
    {
      "commit": "aa0bc8ec376caaff75fa2c8663023ac3c1f52ec3",
      "tree": "22515382997d09bd1630da5a4ecf107ccc97f4d7",
      "parents": [
        "7b65d16c7a9abf7fdc27e64f929332878143fc69"
      ],
      "author": {
        "name": "Daniel, Dao Quang Minh",
        "email": "dqminh89@gmail.com",
        "time": "Fri Nov 10 16:10:34 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Nov 10 16:10:34 2017"
      },
      "message": "implement readline in repl (#39)\n\nThe current skylark repl doesnt have readline capability that is familiar when\r\nusing other repl such as python. This leverages github.com/chzyer/readline to\r\nsupport that"
    },
    {
      "commit": "7b65d16c7a9abf7fdc27e64f929332878143fc69",
      "tree": "2009f68beac5d8b5f68cb589fb1137e706e84e47",
      "parents": [
        "d6768aaa5873c1cf26709e3fd324a68b38ad690f"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Nov 01 20:35:47 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 01 20:35:47 2017"
      },
      "message": "string.{,r}split: make sep\u003dNone behave like Python (#35)\n\nThe cases for sep\u003dNone and explicit separators should use different\r\nalgorithms, as Python does. Make this explicit, and add tests and\r\ndocumentation.  The code is actually simpler for it.\r\n\r\nThis also fixes a test breakage introduced by d6768aa."
    },
    {
      "commit": "d6768aaa5873c1cf26709e3fd324a68b38ad690f",
      "tree": "8c09008debd97b29c41d7a2874c08d098c85935f",
      "parents": [
        "caa37b48c0bb49451adf26d42aab066dc9f85664"
      ],
      "author": {
        "name": "Garrett Squire",
        "email": "garrettsquire@gmail.com",
        "time": "Wed Nov 01 03:33:53 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Nov 01 03:33:53 2017"
      },
      "message": "Reverse split (#23)\n\n"
    },
    {
      "commit": "caa37b48c0bb49451adf26d42aab066dc9f85664",
      "tree": "ec185b42b88d97a9226e68b97664234a40d7408f",
      "parents": [
        "cd5b9eb035ea43240e3cabd28e87afab5dee5000"
      ],
      "author": {
        "name": "Ariel Mashraki",
        "email": "ariel@mashraki.co.il",
        "time": "Fri Oct 27 16:27:28 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 27 16:27:28 2017"
      },
      "message": "syntax: fix scanner position reporting (#34)\n\n"
    },
    {
      "commit": "cd5b9eb035ea43240e3cabd28e87afab5dee5000",
      "tree": "ec401b754fa1d9642dd14db3c9755b634f0c3b8b",
      "parents": [
        "6696fc363ddd14245a8d3b03e806e48703d1b23f"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 20 16:08:46 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 20 16:08:46 2017"
      },
      "message": "print: the application determines what happens to print\u0027s output (#32)\n\nChange-Id: I0f2e4a1e82ace67a91a56e1a091acad757e4583c"
    },
    {
      "commit": "6696fc363ddd14245a8d3b03e806e48703d1b23f",
      "tree": "e883c301d6dd8d35f74beea7abb0e1d1ca4385d7",
      "parents": [
        "4cbd89655273776a2cc65b02514f98b68df5b27e"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Fri Oct 20 14:55:17 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 20 14:55:17 2017"
      },
      "message": "syntax: make \u0027load\u0027 a reserved word (#31)\n\n* syntax: make \u0027load\u0027 a reserved word"
    },
    {
      "commit": "4cbd89655273776a2cc65b02514f98b68df5b27e",
      "tree": "42c10db584390d636346cd279003e85ece5edf14",
      "parents": [
        "f3709075f99e3c2168378dd5f537f39b146b3eff"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Oct 19 17:18:36 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 19 17:18:36 2017"
      },
      "message": "builtin: rename type to \"builtin_function_or_method\" (#30)\n\n* builtin: rename type to \"builtin_function_or_method\"\r\n\r\nAlso:\r\n- remove all uses of \"builtin\" as a noun.\r\n  Now it\u0027s always \"built-in function\" (or method).\r\n\r\nChange-Id: I2c81bb19800c40ed0f781b77449baa63333cb5e7\r\n\r\n* set: in x|y, require that y is a set if x is a set (#29)\r\n\r\nThe old functionality can still be accessed using x.union(y).\r\n\r\n* type: clarify difference from Java\r\n\r\nChange-Id: If36d4c5e97bb48c088356a7b538d4db0c165054c\r\n\r\n* builtin: rename type to \"builtin_function_or_method\"\r\n\r\nAlso:\r\n- remove all uses of \"builtin\" as a noun.\r\n  Now it\u0027s always \"built-in function\" (or method).\r\n\r\n"
    },
    {
      "commit": "f3709075f99e3c2168378dd5f537f39b146b3eff",
      "tree": "2567f1409f1725a4a3784747d4f209bacdef5be2",
      "parents": [
        "5cb1ab577184d6f26040b58b71de23f1ff20035c"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Oct 19 14:18:36 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 19 14:18:36 2017"
      },
      "message": "set: in x|y, require that y is a set if x is a set (#29)\n\nThe old functionality can still be accessed using x.union(y).\r\n"
    },
    {
      "commit": "5cb1ab577184d6f26040b58b71de23f1ff20035c",
      "tree": "9b9854b206d60320e75bf13199d35a550c2f24e4",
      "parents": [
        "23d0c969dd9f6077e524930b96b0c2707a16d361"
      ],
      "author": {
        "name": "kostya-sh",
        "email": "kostya-sh@users.noreply.github.com",
        "time": "Wed Oct 18 18:41:49 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 18 18:41:49 2017"
      },
      "message": "skylark: zip: support iterables of unknown length (#24)\n\n"
    },
    {
      "commit": "23d0c969dd9f6077e524930b96b0c2707a16d361",
      "tree": "f2eacb43a8f2e63c728fd4d9b749d24c9fe43036",
      "parents": [
        "05f260d5e1d1043c917b4841f00072cf91c1caf3"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 18 18:09:28 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 18 18:09:28 2017"
      },
      "message": "sorted, cmp: follow Python-3 (#28)\n\n- remove Python-2 sorted(cmp\u003d....) parameter\r\n- add Python-3 sorted(key\u003d...) parameter\r\n- remove \u0027cmp\u0027 builtin, following Python-3\r\n- use a stable sort\r\n"
    },
    {
      "commit": "05f260d5e1d1043c917b4841f00072cf91c1caf3",
      "tree": "65596ebd916407815b141ee4d1091395abaa30ba",
      "parents": [
        "5ce1e42319f24a6f5f0c16508f502bf6144511d6"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 18 16:43:53 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 18 16:43:53 2017"
      },
      "message": "skylark: range(...) no longer materializes the sequence as a list (#25)\n\n* skylark: range(...) no longer materializes the sequence as a list\r\n\r\nSkylark now follows the Python3, not Python2, semantics for range.\r\n\r\nAlso: fix an off-by-one error.\r\n\r\n* range: allow membership tests \u0027x in range(n)\u0027\r\n\r\nChange-Id: I0dffe70510f723c00da4153bcc0a17478cceb986\r\n\r\n* range: allow floating point numbers for x in \u0027x in range(y)\u0027\r\n\r\n- use ConvertToInt to convert x to an integer.\r\n- change ConvertToInt not to accept a bool.  This affects string interpolation.\r\n  e.g. \"%d\" % True now (correctly) results in an error.\r\n- rename ConvertToInt to NumberToInt\r\n\r\nChange-Id: Ie9e9d40d993c227b834bb720e5dbe3714032836a\r\n\r\n* range: doc tweaks\r\n\r\nChange-Id: I3f242d38a5969fa228167b72be6cb78aa4677eb6\r\n"
    },
    {
      "commit": "5ce1e42319f24a6f5f0c16508f502bf6144511d6",
      "tree": "5673d7601dfb1e5462f1137fd777a85a7fb979e7",
      "parents": [
        "25a152db3440891960758ed4d9d5b0fdf308d4ba"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Oct 17 19:20:32 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 17 19:20:32 2017"
      },
      "message": "doc comments: refer to specification of Skylark, not Bazel or Python (#26)\n\n"
    },
    {
      "commit": "25a152db3440891960758ed4d9d5b0fdf308d4ba",
      "tree": "eefb557ce02c4273889d942d1acef12b5191c497",
      "parents": [
        "6a8b65efdff4c536ba7ac2d71c8ef02fad27b1c6"
      ],
      "author": {
        "name": "kostya-sh",
        "email": "kostya-sh@users.noreply.github.com",
        "time": "Tue Oct 17 15:25:27 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Tue Oct 17 15:25:27 2017"
      },
      "message": "skylark: do not leave zip arguments frozen (#5)\n\n"
    },
    {
      "commit": "6a8b65efdff4c536ba7ac2d71c8ef02fad27b1c6",
      "tree": "29f99e25a5366ea27f7edb20fa7cea3f154dd21f",
      "parents": [
        "7761e753f8dc4f929ce70cc5871375e96b6c8aba"
      ],
      "author": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 16 13:29:55 2017"
      },
      "committer": {
        "name": "Alan Donovan",
        "email": "adonovan@google.com",
        "time": "Mon Oct 16 13:29:55 2017"
      },
      "message": "doc/impl.md: minor tweaks\n\nChange-Id: Ia29620117cacd3d2b444a1bd9bc1694f6780b1db\n"
    },
    {
      "commit": "7761e753f8dc4f929ce70cc5871375e96b6c8aba",
      "tree": "5947e47535b056e7c21bd485ce08ba42a74d8d60",
      "parents": [
        "bd7aaf591896805d512a3d200e06811b49bd6bce"
      ],
      "author": {
        "name": "Jay Conrod",
        "email": "jayconrod@gmail.com",
        "time": "Thu Oct 12 02:13:56 2017"
      },
      "committer": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Thu Oct 12 02:13:56 2017"
      },
      "message": "Fix tiny vet error (#20)\n\n"
    },
    {
      "commit": "bd7aaf591896805d512a3d200e06811b49bd6bce",
      "tree": "2812b1729509d98fc23ebfc6f4fef95f513f6f3f",
      "parents": [
        "04850cbd41135d342152654bf55f174b18d08d66"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 11 20:34:02 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 11 20:34:02 2017"
      },
      "message": "parser: clarify comment re: NEWLINE (#14)\n\n"
    },
    {
      "commit": "04850cbd41135d342152654bf55f174b18d08d66",
      "tree": "8afb408693c94fb5eadb6304adf4a98876b832ca",
      "parents": [
        "52b487c0ed1e9446ffe51b681e27c5f070da587c"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 11 18:16:28 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 11 18:16:28 2017"
      },
      "message": "UnpackArgs: permit parameters of user-defined Value subtypes (#12)\n\nWe use reflection to assign the actual value to the parameter variable.\r\nIt is a fatal error if the parameter variable is not a skylark.Value.\r\n\r\nFixes issue google/skylark#8\r\n"
    },
    {
      "commit": "52b487c0ed1e9446ffe51b681e27c5f070da587c",
      "tree": "beca98ce343bbb1d94b965d6915091400c221c60",
      "parents": [
        "631f7b543a37d302fcfc62793b6e756faa6b34bb"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 11 18:16:09 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 11 18:16:09 2017"
      },
      "message": "cmd/skylark: process a single-line load statement without delay (#13)\n\n"
    },
    {
      "commit": "631f7b543a37d302fcfc62793b6e756faa6b34bb",
      "tree": "56401b712a19a92485d64204f5ebb3f72c3a6189",
      "parents": [
        "13998aa7464402849172959d67ded8527c7d9370"
      ],
      "author": {
        "name": "alandonovan",
        "email": "adonovan@google.com",
        "time": "Wed Oct 11 17:04:47 2017"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 11 17:04:47 2017"
      },
      "message": "resolve: clarify is{PredeclaredGlobal,Builtin} parameters (#11)\n\n* resolve: clarify is{PredeclaredGlobal,Builtin} parameters\r\n- document these parameters\r\n- rename isBuiltin to isUniversal to avoid overloading \u0027builtin\u0027 (as in functions)\r\n- export StringDict.Has method, and simplify.\r\n\r\nChange-Id: I3b9396b879be960c08c3200fe1f6a2ac683d66e0\r\n\r\n* resolve: fix typo\r\n\r\nChange-Id: Id5b88f5dcf55ed4733b74990419ef7cfcacfae2c\r\n"
    }
  ],
  "next": "13998aa7464402849172959d67ded8527c7d9370"
}
