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}
-- 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}