Rework compiler architecture
I found that Phases.mli was not the right place for a clean interface.
Instead, the module returns data that the compiler driver (still called
"state machine") should deftly weave into the state.
The point of this is that it exposes the places where we can
leverage incremental compilation. Incremental compilation is not an
abstraction that can be layered on top of code. Unless you design with
it in mind from the beginning, you need to bust open the program.
I have also started experimenting with `Marshal` so we can persist
compiler state between runs.
Other changes:
- tweaks to interfaces in core
- add Import_graph.fixup
- test actually verifies that the import graph gets amended
- remove cram tests
- some utility functions to replace cram tests:
- improve error handling in various places
- reimplement some tests
- Import_graph.add_edge_exn to avoid mistakenly adding non-existent
trees to the import graph
authored by
This is a binary file and will not be displayed.
This is a binary file and will not be displayed.