Refactor package flags into several distinct types.
authorEdward Z. Yang <ezyang@cs.stanford.edu>
Fri, 18 Dec 2015 20:09:36 +0000 (12:09 -0800)
committerEdward Z. Yang <ezyang@cs.stanford.edu>
Tue, 22 Dec 2015 22:22:40 +0000 (14:22 -0800)
commit998739df630cbee7d006329a76786239e3e2c0be
tree72836cb094294d8b575edf76139fce1834a9f19c
parent21b25dffc72fdc45c3c621922e376958f2070058
Refactor package flags into several distinct types.

Summary:
Previously, all package flags (-package, -trust-package,
-ignore-package) were bundled up into a single packageFlags
field in DynFlags, under a single type.  This commit separates
them based on what they do.

This is a nice improvement, because it means that Packages can
then be refactored so that a number of functions are "tighter":

    - We know longer have to partition PackageFlags into
      the ignore flag and other flags; ignore flags are just
      put into their own field.

    - Trust flags modify the package database, but exposed
      flags do not (they modify the visibility map); now
      applyPackageFlag and applyTrustFlag have tighter signatures
      which reflect this.

This patch was motivated by the need to have a separate visibility
map for plugin packages, which will be in a companion patch.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: austin, bgamari, duncan

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D1659
compiler/main/DynFlags.hs
compiler/main/Packages.hs