[project @ 2005-03-07 17:46:24 by simonpj]
[ghc-hetmet.git] / ghc / compiler / simplCore / LiberateCase.lhs
index 3139b44..a5aab26 100644 (file)
@@ -12,8 +12,9 @@ import CmdLineOpts    ( DynFlags, DynFlag(..), opt_LiberateCaseThreshold )
 import CoreLint                ( showPass, endPass )
 import CoreSyn
 import CoreUnfold      ( couldBeSmallEnoughToInline )
-import Var             ( Id, setIdNotExported )
+import Id              ( Id, setIdName, idName, setIdNotExported )
 import VarEnv
+import Name            ( localiseName )
 import Outputable
 import Util             ( notNull )
 \end{code}
@@ -190,15 +191,21 @@ libCaseBind env (Rec pairs)
        -- processing the rhs with an *un-extended* environment, so
        -- that the same process doesn't occur for ever!
        --
-       -- Furthermore (subtle!) reset the export flags on the binders so
-       -- that we don't get name clashes on exported things if the 
-       -- local binding floats out to top level.  This is most unlikely
-       -- to happen, since the whole point concerns free variables. 
-       -- But resetting the export flag is right regardless.
-
     extended_env = addRecBinds env [ (setIdNotExported binder, libCase env_body rhs)
                                   | (binder, rhs) <- pairs ]
 
+       -- Two subtle things: 
+       -- (a)  Reset the export flags on the binders so
+       --      that we don't get name clashes on exported things if the 
+       --      local binding floats out to top level.  This is most unlikely
+       --      to happen, since the whole point concerns free variables. 
+       --      But resetting the export flag is right regardless.
+       -- 
+       -- (b)  Make the name an Internal one.  External Names should never be
+       --      nested; if it were floated to the top level, we'd get a name
+       --      clash at code generation time.
+    adjust bndr = setIdNotExported (setIdName bndr (localiseName (idName bndr)))
+
     rhs_small_enough rhs = couldBeSmallEnoughToInline lIBERATE_BOMB_SIZE rhs
     lIBERATE_BOMB_SIZE   = bombOutSize env
 \end{code}