)]}'
{
  "commit": "351be42e358f1185626de86dffc0e684dae3cf1f",
  "tree": "7d25dd7cf93d4a5f2d839f2b118e4e0de8258e0e",
  "parents": [
    "d1a5a8935922a626e8a7e7d53d2049087abaaa61"
  ],
  "author": {
    "name": "Ben Clayton",
    "email": "bclayton@google.com",
    "time": "Tue Apr 30 12:26:57 2019 +0100"
  },
  "committer": {
    "name": "Ben Clayton",
    "email": "bclayton@google.com",
    "time": "Fri May 03 20:58:40 2019 +0000"
  },
  "message": "Add traits for Reactor arguments and return types\n\nProvides a number of template trait types for Reactor primitive types:\n\nCToReactorT\u003cT\u003e transforms the C-type (T) into a suitable Reactor equivalent. Pointer types are now generalized, allowing for translations of T** types.\n\nIsRValue\u003cT\u003e::value and IsLValue\u003cT\u003e::value are true iff T is of the respective Reactor type.\n\nReactorType\u003cT\u003e resolves to the corresponding LValue Reactor type for T, where T can be a C-type, RValue or LValue.\n\nValueOf\u003cT\u003e returns a rr::Value* for a C-value, RValue or LValue. This is now used by a single definition of Return(), fixing bad type coercion which in turn produced illegal LLVM IR.\n\nCanBeUsedAsReturn\u003cT\u003e::value is true iff T can be used as a function return type.\nCanBeUsedAsParameter\u003cT\u003e::value is true iff T can be used as a function parameter type.\nFunction signatures are now statically checked that all parameter types and the return type are valid, providing a human readable error message if an invalid type is used (verified on gcc, clang and msvc).\n\nAdded a whole bunch of static asserts in ReactorUnitTests.cpp to sanity check the templates.\n\nBug: b/131914569\nChange-Id: I3267354d6a3f68545079365a657757969ec0047d\nReviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30455\nKokoro-Presubmit: kokoro \u003cnoreply+kokoro@google.com\u003e\nTested-by: Ben Clayton \u003cbclayton@google.com\u003e\nReviewed-by: Nicolas Capens \u003cnicolascapens@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f079f328e9ae8a3aa4485cc065e2274176f861d9",
      "old_mode": 33188,
      "old_path": "src/Reactor/Reactor.cpp",
      "new_id": "56ab1da7193dbe3ebf33c95df4688f1528ca5461",
      "new_mode": 33188,
      "new_path": "src/Reactor/Reactor.cpp"
    },
    {
      "type": "modify",
      "old_id": "82fa23a367bb5d52279afe1b3d7fd5d61a388120",
      "old_mode": 33188,
      "old_path": "src/Reactor/Reactor.hpp",
      "new_id": "d201904f23153a86e63d7ee1f0ab49bbeb35247f",
      "new_mode": 33188,
      "new_path": "src/Reactor/Reactor.hpp"
    },
    {
      "type": "modify",
      "old_id": "b52b722d92bfce67b80329bff9310aa1788f70dd",
      "old_mode": 33188,
      "old_path": "src/Reactor/ReactorUnitTests.cpp",
      "new_id": "81c3700c00820129a369399b409217877bf3e505",
      "new_mode": 33188,
      "new_path": "src/Reactor/ReactorUnitTests.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ce6ac340e853c498ea0008a4b7afbef98175de2a",
      "new_mode": 33188,
      "new_path": "src/Reactor/Traits.hpp"
    }
  ]
}
