summaryrefslogtreecommitdiff
path: root/compiler/main/DynamicLoading.hs
diff options
context:
space:
mode:
authorDaniel Gröber <dxld@darkboxed.org>2018-12-11 13:24:12 -0500
committerBen Gamari <ben@smart-cactus.org>2018-12-11 14:23:22 -0500
commitda05d79d03e5e03e391b381f23c46fc02957abf7 (patch)
tree4506d0f46dc5df4293ae1933d87b1367be0de831 /compiler/main/DynamicLoading.hs
parent9e763afa9f1f75eacce24291f298f32527591b14 (diff)
downloadhaskell-da05d79d03e5e03e391b381f23c46fc02957abf7.tar.gz
Support registering Plugins through the GHC API
This allows tooling using the GHC API to use plugins internally. Hopefully this will make it possible to decouple the development of useful plugins from (currently) kitchen-sink type tooling projects such as ghc-mod or HIE -- at least to some extent. Test Plan: validate Reviewers: bgamari, mpickering Subscribers: mpickering, alanz, rwbarton, carter GHC Trac Issues: #15826 Differential Revision: https://phabricator.haskell.org/D5278
Diffstat (limited to 'compiler/main/DynamicLoading.hs')
-rw-r--r--compiler/main/DynamicLoading.hs13
1 files changed, 8 insertions, 5 deletions
diff --git a/compiler/main/DynamicLoading.hs b/compiler/main/DynamicLoading.hs
index 7420f7cc01..0a5264e3f2 100644
--- a/compiler/main/DynamicLoading.hs
+++ b/compiler/main/DynamicLoading.hs
@@ -83,13 +83,15 @@ initializePlugins _ df
return df
#else
initializePlugins hsc_env df
- | map lpModuleName (plugins df) == pluginModNames df -- plugins not changed
- && all (\p -> lpArguments p == argumentsForPlugin p (pluginModNameOpts df))
- (plugins df) -- arguments not changed
+ | map lpModuleName (cachedPlugins df)
+ == pluginModNames df -- plugins not changed
+ && all (\p -> paArguments (lpPlugin p)
+ == argumentsForPlugin p (pluginModNameOpts df))
+ (cachedPlugins df) -- arguments not changed
= return df -- no need to reload plugins
| otherwise
= do loadedPlugins <- loadPlugins (hsc_env { hsc_dflags = df })
- return $ df { plugins = loadedPlugins }
+ return $ df { cachedPlugins = loadedPlugins }
where argumentsForPlugin p = map snd . filter ((== lpModuleName p) . fst)
#endif
@@ -106,7 +108,8 @@ loadPlugins hsc_env
dflags = hsc_dflags hsc_env
to_load = pluginModNames dflags
- attachOptions mod_nm (plug, mod) = LoadedPlugin plug mod (reverse options)
+ attachOptions mod_nm (plug, mod) =
+ LoadedPlugin (PluginWithArgs plug (reverse options)) mod
where
options = [ option | (opt_mod_nm, option) <- pluginModNameOpts dflags
, opt_mod_nm == mod_nm ]