Refactor AST and interpreter, temporarily disable records #48
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 current structure of using an evaluator trait has reached its limits, not that it was every really that great. Instead of having an evaluator trait, this PR introduces an
AstNode
enumeration, includingDefinition
andExpression
enumerations.The
AstNode
can be created from a syntax object viaAstNode::parse
, which performs all of the necessary expansions at the correct time. After anAstNode
is created, it can be evaluated directly by running itseval
procedure.The core reason for this restructure is that I would like to introduce compilation to the pipeline. In theory, that should look like the following:
Syntax -> AstNode (bundled into compilation units) -> CPS -> LLVM IR -> compiled functions
This should reduce a lot of code, and ultimately be quite a bit faster. Additionally, this new structure should make adding continuations to the expansion process more viable. Additionally additionally, this new structure is waaaaaay easier to debug.
This PR is likely to introduce some bugs, it changes a lot of code. Oh well, I'll add more tests hopefully soon.