Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The basic idea of this stack trace is to provide a dynamic path of an execution leading to a
Blame
. This should be easily extended to other kinds of errors.On a higher order language it's not straight forward what does it mean to call a function (or to enter a function), this approach takes as calling (entering) any time the evaluator looks up a var on the environment. But at the same time it differentiates between two different kinds of vars, let-bound or lambda-bound. I think this provides a good level of detail of what's going on.
There are some examples, here's one (
trace.ncl
):Code:
Output:
The basic idea is that we now can know:
Ideally, we could combine #23 and this information (the stack also has information for every application) in order to say which part violated which subcontract of the failing contract