Avoid calling newDynFlags when there are no changes
authorSimon Marlow <marlowsd@gmail.com>
Tue, 15 Nov 2016 17:19:04 +0000 (17:19 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 16 Nov 2016 14:31:01 +0000 (14:31 +0000)
This is a small optimisation for :set and :unset

ghc/GHCi/UI.hs

index 3fe42d2..d3c62e6 100644 (file)
@@ -2564,7 +2564,7 @@ setOptions wds =
       let (plus_opts, minus_opts)  = partitionWith isPlus wds
       mapM_ setOpt plus_opts
       -- then, dynamic flags
-      newDynFlags False minus_opts
+      when (not (null minus_opts)) $ newDynFlags False minus_opts
 
 packageFlagsChanged :: DynFlags -> DynFlags -> Bool
 packageFlagsChanged idflags1 idflags0 =
@@ -2661,7 +2661,7 @@ unsetOptions str
              mapM_ unsetOpt plus_opts
 
              no_flags <- mapM no_flag minus_opts
-             newDynFlags False no_flags
+             when (not (null no_flags)) $ newDynFlags False no_flags
 
 isMinus :: String -> Bool
 isMinus ('-':_) = True