
#11656: Alllow static pointers to local closed definitions -------------------------------------+------------------------------------- Reporter: mboes | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.3 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by facundo.dominguez): This is the mechanism we were considering so far: 1. Have the renamer compute whether bindings in scope are closed. 2. When the renamer finds a static form, allow the free vars to be top- level or closed local bindings. 3. Desugar the static form. This produces a list of floated Core bindings. 4. For each such Core binding find the free variables of local definitions. 5. For each found local definition traverse the enclosing top-level binding to remove it. 6. Add each removed local definition at the top level. If it simplifies anything, a variant is to skip (5) and have (6) copy the local definitions as local definitions of the Core bindings produced in (3). This might duplicate local definitions once per static form in which they are used. Does copying definitions like this require also renaming bindings? Local definitions may transitively use other local definitions, in which case all of them should be floated. We were wondering if we are the first hackers in need of a function in GHC to determine if bindings are closed or not. Maybe someone could point if this is computed elsewhere already. We only found a flag {{{tct_closed}}} which only applies to types, not expressions. Is floating local definitions to the top-level disruptive for other compilation stages? We are open to proposals of alternative mechanisms. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11656#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler