diff options
author | Vincent Ambo <mail@tazj.in> | 2023-03-12T21·56+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-03-17T19·32+0000 |
commit | 8c13f18d114cfaaa3b6a9907a04a57c3fe7733b4 (patch) | |
tree | 800971cee1bddd8bd00bd427d8a741af5acae932 /tvix/eval/src/chunk.rs | |
parent | 3fa6b13c1e8cbd7a007365dbac0ffc30d03d8472 (diff) |
feat(tvix/eval): report all known spans on infinite recursion r/6026
This reports the span 1. of the code within a thunk, 2. of the place where the thunk was instantiated, 3. of the place where the thunk was first forced, 4. of the place where the thunk was forced again, when yielding an infinite recursion error, which hopefully makes it easier to debug them. The spans are tracked in the ThunkRepr::Blackhole variant when putting a thunk under evaluation. Note that we currently have some loss of span precision in the VM loop when switching between frame types, so spans 3/4 are currently a bit wonky. Working on it. Change-Id: Icbd2a9df903d00e8c2545b3fc46dcd2a9e3e3e55 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8270 Reviewed-by: flokli <flokli@flokli.de> Tested-by: BuildkiteCI Autosubmit: tazjin <tazjin@tvl.su>
Diffstat (limited to 'tvix/eval/src/chunk.rs')
-rw-r--r-- | tvix/eval/src/chunk.rs | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/tvix/eval/src/chunk.rs b/tvix/eval/src/chunk.rs index 04b58bde20fd..86d78cbe6343 100644 --- a/tvix/eval/src/chunk.rs +++ b/tvix/eval/src/chunk.rs @@ -65,6 +65,11 @@ impl Chunk { CodeIdx(idx) } + /// Get the first span of a chunk, no questions asked. + pub fn first_span(&self) -> codemap::Span { + self.spans[0].span + } + /// Pop the last operation from the chunk and clean up its tracked /// span. Used when the compiler backtracks. pub fn pop_op(&mut self) { |