Skip to content
  • Matthew Pickering's avatar
    8f9ae339
    Load bytecode libraries to satisfy package dependencies · 8f9ae339
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    This commit allows you to use a bytecode library to satisfy a package
    dependency when using the interpreter.
    
    If a user enables `-fprefer-byte-code`, then if a package provides a
    bytecode library, that will be loaded and used to satisfy the
    dependency.
    
    The main change is to separate the relevant parts of the `LoaderState`
    into external and home package byte code. Bytecode is loaded into either
    the home package or external part (similar to HPT/EPS split), HPT
    bytecode can be unloaded. External bytecode is never unloaded.
    
    The unload function has also only been called with an empty list of
    "stable linkables" for a long time. It has been modified to directly
    implement a complete unloading of the home package bytecode linkables.
    
    At the moment, the bytecode libraries are found in the "library-dirs"
    field from the package description. In the future when `Cabal`
    implements support for "bytecode-library-dirs" field, we can read the
    bytecode libraries from there. No changes to the Cabal submodule are
    necessary at the moment.
    
    Four new tests are added in testsuite/tests/cabal, which generate fake
    package descriptions and test loading the libraries into GHCi.
    
    Fixes #26298
    8f9ae339
    Load bytecode libraries to satisfy package dependencies
    Matthew Pickering authored and Marge Bot's avatar Marge Bot committed
    This commit allows you to use a bytecode library to satisfy a package
    dependency when using the interpreter.
    
    If a user enables `-fprefer-byte-code`, then if a package provides a
    bytecode library, that will be loaded and used to satisfy the
    dependency.
    
    The main change is to separate the relevant parts of the `LoaderState`
    into external and home package byte code. Bytecode is loaded into either
    the home package or external part (similar to HPT/EPS split), HPT
    bytecode can be unloaded. External bytecode is never unloaded.
    
    The unload function has also only been called with an empty list of
    "stable linkables" for a long time. It has been modified to directly
    implement a complete unloading of the home package bytecode linkables.
    
    At the moment, the bytecode libraries are found in the "library-dirs"
    field from the package description. In the future when `Cabal`
    implements support for "bytecode-library-dirs" field, we can read the
    bytecode libraries from there. No changes to the Cabal submodule are
    necessary at the moment.
    
    Four new tests are added in testsuite/tests/cabal, which generate fake
    package descriptions and test loading the libraries into GHCi.
    
    Fixes #26298
Loading