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.
This PR experiments with refactoring the lexer and the parser to entirely rely on spans, instead of directly constructing values.
This makes the construction of the AST a bit more efficient, since it reduces the number of allocations needed.
The interpreter then takes the AST and can resolve spans to string slices (an efficient non-owning view into a string) when needed, by keeping around the source code for each class definitions.
It opens the door for better error-reporting, allowing to show proper stack-traces to the user (although not done here yet and probably not within the scope of this PR).
But it also means that things like integer literals need to be parsed into actual integers every time we evaluate one.
I haven't done any measurements yet on the performance delta with the original implementation, so I cannot say if this is an actual improvement over it.
The implementation should already be feature-complete and in parity with the features of the original interpreter.