-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tighen up alias map and add full support for looping constructs.
These are a bit tricky to get right, as different iterations can possibly introduce new dependencies. For example, a set of operators could be cloning themselves into positions in a tuple. For efficiency purposes, most loops should not have to run more than once, otherwise we might hit exponential runtimes. To make this work, the alias graph has been refined to respect scoping; when a binding falls out of scope it is omitted from the graph, and its dependencies are stitched back together. This means what when we reach a ForEachFacts block, at the start the accumulators won't alias each other, and, usually at the end they won't either; so the first pass is used. Care must be taken to make sure these graphs are actually the same. It a dependent alias is found, that's fine, we rerun the initial set of statements with a merged alias map, until we reach a fixpoint.
- Loading branch information
1 parent
0fe053b
commit b403be6
Showing
4 changed files
with
163 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters