)]}'
{
  "log": [
    {
      "commit": "128ad2d20497afb6ed1f2f11cfdae020f08f798c",
      "tree": "ea5f88f8b72dc00d19b0ff591cf7074c3db93b4c",
      "parents": [
        "1a539db23c90cc4b0e9c43bd37ee873fc34390dd"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 08 14:51:31 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 08 14:51:31 2009 -0700"
      },
      "message": "Implement x86 int \u003c--\u003e float.\n"
    },
    {
      "commit": "1a539db23c90cc4b0e9c43bd37ee873fc34390dd",
      "tree": "8abf1a81d2e8e032f02d712af3ad2398028d4bef",
      "parents": [
        "8df4619e09b8944c1aa3b743b556a63a283d8768"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 08 13:04:41 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 08 13:04:41 2009 -0700"
      },
      "message": "Some x86 floating point code works.\n\nWe now check the types and number of arguments to a function.\n"
    },
    {
      "commit": "8df4619e09b8944c1aa3b743b556a63a283d8768",
      "tree": "09d5278c4d7b7a91a9f2ee338ed6b10ccf9ceda1",
      "parents": [
        "32db7311bffb1a4921341b51e3df882f0b80d46a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jul 07 14:48:51 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jul 07 14:48:51 2009 -0700"
      },
      "message": "Start tracking types in expressions.\n"
    },
    {
      "commit": "1aeb87b52b70a7c568713d1a6524645383c54507",
      "tree": "f7c1ec86fc9054ed8bc1ef4cb1991d3ea4e49ed5",
      "parents": [
        "9eed7a2c7b3748f4aa10e1dc60875bf72a18c275"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 18:33:20 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 18:33:20 2009 -0700"
      },
      "message": "Parse floating point (and double) constants.\n"
    },
    {
      "commit": "9eed7a2c7b3748f4aa10e1dc60875bf72a18c275",
      "tree": "d11a956ee26ed5d7bfda9a182554dbae93bc8351",
      "parents": [
        "32a0056ff2a968a8a259dacd5d75fd2c22611e92"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 17:24:34 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 17:24:34 2009 -0700"
      },
      "message": "Start teaching the code generator about types.\n\nRemove the concept of \"R1\" from the code generator API, R1 is used\ninternally as needed.\n"
    },
    {
      "commit": "95727a0b057fb6d7117e70cf0e9621892ec781c3",
      "tree": "f3f6c6240a3ba781db290387d3e16c1237a37c11",
      "parents": [
        "3f22649d980717aa8bb0160c9a1d436bc813f05d"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 12:07:15 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jul 06 12:07:15 2009 -0700"
      },
      "message": "Initial support for float, double.\n"
    },
    {
      "commit": "3f22649d980717aa8bb0160c9a1d436bc813f05d",
      "tree": "6b5ef92a1d23f283620e7ac329a9d25431069817",
      "parents": [
        "40600de143c3f0f07e03c8f69cd3d32f49c123eb"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jul 02 14:46:19 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jul 02 14:46:19 2009 -0700"
      },
      "message": "Implement our hard casts using our type system.\n\nDoesn\u0027t add any new capabilities, but we now generate error\nmessages if you attempt casts we don\u0027t support,\nand we also found and fixed some bugs in declaration parsing.\n"
    },
    {
      "commit": "40600de143c3f0f07e03c8f69cd3d32f49c123eb",
      "tree": "3a7a6eeda82581e5b52189d28c87308c41c08dbc",
      "parents": [
        "8635198c57b8a913f0f9d3b07139f8b2af7cb30f"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 01 15:32:35 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed Jul 01 15:32:35 2009 -0700"
      },
      "message": "Clean up expression code.\n\nConcatenate adjacent string literals.\n"
    },
    {
      "commit": "8635198c57b8a913f0f9d3b07139f8b2af7cb30f",
      "tree": "f9a87d01b71a1cd464979870a36d99ee72834ac3",
      "parents": [
        "569f135862b7a00a1ec59d1f000e376cef9648f5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 30 18:09:56 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 30 18:09:56 2009 -0700"
      },
      "message": "Add a type system.\n\nWe now track the declared type of variables and functions.\n"
    },
    {
      "commit": "569f135862b7a00a1ec59d1f000e376cef9648f5",
      "tree": "4789d0d0e87c680dae1645f4f508df4911c2e901",
      "parents": [
        "a65044fad8d668fad71769555486254eee7b8dc3"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 29 14:29:08 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 30 10:16:43 2009 -0700"
      },
      "message": "Implement a token table and an arena allocator.\n\n+ Tokens are now simple IDs, rather than ids or maybe pointers.\n+ We can now allocate data that\u0027s freed automatically when\n  compilation end or when a block goes out of scope.\n+ Renamed our Array utility class to Vector, and made its\n  api work a little more like the STL vector template class.\n"
    },
    {
      "commit": "609c994f7bd5bc78808cde0672baf2461d2d94f8",
      "tree": "8f03dd25546a0dfd29b89c03c28cae70373135c0",
      "parents": [
        "715c03a10b825dc7cae78f8a6da7a8956beefb8d"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 25 11:49:43 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 25 13:55:12 2009 -0700"
      },
      "message": "Rewrite compiler test using python.\n\nNice because we\u0027re now checking the output for success/failure\nautomatically rather than by eye.\n"
    },
    {
      "commit": "422972cb127c229a38e79bb5d2d8df44aebeeeea",
      "tree": "685fe7147ea8d0dac73b893b596f35299a70c1f7",
      "parents": [
        "d7166ede3bb2b04449da89078a7b19c29a964089"
      ],
      "author": {
        "name": "-b master",
        "email": "jackpal@google.com",
        "time": "Wed Jun 17 19:13:52 2009 -0700"
      },
      "committer": {
        "name": "-b master",
        "email": "jackpal@google.com",
        "time": "Wed Jun 17 19:13:52 2009 -0700"
      },
      "message": "Align ARM stack pointer to an 8-byte boundary when calling functions.\n\nThis is required by the ARM EABI standard.\n"
    },
    {
      "commit": "a1804ddebaf8f54f922716dcfe83d9726dd18493",
      "tree": "9aacf463097de96935c64f3f52b28c66a161f4e1",
      "parents": [
        "d7461a7342e706bece657172799ea8db9a104237"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 14:40:04 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 14:40:04 2009 -0700"
      },
      "message": "Allow local variables to be declared anywhere in a block.\n"
    },
    {
      "commit": "d7461a7342e706bece657172799ea8db9a104237",
      "tree": "329d4592eb9d2f3fb8336d2993c754af82f7fa86",
      "parents": [
        "f1728bec74f952763a02a4c7d38c33b20d700870"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 14:26:58 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 14:26:58 2009 -0700"
      },
      "message": "Support variable initialization.\n\nGlobal variables can only be initialized to integer constants.\n\nLocal variables can be initialized to arbitrary expressions.\n"
    },
    {
      "commit": "f1728bec74f952763a02a4c7d38c33b20d700870",
      "tree": "26fccbefc0024267aee87876d6dcf2e46478ea47",
      "parents": [
        "22e3e8e1a63ba947cae52e143f650df679fd46ba"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 13:53:51 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 13:53:51 2009 -0700"
      },
      "message": "Reserve all C99 keywords.\n\nAnd improve checks/error messages around using non-symbols where a\nsymbol is expected.\n"
    },
    {
      "commit": "22e3e8e1a63ba947cae52e143f650df679fd46ba",
      "tree": "3f68ea9e6c841db13e23022837cd1263d05ce203",
      "parents": [
        "b4758ff1defaf01f381bce1630607ad1763f72ec"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 13:12:55 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 13:12:55 2009 -0700"
      },
      "message": "Handle end-of-file inside of comments, local declarations.\n"
    },
    {
      "commit": "b4758ff1defaf01f381bce1630607ad1763f72ec",
      "tree": "837e32dc2913077186d6ed33a83e0a97151d0fc1",
      "parents": [
        "2ccc40d096ef18ca595f95c6c52532400be34807"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 12:49:14 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 12:49:14 2009 -0700"
      },
      "message": "Implement string and character backslash constants.\n\nUntil now we only supported \u0027\\n\u0027. Now we support everything, including\noctal (\u0027\\033\u0027) and hex \u0027\\x27\u0027 constants.\n"
    },
    {
      "commit": "2ccc40d096ef18ca595f95c6c52532400be34807",
      "tree": "67fbbb08160d7188808a01a42ad4b8227e440592",
      "parents": [
        "a6baa23f0831f98e84ee4afbfb6cdb3ac5c1f5ea"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 11:53:07 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 11:53:07 2009 -0700"
      },
      "message": "Make #define work again. (Had accidentally omitted the keyword.)\n"
    },
    {
      "commit": "a6baa23f0831f98e84ee4afbfb6cdb3ac5c1f5ea",
      "tree": "ec36e42261ecacf04997739b62699a9ec004a2a6",
      "parents": [
        "61d22dc763af7c1528ddf8a30054015a9b299e73"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 11:25:59 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri Jun 12 11:25:59 2009 -0700"
      },
      "message": "Improve symbol-related error checking\n\n+ Duplicate symbols.\n+ Undefined variables;\n+ Forward-referenced functions that were never defined.\n"
    },
    {
      "commit": "61d22dc763af7c1528ddf8a30054015a9b299e73",
      "tree": "311f86e963d22e3ca0398440755b76876dd3a299",
      "parents": [
        "b67b18f7c2217ae83e9ffc808cb9a58b233ec5bc"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 22:03:24 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 22:03:24 2009 -0700"
      },
      "message": "Improve nested variable test.\n\nTest that we can have two levels of local variables.\n"
    },
    {
      "commit": "b67b18f7c2217ae83e9ffc808cb9a58b233ec5bc",
      "tree": "e8a8df9c81ddfe85ea1a0c5186a0d6edc4f32ebb",
      "parents": [
        "303d8ffca9c508a6b25408fc3b2e80ead252e1ed"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 21:12:23 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 21:50:17 2009 -0700"
      },
      "message": "Add code generator tracer.\n"
    },
    {
      "commit": "303d8ffca9c508a6b25408fc3b2e80ead252e1ed",
      "tree": "009f3dd9677730d855039c1c5c032a24b3b006fc",
      "parents": [
        "2db168f12feb0e25209b4aee385af074ef87157a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 19:06:24 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 21:47:57 2009 -0700"
      },
      "message": "Improve local variable scoping.\n\nUntil now we faked local variables -- they only worked correctly if\nthere was no overlap between local variables and global variables.\n\nUse a symbol table stack instead of a string list.\n\nFix bug with looking up undefined symbols.\n"
    },
    {
      "commit": "2db168f12feb0e25209b4aee385af074ef87157a",
      "tree": "6d74a5cbbfadd02dcecea5d534f33262412a926d",
      "parents": [
        "0a280a0dde38444398da102c17f260270a0a4c4e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 14:29:47 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 14:29:47 2009 -0700"
      },
      "message": "Use a separate table for keywords.\n"
    },
    {
      "commit": "0a280a0dde38444398da102c17f260270a0a4c4e",
      "tree": "cc84c8548929585c8b059876f261d6ec1591beb6",
      "parents": [
        "6f5fb6fda101cac4208e4caecee0f70680e2d996"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 10:53:51 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 11 10:53:51 2009 -0700"
      },
      "message": "Remove use of setjmp/longjmp from libacc compiler.\n\nIt makes it harder to deal with memory allocation.\n\nAlso fix bug in the otcc-ansi.c test, where the wrong part of the\ncode buffer was being mprotected, so that if the code buffer happened\nto be allocated across a page boundary, some code would no receive\nexecute permission.\n"
    },
    {
      "commit": "8dc662efe9e0c820eb001d66315bc32b2358fc57",
      "tree": "d62e96e32d3b8ad59e8b819a9add6f907007a4a8",
      "parents": [
        "36d9414f72b629dacc2c972e93d16cec08ef44b6"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 09 22:53:47 2009 +0000"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue Jun 09 22:59:04 2009 +0000"
      },
      "message": "Make otcc code work in x64 based system with 32-bit chroot.\n\nSet execute permission on code before running it.\nHandle negative relative offsets for global variables.\nAdd printfs to report the progress of nested compiles.\nChange way we detect whether we can run the host compiler\nor not. We used to check if we were running on a 32-bit\nLinux. Now we check if the executable is a 32-bit Linux\nexecutable.\n"
    },
    {
      "commit": "36d9414f72b629dacc2c972e93d16cec08ef44b6",
      "tree": "37adc7a81e84320f9bf720febf58457daf495746",
      "parents": [
        "2d11dfba277b2f9d98f00a32510d612e779ba757"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 08 15:55:32 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 08 15:55:32 2009 -0700"
      },
      "message": "Make a host version of acc for testing.\n\nDon\u0027t run the code we\u0027ve compiled unless the -R option is present.\n"
    },
    {
      "commit": "2d11dfba277b2f9d98f00a32510d612e779ba757",
      "tree": "8e26048544c8f26db2dfa4e36e3e56d3ed9d7053",
      "parents": [
        "ce51b3b55f3facfce5dccebc73bd1903e163103e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 08 14:34:26 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon Jun 08 14:34:26 2009 -0700"
      },
      "message": "Move macros into their own table.\n\nCatch attempts to define macros with parens (not supported.)\n"
    },
    {
      "commit": "b7c81e99522fbc5256f20e826eae18f2a33ea76a",
      "tree": "939f5bbd87f1c4c87a834bab92fb2eef12851b16",
      "parents": [
        "eedf9d20832f1af3a4bd362819be6eace54240b5"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 04 19:56:13 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 04 19:56:13 2009 -0700"
      },
      "message": "Switch to ANSI C style C function declarations.\n\n  main(argc, argv) --\u003e int main(int argc, char** argv)\n\nAlthough we accept int, void, and char types, and pointers to same,\nwe actually still treat everything as an int.\n"
    },
    {
      "commit": "eedf9d20832f1af3a4bd362819be6eace54240b5",
      "tree": "db2e5e0d4ed2c7ca3bb8d52206bc62401c2201ed",
      "parents": [
        "f4c94943a902550143027e0002bb569f9855c7b2"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 04 16:23:40 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu Jun 04 16:38:35 2009 -0700"
      },
      "message": "Add support for #pragma foo(bar)\n\nReport unsupported/unknown preprocessor directives.\nReport line number of error rather than character offset.\n"
    },
    {
      "commit": "f1f39cca305f6f3d2d91b88736b7b2b520d59e2e",
      "tree": "59b6b7bd2fba056f935c004e308a18bf4cdee8a4",
      "parents": [
        "ac0e95eb60fc8f8ef3281f9183630d1515bd12a7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 29 18:03:15 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 29 18:03:15 2009 -0700"
      },
      "message": "Make sure we don\u0027t overflow various internal compiler buffers.\n\nWe may replace some of these tables with dynamically growing data\nstructures, but in the meantime we will not trash memory.\n"
    },
    {
      "commit": "ac0e95eb60fc8f8ef3281f9183630d1515bd12a7",
      "tree": "67f332f15f45b3cf9878e305f8a34b02f6adba21",
      "parents": [
        "653f42da9249a2f576d1ff50ee22bf6a67ff90b1"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 29 13:53:44 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 29 13:53:44 2009 -0700"
      },
      "message": "Improve ACC error reporting.\n\nNow return an error code and an error message, rather than just\nprinting to stderr or calling exit().\n\nCheck to see we don\u0027t exceed our code size.\n"
    },
    {
      "commit": "653f42da9249a2f576d1ff50ee22bf6a67ff90b1",
      "tree": "e0439e3c527a112044edb35b0d99bdf1a0e15d1e",
      "parents": [
        "730c8d7c03bbe384a1bc66aac357e97c06c7d64e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 28 17:15:32 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 29 09:32:14 2009 -0700"
      },
      "message": "Pointer-ize the acc front end.\n\nThe ACC compiler used to be able to compile itself. This was a neat\nfeature, but because ACC only supports ints, pointers are stored as\nints, and cast to pointers when used.\n\nThis checkin turns many ints that are really pointers back into\npointers, so that the code is clearer.\n\n int ch;\n char* glo;\n char* sym_stack;\n char* dstk;\n char* dptr;\n int dch;\n char* last_id;\n"
    },
    {
      "commit": "09555c7a18342390556132f7d050a410d02206ef",
      "tree": "fb015157eacc610193a26174971bdbdcff5bafa8",
      "parents": [
        "0675ba5bd408b763cede360f945b01c15370d4c2"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 27 12:25:55 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 27 12:25:55 2009 -0700"
      },
      "message": "Fix symbol lookup logic, squelch LOG output.\n"
    },
    {
      "commit": "1cdef20774b2cd30f1a509227c86845337f63f11",
      "tree": "366741a46471159514da46cc4d3186bad53774d9",
      "parents": [
        "ad3f0d74b4d0c52a819b0b4b242f26bd4ce07bc9"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 22 12:06:27 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 22 12:09:55 2009 -0700"
      },
      "message": "Convert libacc into a shared library.\n\nDocument internal CodeGenerator interface\n\nMove license to a separate license file.\n\nDefine a public API for calling libacc.\n\nUpdate the \"acc\" test program to use the public API.\nMove \"main.cpp\" and test scripts into the tests subdirectory.\nMove test data from tests to tests/data\nRemove stale test data.\n"
    },
    {
      "commit": "8b0624c3d30e7b8b0d748301c0c2175bbb01acd6",
      "tree": "b67c9ba5bd50bbe8081d94766ef1d841a8a445ce",
      "parents": [
        "0b5cb96fa46a892fb3662ddf341fdc095dabcd82"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 20 12:12:06 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 20 12:12:06 2009 -0700"
      },
      "message": "Fix x64 int / pointer warnings.\n"
    },
    {
      "commit": "e7b590666dba83c72b7f7bf210dad7239ab04b4f",
      "tree": "ca30566d3e646fcb14b0c49426f931dedc71cae6",
      "parents": [
        "274663bf677d56bc212f354e8d50b8f58239252c"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue May 19 17:12:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 20 11:27:04 2009 -0700"
      },
      "message": "Implement architecture-dependent defaults.\n\nIf libacc is built on x86, then x86 is the default code generator.\nIf libacc is built on arm. then ARM is the default code generator\nAnd so on for future architectures.\n\nThe 64-bit x64 machine has no working code generator currently.\nWe may add one to support the simulator builds.\n\nImproved the test program so we don\u0027t try to run tests if the\ncompile failed. Also avoid running tests that don\u0027t work on\na given platform.\n"
    },
    {
      "commit": "274663bf677d56bc212f354e8d50b8f58239252c",
      "tree": "0056cc072e0c5e6d6a71c5ec84eed7f92fbd7de7",
      "parents": [
        "342520f2ed0f06deaff4d9c227121c98581dd4a4"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue May 19 13:57:49 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue May 19 14:07:41 2009 -0700"
      },
      "message": "Add a test script for testing the libacc compiler on ARM.\n"
    },
    {
      "commit": "3d474a74a7aad537f596d3978be7ec0cb79d4e64",
      "tree": "356cff10c46f0968072c51cb442afd6e0b6c9781",
      "parents": [
        "7810bc9abd7c2c415d87b62dea1ff75d5fdc7397"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 15:12:38 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 15:12:38 2009 -0700"
      },
      "message": "ACC ARM codegen: implement /, %\n"
    },
    {
      "commit": "7810bc9abd7c2c415d87b62dea1ff75d5fdc7397",
      "tree": "4a5c2c1b32b5df4a08d1ed7ff0b44880f75d36da",
      "parents": [
        "4d93f30befb6e3adf37198c6c7f6727d1e570b94"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 14:31:47 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 14:31:47 2009 -0700"
      },
      "message": "ACC ARM codegen: Implement calling indirect functions.\n"
    },
    {
      "commit": "4d93f30befb6e3adf37198c6c7f6727d1e570b94",
      "tree": "65b3e413f5db6fc791d7fb3d305d07d0979e8c44",
      "parents": [
        "9918d0a2ee146e9bcd15b2f2eccf6f5445f8e17e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 13:30:00 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 13:30:00 2009 -0700"
      },
      "message": "ACC ARM code gen: Implement global variables.\n\nCollapsed the inc/dec codegen into the loadEAX function, because it\nallows us to generate better code for inc/dec\u0027ing a global variable\non ARM, because we don\u0027t have to load the variable\u0027s address twice.\n"
    },
    {
      "commit": "9918d0a2ee146e9bcd15b2f2eccf6f5445f8e17e",
      "tree": "2e53dc868fbdc703237d58931b7dc6cb1fccc0d8",
      "parents": [
        "035b427c703e24d583be7aef9923a85327d8b546"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 10:57:02 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 15 11:01:21 2009 -0700"
      },
      "message": "Add license, document language changes.\n"
    },
    {
      "commit": "bd894904f70827a131b24bb2e8f8a32707e586df",
      "tree": "6b73c9449a7d8ac171d46c02c83d8106e5c17c6e",
      "parents": [
        "8de461dc9e400daac883477fcab0d6d07ac1918a"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 19:35:31 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 19:35:31 2009 -0700"
      },
      "message": "ACC: Arm code gen improvements ++/--, \u0026, odds and ends\n\nAdded C++-style \"//..end-of-line\" comments, since I kept trying to use them when writing\ntest programs.\n\nThe biggest known missing piece is global variables.\n"
    },
    {
      "commit": "8de461dc9e400daac883477fcab0d6d07ac1918a",
      "tree": "b512510fd0700e4bf9ff0859125212254ac73e50",
      "parents": [
        "69796b6c847dd15bdbc1d0a563e421562c2c56f3"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 17:21:45 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 17:21:45 2009 -0700"
      },
      "message": "Implement \u003c, \u003e, \u003d\u003d, !\u003d, \u003e\u003d \u003c\u003d, \u0026\u0026, and ||.\n"
    },
    {
      "commit": "69796b6c847dd15bdbc1d0a563e421562c2c56f3",
      "tree": "34d3b070a42af76f662202c433d42744f65dc51a",
      "parents": [
        "cb1c9ef38c9db11db927096a45b10cda52786481"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 15:42:26 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 16:43:18 2009 -0700"
      },
      "message": "ACC ARM code gen: Implement local variables, function args\n\n+ Fix prolog and epilog code.\n"
    },
    {
      "commit": "cb1c9ef38c9db11db927096a45b10cda52786481",
      "tree": "5a6816bc3877af9cddb86519e4e0d730d1da9b40",
      "parents": [
        "11f6b92818ff252dc339ca307641bd6fecdcd915"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 11:38:49 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Thu May 14 14:27:06 2009 -0700"
      },
      "message": "ACC ARM code gen improvements. printf(\"Hello, world\\n\"); works!\n\n+ Improved li to handle all 32-bit values.\n+ Implemented push/pop of temp registers during evaluation\n+ Implemented the unary and binary easy math operators (+,-,*,\u003c\u003c,\u003e\u003e,|,\u0026,^,~)\n+ Implemented global function calling.\n"
    },
    {
      "commit": "a65356109772b04283d18d21dd5455e825ba8c25",
      "tree": "73a7912b6376e9a3d034da9bbaef064b9f484108",
      "parents": [
        "546b2249eff4d95622c4bab0698ebf290c9ed836"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 16:24:17 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 19:51:03 2009 -0700"
      },
      "message": "ARM codegen: Add disassembler, implement return\n\nThis program works:\n\n    main() { return 42; }\n\nThe disassembler was borrowed from codeflinger, and just modified enough to compile\nunder C++ without warnings.\n\nImplemented gsym\nImplemented a hack verison of li, only works for -256..255\nImplemented gjmp\n"
    },
    {
      "commit": "546b2249eff4d95622c4bab0698ebf290c9ed836",
      "tree": "0a59545250985a335184c6af2e323f041d4a04a2",
      "parents": [
        "2230513fc0ba455c6de39525dded4274dfb0146b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 15:10:04 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 15:10:04 2009 -0700"
      },
      "message": "Begin filling in ARM code generator.\n\nWe can now call functions that have no arguments (and return from them too!)\n"
    },
    {
      "commit": "2230513fc0ba455c6de39525dded4274dfb0146b",
      "tree": "813c19c0b7c588e193c9c1e69d2a0c273c2dbb2b",
      "parents": [
        "2ac16b7e46753238312475cf16aa910c1897c5d0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 10:58:45 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Wed May 13 10:58:45 2009 -0700"
      },
      "message": "Add stub Arm code generator.\n"
    },
    {
      "commit": "bf42c9c163cfd63a2895a0bbb38013c8a0024c2e",
      "tree": "38d18a70627098e6cd3d30a7584243479f48d106",
      "parents": [
        "21a15a2416b4b138bf509186106525944e78ad08"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue May 12 12:48:35 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Tue May 12 13:46:16 2009 -0700"
      },
      "message": "Move all x86-specific knowlege into the X86CodeGenerator.\n"
    },
    {
      "commit": "21a15a2416b4b138bf509186106525944e78ad08",
      "tree": "f25bdd540f38a97c8c7e025ca624718e46e15472",
      "parents": [
        "a96930572c3ef440065a87985ed5f01724bf159b"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon May 11 14:49:29 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon May 11 18:49:27 2009 -0700"
      },
      "message": "Various C++ improvements\n\n+ Changed indentation, causes the stats to say there\u0027s a lot of lines changed.\n+ Should be able to compile multiple times with the same compiler object.\n+ Create a CodeBuffer class to hold the code.\n+ Create a CodeGenerator class to encapsulate knowlege of the CPU instruction set.\n+ Started filling in the code generator.\n"
    },
    {
      "commit": "a96930572c3ef440065a87985ed5f01724bf159b",
      "tree": "d7d698a84d48b46d6ffd6c0a318d238a10226ebf",
      "parents": [
        "bbf8ab504a68f7e971b7fa47b0bee3c3e022a480"
      ],
      "author": {
        "name": "Frabrice Bellard",
        "email": "fabrice@bellard.org",
        "time": "Mon May 11 14:50:37 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon May 11 14:51:47 2009 -0700"
      },
      "message": "Document acc language features.\n\nOriginal text from http://www.ioccc.org/2001/bellard.hint\n"
    },
    {
      "commit": "bbf8ab504a68f7e971b7fa47b0bee3c3e022a480",
      "tree": "9d35d7fec6530a06546c7a1b2eef2aa22d2e37fa",
      "parents": [
        "aad2046b4d80e22ce1d1952cf700a4fe5379441f"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon May 11 11:54:30 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Mon May 11 11:54:30 2009 -0700"
      },
      "message": "Added command-line option \"-t\" to allow run-time switching between running and dumping.\n\nFixed some C++ warnings reported by g++ .\nVerified that the compiler actually works when run on 32-bit Linux.\n"
    },
    {
      "commit": "77ae76eea9df695b66834b8df2a1060c7dad3eca",
      "tree": "6dd9dbeabfa777b9085aa15a725442ae0d346414",
      "parents": [
        "f6b5a531d80f1d1e0ecd7751c6695be3c3a556ec"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 19:59:24 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 19:59:24 2009 -0700"
      },
      "message": "converted to C++\n\nBase address of constant table changed, so had to update the \"-orig\" files.\n"
    },
    {
      "commit": "f6b5a531d80f1d1e0ecd7751c6695be3c3a556ec",
      "tree": "0126c60ecf996137be2ab688efce35ba50125174",
      "parents": [
        "e27bf3eb290c75704549b4a5eedda56079bac86e"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 19:16:42 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 19:16:42 2009 -0700"
      },
      "message": "Remove all gcc warnings.\n"
    },
    {
      "commit": "e27bf3eb290c75704549b4a5eedda56079bac86e",
      "tree": "ab3369789924caaaccecba8c2f9f51140b0e6443",
      "parents": [
        "16134598fba53a3a74c74a6a7f8da477d7033521"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 14:09:03 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 14:09:03 2009 -0700"
      },
      "message": "Replace acc.c with the contents of otccn.c, update tests.\n\nWe are no longer checking if the constant data is the same, just the\ngenerated code.\n"
    },
    {
      "commit": "16134598fba53a3a74c74a6a7f8da477d7033521",
      "tree": "67e5b20ae9ea8e635349f36a1826389a7cde306d",
      "parents": [
        "431055cc9bc2cab128f35cf4a4e776994e1ec38d"
      ],
      "author": {
        "name": "Fabrice Bellard",
        "email": "fabrice@bellard.org",
        "time": "Sun May 10 14:01:59 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Sun May 10 14:01:59 2009 -0700"
      },
      "message": "Original version of otccn.c from http://bellard.org/otcc/otccn.c\n"
    },
    {
      "commit": "431055cc9bc2cab128f35cf4a4e776994e1ec38d",
      "tree": "93ed15b7c92393cd5179728f3853523a760b2a44",
      "parents": [
        "7448a2ebb7ecf45cd1a5a5d6d61b14d0239cd258"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 19:50:15 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "More deobfuscation.\n"
    },
    {
      "commit": "7448a2ebb7ecf45cd1a5a5d6d61b14d0239cd258",
      "tree": "9e67caecd543454d040e23daf5162e5ad7b3853b",
      "parents": [
        "f0cbc92fc0ae19a7ce958807936152f8859b41b7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 18:33:45 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Converted code constants from decimal to hexidecimal.\n"
    },
    {
      "commit": "f0cbc92fc0ae19a7ce958807936152f8859b41b7",
      "tree": "161b1871178dba2464c80c1ba238b7ea337b4ac8",
      "parents": [
        "50791f546674826303d0b6abaf6ccd700307c4e8"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 16:35:13 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "More unobfuscation.\n"
    },
    {
      "commit": "50791f546674826303d0b6abaf6ccd700307c4e8",
      "tree": "6d09200423880fd415c3bb27bc5d93bb3346c3f8",
      "parents": [
        "d160530a586558c4e85422808ef488052e275fa0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 15:44:22 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Make our global variables static.\n"
    },
    {
      "commit": "d160530a586558c4e85422808ef488052e275fa0",
      "tree": "e4d07fdd496b1b9e78789641ba11c5d098ecc380",
      "parents": [
        "f54db02e5d298de73ff5884e9dd183e517da4220"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 15:26:24 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Got rid of all warnings. (Yeah, right.)\n"
    },
    {
      "commit": "f54db02e5d298de73ff5884e9dd183e517da4220",
      "tree": "f6b3e01d5937394ad3531a65300707e2b58ee944",
      "parents": [
        "ae54f1fba842ddd55b65a428333f0cec62a66fc0"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 15:18:32 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Add a simple regression test framework.\n"
    },
    {
      "commit": "ae54f1fba842ddd55b65a428333f0cec62a66fc0",
      "tree": "e38dac94c04728a5fc8d986661fa38e77b9e1941",
      "parents": [
        "883114867a8c8039227da6992b3be38ab43263a7"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 14:54:15 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Continue deobfuscation.\n\nAdd a license.\n\nIndent the code.\nAdd includes for external functions.\nImprove function prototypes.\nStart adding the correct type to things that are pointers.\nStart fixing compiler warnings.\n\nInstead of directly executing the compiled code (which only works on x86 Linux),\nwrite the internal compiler state to stdout. This makes it easier to test whether\nor not our refactoring is breaking anything.\n\nReturn a zero status on success.\n\nAdd error checking for a missing input file.\n"
    },
    {
      "commit": "883114867a8c8039227da6992b3be38ab43263a7",
      "tree": "89e9d7676425c99ebb5c6f96e9f5baa6ac4e1ea3",
      "parents": [
        "38aa39a200d48f34097051d46a74a3e16a73e48c"
      ],
      "author": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 13:57:37 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Start de-obfuscation process.\n"
    },
    {
      "commit": "38aa39a200d48f34097051d46a74a3e16a73e48c",
      "tree": "c92f94436f85db6e7b19117dc20ab8ba5f2498e9",
      "parents": [
        "e910ea596240d355a1e25b66f76fd8d8fdfbbba6"
      ],
      "author": {
        "name": "Fabrice Bellard",
        "email": "fabrice@bellard.org",
        "time": "Fri May 08 13:53:02 2009 -0700"
      },
      "committer": {
        "name": "Jack Palevich",
        "email": "jackpal@google.com",
        "time": "Fri May 08 20:30:47 2009 -0700"
      },
      "message": "Original freeware Obfuscated Tiny C Compiler.\n\nFrom http://bellard.org/otcc/otcc.c\n\nLicense from http://bellard.org/otcc:\n\nThe obfuscated OTCC and OTCCELF are freeware.\n"
    }
  ]
}
