)]}'
{"id":"depot~7558","triplet_id":"depot~canon~I27d4c4b5c5f9be90ac47f2db61941e123a78a77b","project":"depot","branch":"canon","attention_set":{},"removed_from_attention_set":{"1000066":{"account":{"_account_id":1000066,"name":"Adam Joseph","display_name":"amjoseph","email":"adam@westernsemico.com","username":"amjoseph"},"last_update":"2022-12-21 22:21:25.000000000","reason":"Change was submitted"},"1000034":{"account":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"last_update":"2022-12-21 22:21:25.000000000","reason":"Change was submitted"},"1000001":{"account":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"last_update":"2022-12-21 22:21:16.000000000","reason":"\u003cGERRIT_ACCOUNT_1000001\u003e replied on the change","reason_account":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}},"1000036":{"account":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"last_update":"2022-12-21 22:21:25.000000000","reason":"Change was submitted"},"1000010":{"account":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"last_update":"2022-12-21 13:36:37.000000000","reason":"removed on reply"}},"hashtags":[],"change_id":"I27d4c4b5c5f9be90ac47f2db61941e123a78a77b","subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","status":"MERGED","created":"2022-12-11 12:18:38.000000000","updated":"2022-12-21 22:21:25.000000000","submitted":"2022-12-21 22:21:25.000000000","submitter":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"7558","meta_rev_id":"62cd06c4fbad25a577ad532b8d534b940b5160e7","_number":7558,"virtual_id_number":7558,"owner":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"actions":{},"labels":{"Code-Review":{"approved":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"all":[{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"tag":"autogenerated:gerrit:merged","value":2,"date":"2022-12-21 22:21:25.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-2":"This shall not be merged","-1":"I would prefer this is not merged as is"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me, approved"},"description":"","default_value":0},"Verified":{"approved":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"tag":"autogenerated:gerrit:merged","value":1,"date":"2022-12-21 22:21:25.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{"-1":"Fails"," 0":"No score","+1":"Verified"},"description":"","default_value":0},"Autosubmit":{"all":[{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}],"values":{" 0":"Submit manually","+1":"Submit automatically"},"description":"","default_value":0,"optional":true},"All-Comments-Resolved":{"approved":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"all":[{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]},"Conformant-Commit-Message":{"approved":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"all":[{"value":0,"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"value":0,"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"value":0,"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}]}},"removable_reviewers":[{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"_account_id":1000066,"name":"Adam Joseph","display_name":"amjoseph","email":"adam@westernsemico.com","username":"amjoseph"},{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"}],"reviewers":{"REVIEWER":[{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},{"_account_id":1000066,"name":"Adam Joseph","display_name":"amjoseph","email":"adam@westernsemico.com","username":"amjoseph"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2022-12-11 12:18:39.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2022-12-11 12:21:35.000000000","updated_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"reviewer":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2022-12-16 15:34:26.000000000","updated_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"reviewer":{"_account_id":1000066,"name":"Adam Joseph","display_name":"amjoseph","email":"adam@westernsemico.com","username":"amjoseph"},"state":"REVIEWER"},{"updated":"2022-12-16 15:34:26.000000000","updated_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"reviewer":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"state":"REVIEWER"},{"updated":"2022-12-16 15:34:26.000000000","updated_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"reviewer":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"state":"REVIEWER"},{"updated":"2022-12-16 15:34:26.000000000","updated_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"reviewer":{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"},"state":"REVIEWER"}],"messages":[{"id":"6023731767b9d044abfd522462fefd9b5dcc0bc5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-11 12:18:38.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"0fca4e2366bc6257aaf75b71ee1b407b3e9ac531","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-11 12:18:39.000000000","message":"Patch Set 1:\n\nStarted build for patchset #1 on: https://buildkite.com/tvl/depot/builds/19312","accounts_in_message":[],"_revision_number":1},{"id":"7db1a99056a36bcdbcc7ac2213b68e5cae96cfc2","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-11 12:21:35.000000000","message":"Patch Set 1: Verified+1\n\nBuild of patchset 1 passed: https://buildkite.com/tvl/depot/builds/19312","accounts_in_message":[],"_revision_number":1},{"id":"d2d25fba1458d5684351ac072cb579939ff2efe0","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-12 09:14:35.000000000","message":"Uploaded patch set 2: Patch Set 1 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":2},{"id":"9de3031c50fcc67b9a1008e9c4fc318225c947d4","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 09:14:52.000000000","message":"Patch Set 2:\n\nStarted build for patchset #2 on: https://buildkite.com/tvl/depot/builds/19331","accounts_in_message":[],"_revision_number":2},{"id":"f22d29c5020a04ae9fbe3db5817abcca9c400da9","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 09:21:19.000000000","message":"Patch Set 2: Verified+1\n\nBuild of patchset 2 passed: https://buildkite.com/tvl/depot/builds/19331","accounts_in_message":[],"_revision_number":2},{"id":"7a633f6e7d5adcd1483740866ff4f46dcb46a12c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-12 11:09:16.000000000","message":"Uploaded patch set 3: Patch Set 2 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":3},{"id":"82a24a4f5086412e7155aed2b0b747b9ef7a2913","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 11:09:30.000000000","message":"Patch Set 3:\n\nStarted build for patchset #3 on: https://buildkite.com/tvl/depot/builds/19354","accounts_in_message":[],"_revision_number":3},{"id":"a5151e63ba8183cb98ee364f85f2c69f21f64801","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 11:16:08.000000000","message":"Patch Set 3: Verified+1\n\nBuild of patchset 3 passed: https://buildkite.com/tvl/depot/builds/19354","accounts_in_message":[],"_revision_number":3},{"id":"cfd75322a34ae526783a52d63750ca0a4d4b3474","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-12 21:14:47.000000000","message":"Uploaded patch set 4: Patch Set 3 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":4},{"id":"31dfa304e8ef8d1dda0d3c834cece0363b958c4c","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 21:15:10.000000000","message":"Patch Set 4:\n\nStarted build for patchset #4 on: https://buildkite.com/tvl/depot/builds/19410","accounts_in_message":[],"_revision_number":4},{"id":"033b38d5787379e37ab89482742260285c94551e","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-12 21:22:34.000000000","message":"Patch Set 4: Verified+1\n\nBuild of patchset 4 passed: https://buildkite.com/tvl/depot/builds/19410","accounts_in_message":[],"_revision_number":4},{"id":"4572d07eeb523da57fa39e716b5df1a9b8509836","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-15 17:39:08.000000000","message":"Uploaded patch set 5: Patch Set 4 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":5},{"id":"f619dd79c63badc52949321bc350beb4d3b625f0","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-15 17:39:35.000000000","message":"Patch Set 5:\n\nStarted build for patchset #5 on: https://buildkite.com/tvl/depot/builds/19451","accounts_in_message":[],"_revision_number":5},{"id":"f8db224dc7a92683303e85b77e36997dc84a432b","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-15 17:45:22.000000000","message":"Patch Set 5: Verified+1\n\nBuild of patchset 5 passed: https://buildkite.com/tvl/depot/builds/19451","accounts_in_message":[],"_revision_number":5},{"id":"56b17992b4e31f7cf80d9e8b7cd8ebffff50942a","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 12:03:49.000000000","message":"Uploaded patch set 6: Patch Set 5 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":6},{"id":"c0d380c703820946b20c8ef5dbdcc7abe3208808","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 12:04:04.000000000","message":"Patch Set 6:\n\nStarted build for patchset #6 on: https://buildkite.com/tvl/depot/builds/19540","accounts_in_message":[],"_revision_number":6},{"id":"efe689863c7ffb546f4c159bb0c9459e9c6089eb","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 12:09:38.000000000","message":"Patch Set 6: Verified-1\n\nBuild of patchset 6 failed: https://buildkite.com/tvl/depot/builds/19540","accounts_in_message":[],"_revision_number":6},{"id":"0e47cbb9d801219e2b77d570476e7cd1e98bcc26","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 12:14:54.000000000","message":"Uploaded patch set 7: Patch Set 6 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":7},{"id":"8265c719fb1d97440266de8940eecfd753a49525","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 12:15:06.000000000","message":"Patch Set 7:\n\nStarted build for patchset #7 on: https://buildkite.com/tvl/depot/builds/19567","accounts_in_message":[],"_revision_number":7},{"id":"862d8896af1df897daf7eac4cb55583a14695b16","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 12:20:15.000000000","message":"Patch Set 7: Verified-1\n\nBuild of patchset 7 failed: https://buildkite.com/tvl/depot/builds/19567","accounts_in_message":[],"_revision_number":7},{"id":"2453f7708cc639f217803b21c01422fbee7b7b7c","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 13:18:03.000000000","message":"Uploaded patch set 8: Patch Set 7 was rebased.\n\nOutdated Votes:\n* Verified-1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":8},{"id":"668df5c11a9fea3f709387a70e929741b79aa4e4","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 13:18:18.000000000","message":"Patch Set 8:\n\nStarted build for patchset #8 on: https://buildkite.com/tvl/depot/builds/19596","accounts_in_message":[],"_revision_number":8},{"id":"6d0fa57286323a6a462ed895ac86ec4932ad57d0","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-16 13:27:24.000000000","message":"Patch Set 8: Verified+1\n\nBuild of patchset 8 passed: https://buildkite.com/tvl/depot/builds/19596","accounts_in_message":[],"_revision_number":8},{"id":"778e5bf0e104e283fc62a560afb39b14aecb894b","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 15:34:26.000000000","message":"Uploaded patch set 9: New patch set was added with same tree, parent tree, and commit message as Patch Set 8.\n\nCopied Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":9},{"id":"3de85e168ab5f75dfb4a0841da76ada3baac4779","tag":"autogenerated:gerrit:code-owners:addReviewer","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 15:34:26.000000000","message":"\u003cGERRIT_ACCOUNT_1000034\u003e, who was added as reviewer owns the following files:\n* tvix/eval/src/builtins/impure.rs\n* tvix/eval/src/compiler/mod.rs\n* tvix/eval/src/spans.rs\n* tvix/eval/src/value/thunk.rs\n* tvix/eval/src/vm.rs\n","accounts_in_message":[{"_account_id":1000034,"name":"sterni","email":"sternenseemann@systemli.org","username":"sterni"}],"_revision_number":9},{"id":"2e416dbd4befb4903be10b14b3b83b2ae5bccdc1","tag":"autogenerated:gerrit:code-owners:addReviewer","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 15:34:26.000000000","message":"\u003cGERRIT_ACCOUNT_1000010\u003e, who was added as reviewer owns the following files:\n* tvix/eval/src/builtins/impure.rs\n* tvix/eval/src/compiler/mod.rs\n* tvix/eval/src/spans.rs\n* tvix/eval/src/value/thunk.rs\n* tvix/eval/src/vm.rs\n","accounts_in_message":[{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"}],"_revision_number":9},{"id":"a0a670914418a47e592466a41c0e18dcfa0513cc","tag":"autogenerated:gerrit:code-owners:addReviewer","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-16 15:34:26.000000000","message":"\u003cGERRIT_ACCOUNT_1000036\u003e, who was added as reviewer owns the following files:\n* tvix/eval/src/builtins/impure.rs\n* tvix/eval/src/compiler/mod.rs\n* tvix/eval/src/spans.rs\n* tvix/eval/src/value/thunk.rs\n* tvix/eval/src/vm.rs\n","accounts_in_message":[{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"}],"_revision_number":9},{"id":"533bfd85d103c83ca170ef74231355ddd97c2cae","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-18 15:50:33.000000000","message":"Uploaded patch set 10: Patch Set 9 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":10},{"id":"f853c38fd109033150c99676fea90a97c5c0b7de","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-18 15:50:51.000000000","message":"Patch Set 10:\n\nStarted build for patchset #10 on: https://buildkite.com/tvl/depot/builds/19625","accounts_in_message":[],"_revision_number":10},{"id":"3dd6d59538700574186625b4193ec0e3920f3c82","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-18 15:58:07.000000000","message":"Patch Set 10: Verified+1\n\nBuild of patchset 10 passed: https://buildkite.com/tvl/depot/builds/19625","accounts_in_message":[],"_revision_number":10},{"id":"2fde8ceb1d900c13b2693a428ca631cee2e3315f","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-20 15:44:41.000000000","message":"Uploaded patch set 11: Patch Set 10 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":11},{"id":"2a01483cb15ed4c6277b84c3478b093ac04f1daf","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-20 15:44:59.000000000","message":"Patch Set 11:\n\nStarted build for patchset #11 on: https://buildkite.com/tvl/depot/builds/19669","accounts_in_message":[],"_revision_number":11},{"id":"dd36cd35a440cf046d0224f1e8ce0277bad183d2","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-20 15:53:36.000000000","message":"Patch Set 11: Verified+1\n\nBuild of patchset 11 passed: https://buildkite.com/tvl/depot/builds/19669","accounts_in_message":[],"_revision_number":11},{"id":"c6b65e35f5d2907f967df11bc1d7a1532d4894e2","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 13:10:03.000000000","message":"Uploaded patch set 12: Patch Set 11 was rebased.\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":12},{"id":"6280f52cc6df07b15d11367164ccf63696792054","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 13:10:18.000000000","message":"Patch Set 12:\n\nStarted build for patchset #12 on: https://buildkite.com/tvl/depot/builds/19736","accounts_in_message":[],"_revision_number":12},{"id":"8ff09a08c2fdbd59508f0511723908153bf6f1d3","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 13:19:08.000000000","message":"Patch Set 12: Verified+1\n\nBuild of patchset 12 passed: https://buildkite.com/tvl/depot/builds/19736","accounts_in_message":[],"_revision_number":12},{"id":"e2a052aa964c3dbb7cce6018ff3dfa873e99acf5","author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"date":"2022-12-21 13:36:37.000000000","message":"Patch Set 12: Code-Review+2\n\n(2 comments)\n\nBy voting Code-Review+2 the following files are now code-owner approved by \u003cGERRIT_ACCOUNT_1000010\u003e:\n* tvix/eval/src/builtins/impure.rs\n* tvix/eval/src/compiler/mod.rs\n* tvix/eval/src/spans.rs\n* tvix/eval/src/value/thunk.rs\n* tvix/eval/src/vm.rs\n","accounts_in_message":[{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"}],"_revision_number":12},{"id":"7784b060c6400900b0a051400ce8150845a376d5","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 14:31:06.000000000","message":"Uploaded patch set 13: Patch Set 12 was rebased.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"((is:ANY AND has:unchanged-files) OR is:MIN) OR changekind:NO_CHANGE\")\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":13},{"id":"f6f2d4eaa140e865e2bff6c801229d4257174b45","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 14:31:12.000000000","message":"Patch Set 13:\n\nStarted build for patchset #13 on: https://buildkite.com/tvl/depot/builds/19850","accounts_in_message":[],"_revision_number":13},{"id":"b0f71829e98d30c9796b09f567a3ccb7cb6a5c0e","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 14:34:27.000000000","message":"Patch Set 13: Verified-1\n\nBuild of patchset 13 failed: https://buildkite.com/tvl/depot/builds/19850","accounts_in_message":[],"_revision_number":13},{"id":"53840d691a3a03306503c1ef4749d80eb34262ee","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 14:39:11.000000000","message":"Uploaded patch set 14: Patch Set 13 was rebased.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"((is:ANY AND has:unchanged-files) OR is:MIN) OR changekind:NO_CHANGE\")\n\nOutdated Votes:\n* Verified-1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":14},{"id":"d9cd2e9c48c187511aaa05be1fdac7b941e6941a","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 14:39:19.000000000","message":"Patch Set 14:\n\nStarted build for patchset #14 on: https://buildkite.com/tvl/depot/builds/19875","accounts_in_message":[],"_revision_number":14},{"id":"c13c20973de722f61d1c202c02a4e51b635aa76f","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 14:44:28.000000000","message":"Patch Set 14: Verified+1\n\nBuild of patchset 14 passed: https://buildkite.com/tvl/depot/builds/19875","accounts_in_message":[],"_revision_number":14},{"id":"4b7ad992455f55ed4d36f1ced573ed45a774736d","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 21:37:28.000000000","message":"Uploaded patch set 15: Patch Set 14 was rebased.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"((is:ANY AND has:unchanged-files) OR is:MIN) OR changekind:NO_CHANGE\")\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":15},{"id":"9a8a098bc9cdf76054b415a3804bb7d855843756","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 21:37:35.000000000","message":"Patch Set 15:\n\nStarted build for patchset #15 on: https://buildkite.com/tvl/depot/builds/19968","accounts_in_message":[],"_revision_number":15},{"id":"ed15569a8771bea4350dd202799d34d4781e6f3a","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 21:40:42.000000000","message":"Patch Set 15: Verified+1\n\nBuild of patchset 15 passed: https://buildkite.com/tvl/depot/builds/19968","accounts_in_message":[],"_revision_number":15},{"id":"b96e62395f3a94ec674289257cd768bcb9fb3734","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 22:12:41.000000000","message":"Uploaded patch set 16.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"((is:ANY AND has:unchanged-files) OR is:MIN) OR changekind:NO_CHANGE\")\n\nOutdated Votes:\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":16},{"id":"da290813f8f0af7ab9e6e12fd4f9689c002f91fd","tag":"autogenerated:buildkite~trigger","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 22:12:42.000000000","message":"Patch Set 16:\n\nStarted build for patchset #16 on: https://buildkite.com/tvl/depot/builds/19990","accounts_in_message":[],"_revision_number":16},{"id":"0026364c7c45b2e75142796cf7280b9372db6464","tag":"autogenerated:buildkite~result","author":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]},"date":"2022-12-21 22:15:36.000000000","message":"Patch Set 16: Verified+1\n\nBuild of patchset 16 passed: https://buildkite.com/tvl/depot/builds/19990","accounts_in_message":[],"_revision_number":16},{"id":"3d364e52ec9524925f13f36a80b70300e7d87aa3","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 22:20:50.000000000","message":"Uploaded patch set 17: Commit message was updated.\n\nCopied Votes:\n* Code-Review+2 (copy condition: \"((is:ANY AND has:unchanged-files) OR is:MIN) OR changekind:NO_CHANGE\")\n* Verified+1 (copy condition: \"(is:ANY AND changekind:NO_CODE_CHANGE) OR changekind:NO_CHANGE\")\n","accounts_in_message":[],"_revision_number":17},{"id":"194fa2bccf2c887602895b8d4b7c34aaa8698d9f","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 22:21:16.000000000","message":"Patch Set 16:\n\n(2 comments)","accounts_in_message":[],"_revision_number":16},{"id":"62cd06c4fbad25a577ad532b8d534b940b5160e7","tag":"autogenerated:gerrit:merged","author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"date":"2022-12-21 22:21:25.000000000","message":"Change has been successfully rebased and submitted as bf286a54bc2ac5eeb78c3d5c5ae66e9af24d74d4\n\n12 is the latest approved patch-set.\nThe change was submitted with unreviewed changes in the following files:\n\n```\nThe name of the file: tvix/eval/src/value/thunk.rs\nInsertions: 10, Deletions: 60.\n\n@@ -30,7 +30,7 @@\n     spans::LightSpan,\n     upvalues::Upvalues,\n     value::{Builtin, Closure},\n-    vm::{Tramp, TrampAction, VM},\n+    vm::VM,\n     Value,\n };\n \n@@ -72,8 +72,6 @@\n             Rc::new(Closure {\n                 upvalues: Rc::new(Upvalues::with_capacity(lambda.upvalue_count)),\n                 lambda: lambda.clone(),\n-                //#[cfg(debug_assertions)]\n-                //is_finalised: false,\n             }),\n         )))))\n     }\n@@ -86,6 +84,10 @@\n         })))\n     }\n \n+    /// Create a new thunk from suspended Rust code.\n+    ///\n+    /// The suspended code will be executed and expected to return a\n+    /// value whenever the thunk is forced like any other thunk.\n     pub fn new_suspended_native(\n         native: Rc\u003cBox\u003cdyn Fn(\u0026mut VM) -\u003e Result\u003cValue, ErrorKind\u003e\u003e\u003e,\n     ) -\u003e Self {\n@@ -101,7 +103,7 @@\n             None,\n             move |v: Vec\u003cValue\u003e, vm: \u0026mut VM| {\n                 // sanity check that only the dummy argument was popped\n-                assert!(v.len() \u003d\u003d 1);\n+                assert_eq!(v.len(), 1);\n                 assert!(matches!(v[0], Value::Null));\n                 native(vm)\n             },\n@@ -125,113 +127,41 @@\n         })))\n     }\n \n-    pub fn new_blackhole() -\u003e Self {\n-        Thunk(Rc::new(RefCell::new(ThunkRepr::Blackhole)))\n-    }\n-\n-    pub fn fill_blackhole(\u0026mut self, v: Value) {\n-        let should_be_blackhole \u003d self.0.replace(ThunkRepr::Evaluated(v));\n-        debug_assert!(matches!(should_be_blackhole, ThunkRepr::Blackhole));\n-    }\n-\n-    /// Force a thunk from a context that can\u0027t handle trampoline\n-    /// continuations.  Calling `force_tramp()` instead should be\n-    /// preferred whenever possible.\n-    pub fn force(\u0026self, vm: \u0026mut VM) -\u003e Result\u003c(), ErrorKind\u003e {\n-        if self.is_forced() {\n-            return Ok(());\n-        }\n-        vm.push(Value::Thunk(self.clone()));\n-        let mut tramp \u003d Self::force_tramp(vm)?;\n-        loop {\n-            match tramp.action {\n-                None \u003d\u003e (),\n-                Some(TrampAction::EnterFrame {\n-                    lambda,\n-                    upvalues,\n-                    arg_count,\n-                    light_span: _,\n-                }) \u003d\u003e vm.enter_frame(lambda, upvalues, arg_count)?,\n-            }\n-            match tramp.cont {\n-                None \u003d\u003e break (),\n-                Some(cont) \u003d\u003e {\n-                    tramp \u003d cont(vm)?;\n-                    continue;\n-                }\n-            }\n-        }\n-        vm.pop();\n-        Ok(())\n-    }\n-\n     /// Evaluate the content of a thunk, potentially repeatedly, until a\n     /// non-thunk value is returned.\n     ///\n     /// This will change the existing thunk (and thus all references to it,\n     /// providing memoization) through interior mutability. In case of nested\n     /// thunks, the intermediate thunk representations are replaced.\n-    ///\n-    /// The thunk to be forced should be at the top of the VM stack,\n-    /// and will be left there (but possibly partially forced) when\n-    /// this function returns.\n-    pub fn force_tramp(vm: \u0026mut VM) -\u003e Result\u003cTramp, ErrorKind\u003e {\n-        match vm.pop() {\n-            Value::Thunk(thunk) /*if !thunk.is_forced()*/ \u003d\u003e\n-                return thunk.force_tramp_self(vm),\n-            v \u003d\u003e {\n-                vm.push(v);\n-                return Ok(Tramp::default());\n-            }\n-        }\n-    }\n-\n-    fn force_tramp_self(\u0026self, vm: \u0026mut VM) -\u003e Result\u003cTramp, ErrorKind\u003e {\n+    pub fn force(\u0026self, vm: \u0026mut VM) -\u003e Result\u003c(), ErrorKind\u003e {\n         loop {\n-            if !self.is_suspended() {\n-                let thunk \u003d self.0.borrow();\n-                match *thunk {\n-                    ThunkRepr::Evaluated(Value::Thunk(ref inner_thunk)) \u003d\u003e {\n-                        let inner_repr \u003d inner_thunk.0.borrow().clone();\n-                        drop(thunk);\n-                        self.0.replace(inner_repr);\n-                    }\n+            let mut thunk_mut \u003d self.0.borrow_mut();\n \n-                    ThunkRepr::Evaluated(ref v) \u003d\u003e {\n-                        vm.push(v.clone());\n-                        return Ok(Tramp::default());\n-                    }\n-                    ThunkRepr::Blackhole \u003d\u003e return Err(ErrorKind::InfiniteRecursion),\n-                    _ \u003d\u003e panic!(\"impossible\"),\n+            match *thunk_mut {\n+                ThunkRepr::Evaluated(Value::Thunk(ref inner_thunk)) \u003d\u003e {\n+                    let inner_repr \u003d inner_thunk.0.borrow().clone();\n+                    *thunk_mut \u003d inner_repr;\n                 }\n-            } else {\n-                match self.0.replace(ThunkRepr::Blackhole) {\n-                    ThunkRepr::Suspended {\n+\n+                ThunkRepr::Evaluated(_) \u003d\u003e return Ok(()),\n+                ThunkRepr::Blackhole \u003d\u003e return Err(ErrorKind::InfiniteRecursion),\n+\n+                ThunkRepr::Suspended { .. } \u003d\u003e {\n+                    if let ThunkRepr::Suspended {\n                         lambda,\n                         upvalues,\n                         light_span,\n-                    } \u003d\u003e {\n-                        let self_clone \u003d self.clone();\n-                        return Ok(Tramp {\n-                            action: Some(TrampAction::EnterFrame {\n-                                lambda,\n-                                upvalues: upvalues.clone(),\n-                                arg_count: 0,\n-                                light_span: light_span.clone(),\n-                            }),\n-                            cont: Some(Box::new(move |vm| {\n-                                let should_be_blackhole \u003d\n-                                    self_clone.0.replace(ThunkRepr::Evaluated(vm.pop()));\n-                                assert!(matches!(should_be_blackhole, ThunkRepr::Blackhole));\n-                                vm.push(Value::Thunk(self_clone));\n-                                return Self::force_tramp(vm).map_err(|kind| Error {\n-                                    kind,\n-                                    span: light_span.span(),\n-                                });\n-                            })),\n-                        });\n+                    } \u003d std::mem::replace(\u0026mut *thunk_mut, ThunkRepr::Blackhole)\n+                    {\n+                        drop(thunk_mut);\n+                        vm.enter_frame(lambda, upvalues, 0).map_err(|e| {\n+                            ErrorKind::ThunkForce(Box::new(Error {\n+                                span: light_span.span(),\n+                                ..e\n+                            }))\n+                        })?;\n+                        (*self.0.borrow_mut()) \u003d ThunkRepr::Evaluated(vm.pop())\n                     }\n-                    _ \u003d\u003e panic!(\"impossible\"),\n                 }\n             }\n         }\n@@ -239,35 +169,12 @@\n \n     pub fn finalise(\u0026self, stack: \u0026[Value]) {\n         self.upvalues_mut().resolve_deferred_upvalues(stack);\n-        /*\n-        #[cfg(debug_assertions)]\n-        {\n-            let inner: \u0026mut ThunkRepr \u003d \u0026mut self.0.as_ref().borrow_mut();\n-            if let ThunkRepr::Evaluated(Value::Closure(_c)) \u003d inner {\n-                c.is_finalised \u003d true;\n-            }\n-        }\n-        */\n     }\n \n     pub fn is_evaluated(\u0026self) -\u003e bool {\n         matches!(*self.0.borrow(), ThunkRepr::Evaluated(_))\n     }\n \n-    pub fn is_suspended(\u0026self) -\u003e bool {\n-        matches!(*self.0.borrow(), ThunkRepr::Suspended { .. })\n-    }\n-\n-    /// Returns true if forcing this thunk will not change it.\n-    pub fn is_forced(\u0026self) -\u003e bool {\n-        match *self.0.borrow() {\n-            ThunkRepr::Blackhole \u003d\u003e panic!(\"is_forced() called on a blackholed thunk\"),\n-            ThunkRepr::Evaluated(Value::Thunk(_)) \u003d\u003e false,\n-            ThunkRepr::Evaluated(_) \u003d\u003e true,\n-            _ \u003d\u003e false,\n-        }\n-    }\n-\n     /// Returns a reference to the inner evaluated value of a thunk.\n     /// It is an error to call this on a thunk that has not been\n     /// forced, or is not otherwise known to be fully evaluated.\n@@ -276,21 +183,7 @@\n     // API too much.\n     pub fn value(\u0026self) -\u003e Ref\u003cValue\u003e {\n         Ref::map(self.0.borrow(), |thunk| match thunk {\n-            ThunkRepr::Evaluated(value) \u003d\u003e {\n-                /*\n-                #[cfg(debug_assertions)]\n-                if matches!(\n-                    value,\n-                    Value::Closure(Closure {\n-                        is_finalised: false,\n-                        ..\n-                    })\n-                ) {\n-                    panic!(\"Thunk::value called on an unfinalised closure\");\n-                }\n-                */\n-                return value;\n-            }\n+            ThunkRepr::Evaluated(value) \u003d\u003e value,\n             ThunkRepr::Blackhole \u003d\u003e panic!(\"Thunk::value called on a black-holed thunk\"),\n             ThunkRepr::Suspended { .. } \u003d\u003e panic!(\"Thunk::value called on a suspended thunk\"),\n         })\n```\n```\nThe name of the file: tvix/eval/src/vm.rs\nInsertions: 6, Deletions: 65.\n\n@@ -17,44 +17,6 @@\n     warnings::{EvalWarning, WarningKind},\n };\n \n-/// Representation of a VM continuation;\n-/// see: https://en.wikipedia.org/wiki/Continuation-passing_style#CPS_in_Haskell\n-type Cont \u003d Box\u003cdyn FnOnce(\u0026mut VM) -\u003e EvalResult\u003cTramp\u003e\u003e;\n-\n-#[must_use \u003d \"this `Tramp` may be a continuation request, which should be handled\"]\n-#[derive(Default)]\n-pub struct Tramp {\n-    /// The action to perform upon return to the trampoline\n-    pub action: Option\u003cTrampAction\u003e,\n-\n-    /// The continuation to execute after the action has completed\n-    pub cont: Option\u003cBox\u003cdyn FnOnce(\u0026mut VM) -\u003e EvalResult\u003cTramp\u003e\u003e\u003e,\n-}\n-\n-impl Tramp {\n-    pub fn append_to_continuation(self, f: Cont) -\u003e Self {\n-        Tramp {\n-            action: self.action,\n-            cont: match self.cont {\n-                None \u003d\u003e Some(f),\n-                Some(f0) \u003d\u003e Some(Box::new(move |vm| {\n-                    let tramp \u003d f0(vm)?;\n-                    Ok(tramp.append_to_continuation(f))\n-                })),\n-            },\n-        }\n-    }\n-}\n-\n-pub enum TrampAction {\n-    EnterFrame {\n-        lambda: Rc\u003cLambda\u003e,\n-        upvalues: Rc\u003cUpvalues\u003e,\n-        light_span: LightSpan,\n-        arg_count: usize,\n-    },\n-}\n-\n struct CallFrame {\n     /// The lambda currently being executed.\n     lambda: Rc\u003cLambda\u003e,\n@@ -69,8 +31,6 @@\n \n     /// Stack offset, i.e. the frames \"view\" into the VM\u0027s full stack.\n     stack_offset: usize,\n-\n-    cont: Option\u003cCont\u003e,\n }\n \n impl CallFrame {\n@@ -351,6 +311,7 @@\n         Ok(res)\n     }\n \n+    #[inline(always)]\n     fn tail_call_value(\u0026mut self, callable: Value) -\u003e EvalResult\u003c()\u003e {\n         match callable {\n             Value::Builtin(builtin) \u003d\u003e self.call_builtin(builtin),\n@@ -388,8 +349,8 @@\n         }\n     }\n \n-    /// Execute the given lambda in this VM\u0027s context, leaving the\n-    /// computed value on its stack after the frame completes.\n+    /// Execute the given lambda in this VM\u0027s context, returning its\n+    /// value after its stack frame completes.\n     pub fn enter_frame(\n         \u0026mut self,\n         lambda: Rc\u003cLambda\u003e,\n@@ -404,33 +365,10 @@\n             upvalues,\n             ip: CodeIdx(0),\n             stack_offset: self.stack.len() - arg_count,\n-            cont: None,\n         };\n \n-        let starting_frames_depth \u003d self.frames.len();\n         self.frames.push(frame);\n-\n-        let result \u003d loop {\n-            let op \u003d self.inc_ip();\n-\n-            self.observer\n-                .observe_execute_op(self.frame().ip, \u0026op, \u0026self.stack);\n-\n-            let res \u003d self.run_op(op);\n-\n-            let mut retramp: Option\u003cCont\u003e \u003d None;\n-\n-            // we need to pop the frame before checking `res` for an\n-            // error in order to implement `tryEval` correctly.\n-            if self.frame().ip.0 \u003d\u003d self.chunk().code.len() {\n-                let frame \u003d self.frames.pop();\n-                retramp \u003d frame.map(|frame| frame.cont).flatten();\n-            }\n-            self.tramp_loop(res?, retramp)?;\n-            if self.frames.len() \u003d\u003d starting_frames_depth {\n-                break Ok(());\n-            }\n-        };\n+        let result \u003d self.run();\n \n         self.observer\n             .observe_exit_frame(self.frames.len() + 1, \u0026self.stack);\n@@ -438,52 +376,35 @@\n         result\n     }\n \n-    fn tramp_loop(\u0026mut self, mut tramp: Tramp, mut retramp: Option\u003cCont\u003e) -\u003e EvalResult\u003c()\u003e {\n+    /// Run the VM\u0027s current call frame to completion.\n+    ///\n+    /// On successful return, the top of the stack is the value that\n+    /// the frame evaluated to. The frame itself is popped off. It is\n+    /// up to the caller to consume the value.\n+    fn run(\u0026mut self) -\u003e EvalResult\u003c()\u003e {\n         loop {\n-            match tramp.action {\n-                None \u003d\u003e (),\n-                Some(TrampAction::EnterFrame {\n-                    lambda,\n-                    upvalues,\n-                    arg_count,\n-                    light_span: _,\n-                }) \u003d\u003e {\n-                    let frame \u003d CallFrame {\n-                        lambda,\n-                        upvalues,\n-                        ip: CodeIdx(0),\n-                        stack_offset: self.stack.len() - arg_count,\n-                        cont: match retramp {\n-                            None \u003d\u003e tramp.cont,\n-                            Some(retramp) \u003d\u003e match tramp.cont {\n-                                None \u003d\u003e None,\n-                                Some(cont) \u003d\u003e Some(Box::new(|vm| {\n-                                    Ok(cont(vm)?.append_to_continuation(retramp))\n-                                })),\n-                            },\n-                        },\n-                    };\n-                    //assert!(matches!(retramp, None));\n-                    self.frames.push(frame);\n-                    break;\n-                }\n+            // Break the loop if this call frame has already run to\n+            // completion, pop it off, and return the value to the\n+            // caller.\n+            if self.frame().ip.0 \u003d\u003d self.chunk().code.len() {\n+                self.frames.pop();\n+                return Ok(());\n             }\n-            match tramp.cont {\n-                None \u003d\u003e {\n-                    let retramp_ \u003d std::mem::replace(\u0026mut retramp, None);\n-                    if let Some(cont) \u003d retramp_ {\n-                        tramp \u003d cont(self)?;\n-                    } else {\n-                        break;\n-                    }\n-                }\n-                Some(cont) \u003d\u003e {\n-                    tramp \u003d cont(self)?;\n-                    continue;\n-                }\n+\n+            let op \u003d self.inc_ip();\n+\n+            self.observer\n+                .observe_execute_op(self.frame().ip, \u0026op, \u0026self.stack);\n+\n+            let res \u003d self.run_op(op);\n+\n+            if self.frame().ip.0 \u003d\u003d self.chunk().code.len() {\n+                self.frames.pop();\n+                return res;\n+            } else {\n+                res?;\n             }\n         }\n-        Ok(())\n     }\n \n     pub(crate) fn nix_eq(\n@@ -494,8 +415,7 @@\n     ) -\u003e EvalResult\u003cbool\u003e {\n         self.push(v1);\n         self.push(v2);\n-        let res \u003d self.nix_op_eq(allow_top_level_pointer_equality_on_functions_and_thunks);\n-        self.tramp_loop(res?, None)?;\n+        self.nix_op_eq(allow_top_level_pointer_equality_on_functions_and_thunks)?;\n         match self.pop() {\n             Value::Bool(b) \u003d\u003e Ok(b),\n             v \u003d\u003e panic!(\"run_op(OpEqual) left a non-boolean on the stack: {v:#?}\"),\n@@ -505,7 +425,7 @@\n     pub(crate) fn nix_op_eq(\n         \u0026mut self,\n         allow_top_level_pointer_equality_on_functions_and_thunks: bool,\n-    ) -\u003e EvalResult\u003cTramp\u003e {\n+    ) -\u003e EvalResult\u003c()\u003e {\n         // This bit gets set to `true` (if it isn\u0027t already) as soon\n         // as we start comparing the contents of two\n         // {lists,attrsets} -- but *not* the contents of two thunks.\n@@ -633,10 +553,10 @@\n         };\n         self.pop_then_drop(numpairs * 2);\n         self.push(Value::Bool(res));\n-        Ok(Tramp::default())\n+        Ok(())\n     }\n \n-    pub(crate) fn run_op(\u0026mut self, op: OpCode) -\u003e EvalResult\u003cTramp\u003e {\n+    fn run_op(\u0026mut self, op: OpCode) -\u003e EvalResult\u003c()\u003e {\n         match op {\n             OpCode::OpConstant(idx) \u003d\u003e {\n                 let c \u003d self.chunk()[idx].clone();\n@@ -985,15 +905,14 @@\n             }\n \n             OpCode::OpForce \u003d\u003e {\n-                let value \u003d self.pop();\n+                let mut value \u003d self.pop();\n \n                 if let Value::Thunk(thunk) \u003d value {\n-                    self.push(Value::Thunk(thunk.clone()));\n-                    let tramp \u003d fallible!(self, Thunk::force_tramp(self));\n-                    return Ok(tramp);\n-                } else {\n-                    self.push(value);\n+                    fallible!(self, thunk.force(self));\n+                    value \u003d thunk.value().clone();\n                 }\n+\n+                self.push(value);\n             }\n \n             OpCode::OpFinalise(StackIdx(idx)) \u003d\u003e {\n@@ -1021,7 +940,7 @@\n             }\n         }\n \n-        Ok(Tramp::default())\n+        Ok(())\n     }\n \n     fn run_attrset(\u0026mut self, count: usize) -\u003e EvalResult\u003c()\u003e {\n```\n","accounts_in_message":[],"_revision_number":18}],"current_revision_number":18,"current_revision":"bf286a54bc2ac5eeb78c3d5c5ae66e9af24d74d4","revisions":{"1b14d1768152b32dcfdb4b14083eef783142e07d":{"kind":"REWORK","_number":1,"created":"2022-12-11 12:18:38.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/1","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/1","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/1"}}},"commit":{"parents":[{"commit":"27a7a7774420f75a42eb915de689cb92cc534cff","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d27a7a7774420f75a42eb915de689cb92cc534cff"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1b14d1768152b32dcfdb4b14083eef783142e07d"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1b14d1768152b32dcfdb4b14083eef783142e07d"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"27a7a7774420f75a42eb915de689cb92cc534cff","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":4,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"1de50db39d10d8356f8816ccf14f07982a5e6095":{"kind":"TRIVIAL_REBASE","_number":2,"created":"2022-12-12 09:14:35.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/2","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/2","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/2 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/2 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/2 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/2"}}},"commit":{"parents":[{"commit":"c06f55771532d35f3096cdd99080888d57505783","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dc06f55771532d35f3096cdd99080888d57505783"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-12 09:14:17.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1de50db39d10d8356f8816ccf14f07982a5e6095"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1de50db39d10d8356f8816ccf14f07982a5e6095"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"c06f55771532d35f3096cdd99080888d57505783","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":5,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"4fd649583df4f583204e056a472be259ad0d272d":{"kind":"TRIVIAL_REBASE","_number":3,"created":"2022-12-12 11:09:16.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/3","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/3","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/3 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/3 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/3 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/3"}}},"commit":{"parents":[{"commit":"780910570a0719d123dbd3c27458c2265dc9983c","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d780910570a0719d123dbd3c27458c2265dc9983c"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-12 11:09:12.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d4fd649583df4f583204e056a472be259ad0d272d"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d4fd649583df4f583204e056a472be259ad0d272d"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"780910570a0719d123dbd3c27458c2265dc9983c","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":6,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"a384a4d0c222d49e80cb6b85392266a66260657c":{"kind":"TRIVIAL_REBASE","_number":4,"created":"2022-12-12 21:14:47.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/4","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/4","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/4 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/4 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/4 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/4"}}},"commit":{"parents":[{"commit":"f51e2760626aad648b10a16bec7ce9b1e6d46b7b","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003df51e2760626aad648b10a16bec7ce9b1e6d46b7b"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-12 21:14:44.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da384a4d0c222d49e80cb6b85392266a66260657c"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da384a4d0c222d49e80cb6b85392266a66260657c"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"f51e2760626aad648b10a16bec7ce9b1e6d46b7b","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":7,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"9286901c54d59a32d7e3c4bc408747e5e6db9bc8":{"kind":"TRIVIAL_REBASE","_number":5,"created":"2022-12-15 17:39:08.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/5","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/5","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/5 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/5 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/5 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/5"}}},"commit":{"parents":[{"commit":"27846898b3ebcb9e95bd4305ff6648fb121b5703","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d27846898b3ebcb9e95bd4305ff6648fb121b5703"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-15 17:39:05.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d9286901c54d59a32d7e3c4bc408747e5e6db9bc8"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d9286901c54d59a32d7e3c4bc408747e5e6db9bc8"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"27846898b3ebcb9e95bd4305ff6648fb121b5703","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":8,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"b86b6ab90d066b26c77bf3a7c13221069146b3dc":{"kind":"TRIVIAL_REBASE","_number":6,"created":"2022-12-16 12:03:49.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/6","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/6","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/6 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/6 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/6 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/6"}}},"commit":{"parents":[{"commit":"30113f79d408f28664ddfaea9b28efd47f64457c","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d30113f79d408f28664ddfaea9b28efd47f64457c"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-16 12:02:18.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db86b6ab90d066b26c77bf3a7c13221069146b3dc"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db86b6ab90d066b26c77bf3a7c13221069146b3dc"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"30113f79d408f28664ddfaea9b28efd47f64457c","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":9,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"b79c383d4cb27b1ac90b8c0bd443ab42b9e15785":{"kind":"TRIVIAL_REBASE","_number":7,"created":"2022-12-16 12:14:54.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/7","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/7","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/7 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/7 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/7 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/7"}}},"commit":{"parents":[{"commit":"04e6af50a73a77b3e7d4f55f44653ecf21a8f37a","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d04e6af50a73a77b3e7d4f55f44653ecf21a8f37a"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-16 12:14:48.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db79c383d4cb27b1ac90b8c0bd443ab42b9e15785"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db79c383d4cb27b1ac90b8c0bd443ab42b9e15785"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"04e6af50a73a77b3e7d4f55f44653ecf21a8f37a","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":10,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"973e510b316a5f63e1cae1d105f45c62b7f3739d":{"kind":"TRIVIAL_REBASE","_number":8,"created":"2022-12-16 13:18:03.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/8","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/8","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/8 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/8 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/8 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/8"}}},"commit":{"parents":[{"commit":"30810cb451ca4337f90d6a99c0da6bee144125fd","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d30810cb451ca4337f90d6a99c0da6bee144125fd"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-16 13:17:11.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d973e510b316a5f63e1cae1d105f45c62b7f3739d"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d973e510b316a5f63e1cae1d105f45c62b7f3739d"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"30810cb451ca4337f90d6a99c0da6bee144125fd","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":11,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"b4bc84b50a52bf92e91f38cbdef828d4fe2fe419":{"kind":"NO_CHANGE","_number":9,"created":"2022-12-16 15:34:26.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/9","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/9","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/9 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/9 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/9 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/9"}}},"commit":{"parents":[{"commit":"a371c247befb4f92000eca3c5e8aad7c31c11b80","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003da371c247befb4f92000eca3c5e8aad7c31c11b80"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-16 15:31:27.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db4bc84b50a52bf92e91f38cbdef828d4fe2fe419"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003db4bc84b50a52bf92e91f38cbdef828d4fe2fe419"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"a371c247befb4f92000eca3c5e8aad7c31c11b80","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":12,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"88b4fc8e79e426384c4eb6c07407696645bc013c":{"kind":"TRIVIAL_REBASE","_number":10,"created":"2022-12-18 15:50:33.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/10","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/10","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/10 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/10 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/10 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/10"}}},"commit":{"parents":[{"commit":"e14b79b1359c1d00c15bf4912ac6ec4d5d83e2d9","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003de14b79b1359c1d00c15bf4912ac6ec4d5d83e2d9"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-18 15:24:07.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d88b4fc8e79e426384c4eb6c07407696645bc013c"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d88b4fc8e79e426384c4eb6c07407696645bc013c"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"e14b79b1359c1d00c15bf4912ac6ec4d5d83e2d9","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":13,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"2896aabee4a9029250cf871ee27fe478aea6c969":{"kind":"TRIVIAL_REBASE","_number":11,"created":"2022-12-20 15:44:41.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/11","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/11","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/11 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/11 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/11 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/11"}}},"commit":{"parents":[{"commit":"60709ed02bd93696b1d6f1b904fb66ee9d8f219a","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d60709ed02bd93696b1d6f1b904fb66ee9d8f219a"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-20 15:44:39.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d2896aabee4a9029250cf871ee27fe478aea6c969"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d2896aabee4a9029250cf871ee27fe478aea6c969"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"60709ed02bd93696b1d6f1b904fb66ee9d8f219a","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":14,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"6d85c5eefe0cdea877269692b00c63312d803b4d":{"kind":"TRIVIAL_REBASE","_number":12,"created":"2022-12-21 13:10:03.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/12","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/12","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/12 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/12 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/12 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/12"}}},"commit":{"parents":[{"commit":"3bed6cc095fcb1b392fa41badcc8e72cec0a9fe0","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d3bed6cc095fcb1b392fa41badcc8e72cec0a9fe0"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 13:10:00.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d6d85c5eefe0cdea877269692b00c63312d803b4d"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d6d85c5eefe0cdea877269692b00c63312d803b4d"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"3bed6cc095fcb1b392fa41badcc8e72cec0a9fe0","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":15,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"1851ef119b50fbfb09176e83474e9f750f83581b":{"kind":"TRIVIAL_REBASE","_number":13,"created":"2022-12-21 14:31:06.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/13","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/13","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/13 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/13 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/13 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/13"}}},"commit":{"parents":[{"commit":"f0d8bf31129795e7e568903bb02a5c055ff72d8f","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003df0d8bf31129795e7e568903bb02a5c055ff72d8f"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 14:30:07.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1851ef119b50fbfb09176e83474e9f750f83581b"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d1851ef119b50fbfb09176e83474e9f750f83581b"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"f0d8bf31129795e7e568903bb02a5c055ff72d8f","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":16,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"2d05621ed774a0ad4bb378eaf7857bfd20ae75e8":{"kind":"TRIVIAL_REBASE","_number":14,"created":"2022-12-21 14:39:11.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/14","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/14","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/14 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/14 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/14 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/14"}}},"commit":{"parents":[{"commit":"e5391824ce8a08ea57bae76c8c4a59fcc71c7678","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003de5391824ce8a08ea57bae76c8c4a59fcc71c7678"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 14:39:05.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d2d05621ed774a0ad4bb378eaf7857bfd20ae75e8"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d2d05621ed774a0ad4bb378eaf7857bfd20ae75e8"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"e5391824ce8a08ea57bae76c8c4a59fcc71c7678","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":17,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"af353906fb8ae088efc408d08208a20745475ed3":{"kind":"TRIVIAL_REBASE","_number":15,"created":"2022-12-21 21:37:28.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/15","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/15","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/15 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/15 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/15 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/15"}}},"commit":{"parents":[{"commit":"32f4b1f58b9ec96ae6bae5cddd13f5b317a46c9e","subject":"refactor(tvix/eval): non-recursive thunk forcing","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d32f4b1f58b9ec96ae6bae5cddd13f5b317a46c9e"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 21:37:23.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003daf353906fb8ae088efc408d08208a20745475ed3"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003daf353906fb8ae088efc408d08208a20745475ed3"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"32f4b1f58b9ec96ae6bae5cddd13f5b317a46c9e","is_merged_in_target_branch":false,"change_id":"Ifc1747e712663684b2fff53095de62b8459a47f3","change_number":7551,"patch_set_number":18,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"667898a442ff5cc2cb0f8396b1c86464496ef2c0":{"kind":"REWORK","_number":16,"created":"2022-12-21 22:12:41.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/16","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/16","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/16 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/16 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/16 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/16"}}},"commit":{"parents":[{"commit":"8b3d03db92c92fac09c92b55f946ae81299491ae","subject":"chore(tvix/cli): rename binary to just \u0027tvix\u0027","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d8b3d03db92c92fac09c92b55f946ae81299491ae"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 22:12:25.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nRelates to b/229.\n\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d667898a442ff5cc2cb0f8396b1c86464496ef2c0"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d667898a442ff5cc2cb0f8396b1c86464496ef2c0"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"8b3d03db92c92fac09c92b55f946ae81299491ae","is_merged_in_target_branch":true,"change_id":"If735c81a04f60dcd77f1c40b595b52ed88bbbe95","change_number":7580,"patch_set_number":13,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"06a4a5948e609787d30579600384a08a69305ae6":{"kind":"NO_CODE_CHANGE","_number":17,"created":"2022-12-21 22:20:50.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/17","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/17","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/17 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/17 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/17 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/17"}}},"commit":{"parents":[{"commit":"8b3d03db92c92fac09c92b55f946ae81299491ae","subject":"chore(tvix/cli): rename binary to just \u0027tvix\u0027","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d8b3d03db92c92fac09c92b55f946ae81299491ae"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-21 22:13:27.000000000","tz":180},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nThe data structure in chunks that carries span information reduces\nin-memory size by trading off the speed of retrieving span\ninformation. This is because the span information is only actually\nrequired when throwing errors (or emitting warnings).\n\nHowever, somewhere along the way we grew a dependency on carrying span\ninformation in thunks (for correctly reporting error chains). Hitting\nthe code paths for span retrieval was expensive, and carrying the\nspans in a different way would still be less cache-efficient. This\nchange is the best tradeoff I could come up with.\n\nRefs: b/229.\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d06a4a5948e609787d30579600384a08a69305ae6"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d06a4a5948e609787d30579600384a08a69305ae6"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"8b3d03db92c92fac09c92b55f946ae81299491ae","is_merged_in_target_branch":true,"change_id":"If735c81a04f60dcd77f1c40b595b52ed88bbbe95","change_number":7580,"patch_set_number":13,"change_status":"MERGED"}],"branch":"refs/heads/canon"},"bf286a54bc2ac5eeb78c3d5c5ae66e9af24d74d4":{"kind":"NO_CODE_CHANGE","_number":18,"created":"2022-12-21 22:21:25.000000000","uploader":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"ref":"refs/changes/58/7558/18","fetch":{"anonymous http":{"url":"https://cl.tvl.fyi/depot","ref":"refs/changes/58/7558/18","commands":{"Checkout":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/18 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/18 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://cl.tvl.fyi/depot refs/changes/58/7558/18 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://cl.tvl.fyi/depot refs/changes/58/7558/18"}}},"commit":{"parents":[{"commit":"8b3d03db92c92fac09c92b55f946ae81299491ae","subject":"chore(tvix/cli): rename binary to just \u0027tvix\u0027","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003d8b3d03db92c92fac09c92b55f946ae81299491ae"}]}],"author":{"name":"Vincent Ambo","email":"mail@tazj.in","date":"2022-12-11 12:16:59.000000000","tz":180},"committer":{"name":"tazjin","email":"tazjin@tvl.su","date":"2022-12-21 22:21:25.000000000","tz":0},"subject":"refactor(tvix/eval): add a LightSpan type for lighter span tracking","message":"refactor(tvix/eval): add a LightSpan type for lighter span tracking\n\nThis type carries the information required for calculating a\nspan (i.e. the chunk and offset), instead of the span itself. The span\nis then only calculated in cases where it is required (when throwing\nerrors).\n\nThis reduces the eval time for\n`builtins.length (builtins.attrNames (import \u003cnixpkgs\u003e {}))` by *one\nthird*!\n\nThe data structure in chunks that carries span information reduces\nin-memory size by trading off the speed of retrieving span\ninformation. This is because the span information is only actually\nrequired when throwing errors (or emitting warnings).\n\nHowever, somewhere along the way we grew a dependency on carrying span\ninformation in thunks (for correctly reporting error chains). Hitting\nthe code paths for span retrieval was expensive, and carrying the\nspans in a different way would still be less cache-efficient. This\nchange is the best tradeoff I could come up with.\n\nRefs: b/229.\nChange-Id: I27d4c4b5c5f9be90ac47f2db61941e123a78a77b\nReviewed-on: https://cl.tvl.fyi/c/depot/+/7558\nReviewed-by: grfn \u003cgrfn@gws.fyi\u003e\nTested-by: BuildkiteCI\n","web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dbf286a54bc2ac5eeb78c3d5c5ae66e9af24d74d4"}],"resolve_conflicts_web_links":[{"name":"cgit","tooltip":"Open in GitWeb","url":"https://code.tvl.fyi/commit/?id\u003dbf286a54bc2ac5eeb78c3d5c5ae66e9af24d74d4"}]},"parents_data":[{"branch_name":"refs/heads/canon","commit_id":"8b3d03db92c92fac09c92b55f946ae81299491ae","is_merged_in_target_branch":true,"change_id":"If735c81a04f60dcd77f1c40b595b52ed88bbbe95","change_number":7580,"patch_set_number":13,"change_status":"MERGED"}],"branch":"refs/heads/canon"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~PrologRule","status":"CLOSED","labels":[{"label":"Autosubmit","status":"MAY"},{"label":"Conformant-Commit-Message","status":"OK","applied_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}},{"label":"All-Comments-Resolved","status":"OK","applied_by":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"}},{"label":"Verified","status":"OK","applied_by":{"_account_id":1000014,"name":"BuildkiteCI","username":"buildkite","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"OK","applied_by":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"}}]},{"rule_name":"Code-Owners","status":"CLOSED"}],"submit_requirements":[{"name":"All-Comments-Resolved","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:All-Comments-Resolved\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:All-Comments-Resolved\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Verified","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Verified\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Owners","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"rule:Code-Owners","fulfilled":true,"status":"PASS","passing_atoms":["Code-Owners"],"failing_atoms":[]}},{"name":"Conformant-Commit-Message","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Conformant-Commit-Message\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Conformant-Commit-Message\u003dgerrit~PrologRule"],"failing_atoms":[]}},{"name":"Code-Review","status":"SATISFIED","is_legacy":true,"submittability_expression_result":{"expression":"label:Code-Review\u003dgerrit~PrologRule","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dgerrit~PrologRule"],"failing_atoms":[]}}]}
