Skip to content

WIP: Start multi-package support: make dflags and HPT per-package in HscEnv (step towards #10827)

John Ericson requested to merge Ericson2314/ghc:multi-package into master

The idea is to make the initial refactors so we can have multi-package ghci (and perhaps ghc --make too). That feature is just super useful. It also falls under the principle that units of code for humans (top level definitions, modules, components, packages...) should be completely independent of units of work for the tools---humans should be able to organize things without worrying about how the machines will cope.

Credit to Ken Micklas for doing this work and getting the ball rolling.

The first PR is pretty much mechanistic except for two parts:

  • Package imports now are resolved in other home package tables, though they don't yet filter those by name as they should

  • ghc --backpack uses this when setting up a new DynFlags, though it still uses the ExternalPackageTable when perhaps it shouldn't.

After this PR, I really want to do something like https://github.com/ghc-proposals/ghc-proposals/pull/266 but for HscEnv, so I have a better idea of which parts of the code base access which information. This will make it easier to refine the data structures, as there's some friction today (both with and without this change).

  • are either individually buildable or squashed
  • have commit messages which describe what they do (referring to Notes and tickets using #NNNN syntax when appropriate)
  • have added source comments describing your change. For larger changes you likely should add a Note and cross-reference it from the relevant places.
  • add a testcase to the testsuite.
  • replace this message with a description motivating your change

If you have any questions don't hesitate to open your merge request and inquire in a comment. If your patch isn't quite done yet please do add prefix your MR title with WIP:.

Edited by John Ericson

Merge request reports